文章目录
在CentOS7上用kubeadm HAProxy Keepalived 安装多Master节点的高可用Kubernetes集群
前言
之前写过一篇文章使用kubeadm一键部署kubernetes集群 v1.10.3 v1.11.0 v1.13.0 和编写了一个一键部署单Master节点的Kubernetes集群的开源项目k8s-deploy。
现在Kubernetes已更新到v1.19,所以重新更新了k8s-deploy项目,支持部署多Master节点的高可用Kubernetes集群。
在正式安装前,推荐先阅读k8s-deploy项目和Troubleshooting中的常见问题。
官方文档
- 使用 kubeadm 引导集群
- 使用 kubeadm 创建集群
- 高可用拓扑选项
- 利用 kubeadm 创建高可用集群
- Bootstrapping clusters with kubeadm
- Creating a cluster with kubeadm
- Options for Highly Available topology
- Creating Highly Available clusters with kubeadm
部署规划
资源规划
全部节点都在一个低延迟的子网中:
主机名 | IP | 说明 |
---|---|---|
k8s-lb-01 |
192.168.0.151 192.168.0.170 |
HAProxy + Keepalived (master) |
k8s-lb-02 |
192.168.0.161 192.168.0.170 |
HAProxy + Keepalived (backup) |
k8s-master-01 |
192.168.0.152 | Master节点1 |
k8s-master-02 |
192.168.0.153 | Master节点2 |
k8s-master-03 |
192.168.0.162 | Master节点3 |
k8s-worker-01 |
192.168.0.154 | Worker节点1 |
k8s-worker-02 |
192.168.0.164 | Worker节点2 |
k8s-worker-03 |
192.168.0.165 | Worker节点3 |
说明:
- 采用外部HAProxy作集群负载均衡器;
- 采用2个 HAProxy + Keepalived 来保证负载均衡的高可用,Keepalived VIP为192.168.0.170;
- 采用每个Master节点上伴随部署Etcd的方式(Slacked Etcd typology 堆叠Etcd拓扑),而Etcd高可用最少需要3个节点(奇数),因此Master节点至少为3个。
- 3个worker节点来保证worker节点高可用。
- 服务器规格都为CentOS7 x86_64 2vCPU/2G 。
- 全部机器都在192.168.0.0/24网段,且相互连通。
集群规划
计划部署“2负载均衡 + 3 Master节点 + 3 Worker节点”的高可用Kubernetes集群:
- Docker 19.03.11
- Kubernetes v1.19.3
- Calico网络组件
- HAProxy负载均衡
- 集群Control-Plane Endpoint:
192.168.0.170:6443
- 集群API Server(s):
192.168.0.152:6443
192.168.0.153:6443
192.168.0.162:6443
部署负载均衡服务器
安装和配置HAProxy
安装HAProxy:
yum install haproxy -y
编辑/etc/haproxy/haproxy.cfg
,删掉默认的代理设置,添加负载均衡反向代理到Kubernetes集群Master节点的设置:
#---------------------------------------------------------------------
# apiserver frontend which proxys to the masters
#---------------------------------------------------------------------
frontend apiserver
bind *:6443
mode tcp
option tcplog
default_backend apiserver
#---------------------------------------------------------------------
# round robin balancing for apiserver
#---------------------------------------------------------------------
backend apiserver
option httpchk GET /healthz
http-check expect status 200
mode tcp
option ssl-hello-chk
balance roundrobin
server k8s-master-01 192.168.0.152:6443 check
server k8s-master-02 192.168.0.153:6443 check
server k8s-master-03 192.168.0.162:6443 check
以服务方式运行HAProxy:
systemctl daemon-reload
systemctl enable haproxy
systemctl start haproxy
查看HAProxy服务状态:
systemctl status haproxy -l
如果HAProxy启动失败,请关闭SELinux再试。
安装和配置Keepalived
安装Keepalived:
yum install keepalived -y
配置Linux系统内核参数:
sudo cat <<EOF > /etc/sysctl.d/keepali