Kubeadm之单节点master升级高可用master
单节点升级 master 总体来说就是两步, 先修改 apiserver 地址为负载均衡地址,然后添加新的 master 节点。
搭建集群的时候我们注意一下就可以减少后期维护的烦恼,比如:
- 使用 hostname 而不是 ip 来作为 kube-apiserver 地址
- 单节点也把负载均衡安排上
假设已经有一个没有负载均衡的单节点 master,现在想将它切换为高可用集群,记录以下步骤:
部署负载均衡
更新证书
因为我们部署了负载均衡,所以需要通过负载均衡的地址来访问 apiserver,因为证书是针对域名或者 ip 做的签名,如果 ip 变了证书就失效了,这也是为什么建议使用 hostname 来代替 ip
如果你是用 kubeadm init 来创建的集群,那么你需要导出一个 kubeadm 配置
1 | kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml |
添加证书 SANs 信息
1 | apiServer: |
生成新的证书
备份旧证书
1 | mv /etc/kubernetes/pki/apiserver.{crt,key} . |
生成新的证书
1 | kubeadm init phase certs apiserver --config kubeadm.yaml |
验证证书,确定包含新添加的 SAN 列表
1 | openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text |
重启 apiserver
1 | kubectl delete pod kube-controller-manager-m1 kube-controller-manager-m2 |
保存新的配置
这步操作其实是把 kubeadm 的配置给保存在集群中, 以后添加新的节点就会读取这个配置
1 | kubeadm init phase upload-config kubeadm --config kubeadm.yaml |
当然你也可以手动编辑 configmap
更新配置
证书更新完成了,负载均衡也部署好了,接下来就需要把所有用到旧地址的组件配置修改成负载均衡的地址。
kubelet.conf
1 | vim /etc/kubernetes/kubelet.conf |
controller-manager.conf
1 | vim /etc/kubernetes/controller-manager.conf |
重启 kube-controller-manager
1 | kubectl delete pod -n kube-system kube-controller-manager-m1 kube-controller-manager-m2 |
scheduler.conf
vim /etc/kubernetes/scheduler.conf
1 | ... |
重启 kube-scheduler
1 | kubectl delete pod -n kube-system kube-scheduler-m1 kube-scheduler-m2 |
kube-proxy
1 | kubectl edit configmap kube-proxy -n kube-system |
重启 kube-proxy
1 | kubectl rollout restart daemonset kube-proxy -n kube-system |
kubeconfig 上面的地址也需要改,比如 ~/.kube/config
和 /etc/kubernetes/admin.conf
1 | ... |
添加控制平面
添加控制平面 (master) 请查看:kubeadm添加master节点
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭!
评论