示例服务器:
Loadbalance:lb-31 192.168.31.31 Master:m-41 192.168.31.41 Work:w-42 192.168.31.42 Work:w-43 192.168.31.43
1、使用场景
当集群中只有一个master节点时,如果其出现了故障,会导致Kubernetes(k8s)的控制平面完全失效。如要保证Kubernetes(k8s)集群的高可靠性,可以设置多个master,当其中部分master出现故障时,其他master还可以管理整个集群。
正常情况下,可以使用一个负载均衡器(Loadbalance)将请求转发给集群中的master,如果有一天其中的一个master出现故障后,负载均衡器仅需要将请求发送另外的master即可。
环境中有2个master,1个worker node。管理访问负载均衡器haproxy,地址为192.168.31.31
,然后访问请求被均匀负载到两个master上。两个master之间的数据由etcd来同步。如果想要更高的可靠性,可以设置两个以上的loadbalance、和worker。
2、安装Loadbalance
1)安装haproxy
yum inastll haproxy -y
2)编辑配置文件,在文件末尾设置关联的Master:
vim /etc/haproxy/haproxy.cfg
设置两个服务器权重相同,内容如下:
listen k8s-lb *:6443 mode tcp balance roundrobin server s1 192.168.31.41:6443 weight 1 server s2 192.168.31.42:6443 weight 1
3)启动服务及查看状态
systemctl enable haproxy --now systemctl status haproxy
3、安装etcd
参考文档:
Kubernetes(k8s) etcd 安装与配置单节点集群方法
Kubernetes(k8s) etcd创建快照及恢复数据方法
4、部署多master集群
参考文档:Kubernetes(k8s) 简介及安装与配置方法
1)基本上和部署单master时一致,不同的是可以选择使用yaml文件在第一个master上来初始化集群
kubeadm init --config=kubeadm-config.yaml
2)kubeadm-config.yaml文件从kubeadm config view获取,修改控制平面选项controlPlaneEndpoint,指向了haproxy的地址
apiServer: extraArgs: authorization-mode: Node,RBAC timeoutForControlPlane: 3m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki controlPlaneEndpoint: "192.168.31.31:6443" clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: registry.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: v1.21.0 networking: dnsDomain: cluster.local podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/12 scheduler: {}
3)之后会和单节点操作相同,提示将其余的worker node和master加入集群的命令。如果是master身份加入集群,需要在以worker node加入的命令后写上–control-plane。
参考文档:Kubernetes(k8s) 简介及安装与配置方法
注意:需要将在第一个master上的/etc/kubernetes/pki
下的所有证书文件拷贝到其他master的相同目录中。
Master高可用性的方案还可以使用sealos,具体可以参考如下文档: