引言
之前我写了一篇文章介绍了离线部署Kubernetes 1.9.0,当时搭建的是1+3模式,此种模式不适合用于生产,为了防止由于master节点宕机造成集群不能正常工作的问题,推荐搭建Kubernetes高可用集群,本篇文章将介绍如何使用rancher搭建Kubernetes高可用集群。
准备工作
- 集群机器
首先准备搭建集群环境的机器,笔者准备的集群机器如下:
Hostname | IP | Memory | OS | Role |
---|---|---|---|---|
k8smaster1 | 192.168.246.128 | 6G | CentOS 7.5 | Kubernetes master 节点 |
k8smaster2 | 192.168.246.129 | 6G | CentOS 7.5 | Kubernetes master 节点 |
k8smaster3 | 192.168.246.130 | 6G | CentOS 7.5 | Kubernetes master 节点 |
k8sworker1 | 192.168.246.131 | 12G | CentOS 7.5 | Kubernetes node 节点 |
k8sworker2 | 192.168.246.132 | 12G | CentOS 7.5 | Kubernetes node 节点 |
k8sworker3 | 192.168.246.133 | 12G | CentOS 7.5 | Kubernetes node 节点 |
k8sworker4 | 192.168.246.134 | 12G | CentOS 7.5 | Kubernetes node 节点 |
k8sworker5 | 192.168.246.135 | 12G | CentOS 7.5 | Kubernetes node 节点 |
- 软件版本
2.1 rancher
截止写这篇文章时,rancher的最新版本是v2.0.8,所以我使用的v2.0.8的稳定版,这里还要关注一下v2.0.8版本对软硬件的要求,在GitHub上可以看到对于环境的最低要求:
- 操作系统
Ubuntu 16.04 (64-bit)
Red Hat Enterprise Linux 7.5 (64-bit)
RancherOS 1.3 (64-bit) - 硬件
至少4 GB内存 - 软件
Docker版本:v1.12.6, 1.13.1, 17.03.2
2.2 Kubernetes
Kubernetes的版本需要根据rancher来定,在rancher v2.0.8 release notes中说明了推荐使用1.11.2版本的Kubernetes;
2.3 Docker
Docker的版本需要根据Kubernetes来定,在Kubernetes 1.11 change log中描述如下,和1.10版本一样,经过验证的Docker版本有1.11.2 至 1.13.1 和 17.03.x;
- 环境配置
3.1 修改每台机器的【/etc/hosts】文件,增加以下解析:
192.168.246.128 k8smaster1
192.168.246.129 k8smaster2
192.168.246.130 k8smaster3
192.168.246.131 k8sworker1
192.168.246.132 k8sworker2
192.168.246.133 k8sworker3
192.168.246.134 k8sworker4
192.168.246.135 k8sworker5
3.2 关闭所有机器的安全加强系统SELinux,使容器能够访问到宿主机文件系统
vim /etc/selinux/config
将【SELINUX】设置为【disabled】
临时关闭SELinux
setenforce 0
3.3 关闭虚拟内存
修改配置文件【/etc/fstab】
vim /etc/fstab
注释掉swap那一行
然后通过命令临时关闭虚拟内存
swapoff -a
关于不关闭虚拟内存会出现的问题我在离线部署Kubernetes 1.9.0已经注明;
3.4 设置防火墙
如果是做测试用,可以直接关掉防火墙,但是如果是用于生产环境,还是老老实实的去设置需要开发的端口吧,运行以下命令关闭防火墙
systemctl stop firewalld.service && systemctl disable firewalld.service
3.5 安装docker
选择docker版本【docker 17.03.2-ce】,安装步骤参考这里,或者也可以选择直接运行下面的命令
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
curl -o /etc/yum.repos.d/CentOS-Base-Ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/CentOS-Base-163.repo https://mirrors.163.com/.help/CentOS7-Base-163.repo
curl -o /etc/yum.repos.d/Docker-ce-Ali.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
yum install --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch -y
systemctl enable docker.service && systemctl start docker.service
部署rancher
rancher的部署有两种方式,分别是单点部署和高可用部署,由于本文的重点在于如何使用rancher搭建Kubernetes高可用集群,所以本文使用rancher的单点部署方式,至于rancher的高可用部署,以后再写文章补充。
选择一个节点(我选择的是k8smaster1节点)运行如下命令安装单节点rancher:
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:stable
安装完成后运行【docker ps】会看到有一个rancher的容器
现在通过浏览器访问【https://192.168.246.128/】会发现跳转到了【https://192.168.246.128/update-password】,让我们为admin用户设置一个密码:
接着设置访问rancher的URL,需要能够被所有的节点访问到,这里你可以设置成【rancher.{domain.com}】:
设置完成后点击【Save URL】,然后就进入添加集群的页面了
点击【Add Cluster】添加集群,选择【CUSTOM】:
填写集群名称,然后展开【Cluster Options】,设置集群配置,网络提供者选择Flannel
设置完成后点击【Next】按钮,就可以看到添加Node命令的界面了,根据节点的角色进行选择,我的主节点的角色选择是etcd+Control Plane,工作节点的角色选择是Worker,选择完后就会看到下面生成的命令,将命令Copy到相应的节点运行就可以了
然后点到【Cluster】就会看到集群正在准备环境(Provisioning),你现在要做的就是等待
等到所有的节点都添加完成之后就能看到集群的状态已经变成【Active】了,然后就可以部署你的应用了。