高可用Kubernetes集群搭建方案
Kubernetes用于生产环境要考虑的首要问题是Kubernetes集群的高可用性,Kubernetes集群的高可用主要指控制平面的高可用。目前,kubeadm引导的k8s集群的控制平面是单点的。
1. Kubernetes集群控制平面的高可用考量
- 不止一个Master节点
- etcd集群数据库的高可用
- 多Master节点下kube-scheduler、kube-controller-manager的运行机制问题
- 多Master节点上的kube-apiserver对外要暴露唯一入口,并负载均衡
2. Kubernetes集群控制平面高可用方案前提
基于Kubeadm引导的集群
- 要有三个或三个以上的节点用于部署Master组件
- 建议Master节点不承担工作负载
- 建议etcdj集群单独部署在三个干净独立的节点上
3. Kubernetes集群控制平面高可用方案步骤
3.1 搭建高可用etcd集群
etcd集群搭建步骤:
- 创建etcd专用CA
- 创建peer.crt,peer.key,server.crt,server.key
在每个节点上执行一下语句生成peer和server的私钥和证书:
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=serverconfig.json | cfssljson-bare server
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peerconfig.json | cfssljson-bare peer
- 同步证书,并启动etcd集群
3.2 搭建load balancer
常见的负载均衡器有多种,可以使用云服务提供商提供的负载均衡服务,也可以自己搭建(lvs+keepalived等)
3.3 创建etcd集群的client相关证书
在etcd0上创建cilent访问相关证书
- 创建client访问etcd集群证书
cfssl gencert -ca=ca.crt -ca-key=ca.key -config=ca-config.json -profile=client client.json丨cfssljson-bare client
- 将client证书拷贝到每个master node上
ca.crt,client.crt,client.key -> /etc/kubernetes/pki/etcd(每个masternode)
3.4 安装master0节点上的控制平面
基于kubeadm引导
kubeadm init -config=config.yaml
3.5 安装master1和master2上的控制平面
- 将CA等证书文件scp到masterl和master2节点
/etc/kubernetes/pki/[ca.crt,ca.key,sa.key,sa.pub) -> master1 和 master2
- 执行kubeadm init -config=config.yaml on mastel和master2
kubeadm init -config=config.yaml
- 将masterl和master2加入到 Load Balancer
3.6 收尾工作
- 安装CNI网络
- 将Worker Nodes加入高可用集群
- 配置Node组件kubelet和kube-proxy通过LB与apiserver通信