一、计算机准备
我这里准备四台计算机。虚拟机,物理机,云服务器均可,各项配置尽可能高一些。这四台计算机应部署有Linux系统,且能互相通信。
| 机器名 | ip | 部署内容 | cpu核数 | 内存(G) | 硬盘(G) |
|---|---|---|---|---|---|
| myCentOS7 | 192.168.232.128 | rancher | 4 | 7 | 20 |
| k8s-node1 | 192.168.232.129 | node | 4 | 2 | 20 |
| k8s-node2 | 192.168.232.130 | node | 4 | 2 | 20 |
| k8s-master01 | 192.168.232.131 | master | 4 | 3 | 20 |
二、设置k8s安装前的计算机环境
以下设置需要在四台计算机上都完整地执行一次。
1.升级Linux内核到最新版
我使用的操作系统是CentOS7,默认的内核版本是3.10.0,升级内核的方法有多种。在这里介绍一种比较简便的方法。
依次运行以下命令:
#导入ELRepo仓库的公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#为yum安装ELRepo仓库
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#查看可用版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装最新内核
yum --enablerepo=elrepo-kernel install kernel-ml
# 查看当前可用内核
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
# 升级最新版本内核
grub2-set-default 0
# 重启系统
reboot
升级完成,可以通过uname -r命令进项验证版本。
2.设置时间同步
kubernetes要求集群中的节点时间必须精确一致,您可以同时运行一下date命令,检查一下几台机器的时间是否正常。如果正常,则可以跳过此步。
如果时间有异常,或者为了更稳妥一点,您可以设置一下时间同步。
yum install -y ntpdate #下载ntpdate
ntpdate ntp1.aliyun.com #更新系统时间
3.hostname设置
vim /etc/hostname 删除原有内容,输入主机名保存退出即可。
4.hosts设置
vim /etc/hosts 即可设置hosts。K8S集群一般包含多台计算机,hosts的内容应该包含集群内的所有机器。如:
5.关闭防火墙
# 关闭防火墙
systemctl stop firewalld
# 关闭防火墙开机启动
systemctl disable firewalld
6.禁用selinux
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题。
临时关闭:输入命令sudo setenforce 0。但重启系统后还会开启。
永久关闭(推荐):输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出。
7.禁用swap分区
-
swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用
-
启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备
-
但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
# 临时
swapoff -a
# 永久(推荐)
sed -ri 's/.*swap.*/#&/' /etc/fstab
确认swap已经关闭
free -m
若swap行都显示 0 则表示关闭成功
8.配置linux的内核参数
- 添加网桥过滤和地址转发功能,编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
sudo vi /etc/sysctl.d/kubernetes.conf
#添加如下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
重新加载配置,加载网桥过滤模块
modprobe br_netfilter && sysctl -p /etc/sysctl.d/kubernetes.conf
查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter
9.配置ipvs功能
在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的
两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
- 安装ipset和ipvsadm
yum install ipset ipvsadmin -y
- 添加需要加载的模块写入脚本文件
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
- 为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
- 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
- 查看对应的模块是否加载成功
lsmod | grep -e -ip_vs -e nf_conntrack
10.重启服务器
上面步骤完成之后,需要重新启动linux系统: reboot
三、安装docker
k8s基于docker容器环境,先安装docker:# linux下安装docker
四、# 部署rancher
1.Rancher简介
之前我们一直都是使用命令行来管理K8S的,这种做法虽然对程序员来说看起来很炫酷,但有时候用起来还是挺麻烦的。今天我们来介绍一个K8S可视化管理工具Rancher,使用它可以大大减少我们管理K8S的工作量,希望对大家有所帮助!
Rancher是为使用容器的公司打造的容器管理平台。Rancher简化了使用K8S的流程,开发者可以随处运行K8S,满足IT需求规范,赋能DevOps团队。
2.Rancher安装运行
docker run -p 80:80 -p 443:443 --name rancher --privileged --restart=unless-stopped -d rancher/rancher
本地没有镜像的话,会拉取远程,这里推荐一篇:docker镜像加速教程
3.配置Rancher
完成后,访问https://<部署主机的ip> ,进入rancher管理页面。
可以看到rancher的引导信息,提示你需要进行如下操作
# 找到您的容器ID
docker ps
# 找到密码
docker logs ${container-id} 2>&1 | grep "Bootstrap Password:"
然后将查询到的字符串复制到Password文本框中,点击Log in with Local User。
如图所示,你可以自定义密码,然后勾选第二个箭头,完成点击继续。
按照如图的操作,可以设置为中文语言。
五、创建k8s集群
1.点击箭头处的创建。
2.点击自定义。
3.填写集群名字,并选择版本。
4.在“Advanced Options”中进行高级设置,比如:选择是否启用Nginx Ingress,我这里选择没有开启,主要是用不上。是否开启请根据您的需求来定。这个设置项后续可以点击rancher界面中此集群的升级按钮进行重新选择。
5.点击“Next”后,进入添加主机命令页面。
6.点选Etcd,Control Plan两个选项,然后复制下方的命令,到master节点执行。
点选Worker选项,然后复制下方的命令,到node节点执行。
当集群前面的状态变成Active时,就表示集群部署完成,可以点击集群的名称,进入集群详情页。
7.使用kubectl获取所有节点状态
至此,集群安装完毕!!!