将Kubeadm单Master集群平滑升级至HA Master集群

文章楔子

本文旨在通过最简易的方式指导读者将现有的,kubeadm创建的单master集群升级为HA master集群。
升级过程无痛,使用kubeadm原生的功能实现,不需要重启docker及无关容器。
除k8s集群控制相关功能(部署、升级、删除、查看、调度等),用户的服务不会被中断。
升级过程可以将原来是worker的机器平滑纳入HA master中,同时不影响原来worker上的容器。
本文中的自动化部署脚本可以在Lentil1016/kubeadm-ha找到,欢迎Star/Fork/提issue和PR。
在我的环境上进行示例升级的录像可以在该链接查看。

额外的,考虑到需要平滑升级的集群一般为正在使用中的集群,甚至可能涉及到生产集群,因此特别提醒读者
本文升级过程中如果产生故障,通常需要手动修改ETCD的Cluster状态以回退或继续升级。
因此要求维护人员对于ETCD集群重建,成员添加、删除等有一定经验
数据无价,请不要贸然操作。

本文升级过程为作者原创(可能是首创),尚处于验证的早期,仅在为数不多的集群上进行过测试。
本指导文章很可能还会继续演进,完善指导,并添加故障恢复等内容。
作者在kubernetes/website提交了一份proposal,想申请将”平滑升级”的内容加入到官方文档。
如果有人对该文档有什么需求或者期望可以去上面的链接里提,让社区看到这种需求是存在的。
但也不要随便@人家哈,社区的维护者比较忙。

升级前

升级摘要

升级后,原来的单master将变成HA master中的master-1,另外会有两台master备机作为master-2/master-3被加入集群,其中master-2/master-3既可以是新的、集群外部的机器,也可以是原来集群中的worker机器。

升级的基本步骤如下:

  • 删除master-1上原有的 KubeConfig、manifest/etcd、pki/etcd-server、pki/etcd-peer、pki/apiserver
  • 使用 kubeadm alpha phase 命令重新创建上列配置
  • 重启master-1上的 apiserver/controller/scheduler/etcd 容器
  • 修改master-1上ETCD中0号member的PeerUrl=https://127.0.0.1:2380为https://{master_1_IP}:2380
  • 配置新的master备机到集群中

各个机器的主机信息以及IP分布如下:

  • Distribute: CentOS 7
  • Docker: 17.03.2-ce
  • Kernel: 4.4.152-1.el7.elrepo.x86_64
  • Kubernetes: 1.11.0
  • NetPlugin: Calico
  • Proxy-Mode: IPVS
  • Master-Mode: HA Master
  • DNS: CoreDNS
Host Name Old Role New Role IP
centos-7-x86-64-29-80 master  master-1 10.130.29.80
centos-7-x86-64-29-81 worker master-2 10.130.29.81
centos-7-x86-64-29-82  Not in cluster master-3 10.130.29.82
harbor image registry image registry 10.130.38.80
Virtual IP 10.130.29.83

前置条件

  • master-2/master-3上已经正确的部署了kubeadm/kubectl/kubelet/docker
  • 集群所有机器上的内核版本高于4.0,并且安装了ipvsadm。以便开启ipvs,如果不想开启,请自行修改升级脚本,去掉kube-proxy的ipvs配置
  • master-1/master-2/master-3上已经安装了keepalived,并且规划了一个VIP以备使用。
  • master-1/master-2/master-3上可以拉取到k8s相关镜像。如果需要离线包,请参考kubeadm HA集群搭建指南中“安装私有镜像库”一节

配置免密码登陆

请格外注意,请以现有的单master作为master-1机器,另两台master备机分别作为master-2 master-3。

将该公钥复制,并分别登陆到master-1 master-2 master-3的root用户,将它令起一行粘贴到 ~/.ssh/authorized_keys 文件中,包括master-1自己

复制完成后,从master-1上分别登陆master-1 master-2 master-3测试是否可以免密码登陆(请不要跳过这一步),可以的话便可以继续执行下一步

升级至HA Master

升级脚本解析

升级脚本和kubeadm HA集群搭建指南一文中的自动部署脚本只有细微的不同,在kubeha-gen.sh脚本中本应执行“kubeadm init”命令的地方,在kubeha-upgrade.sh脚本中变成了以下步骤

  • 删除master-1上原有的 KubeConfig、manifest/etcd、pki/etcd-server、pki/etcd-peer、pki/apiserver
  • 使用 kubeadm alpha phase 命令重新创建上列配置
  • 重启master-1上的 apiserver/controller/scheduler/etcd 容器
  • 修改master-1的PeerUrl=https://127.0.0.1:2380为https://{master_1_IP}:2380

开始升级

请格外注意,请以现有的单master作为master-1机器,对应下面cluster-info中的CP0,另两台master备机分别作为master-2 master-3。否则可能部署失败,使集群状态难以恢复。

示例升级的过程可以在该链接查看。

随后升级完成

后续处理

刚刚升级完成后,三台master机器上都被加上了node-role.kubernetes.io/master:NoSchedule这个瑕疵,即使之前已经删除掉,升级后也会被重新加上。如果需要某个节点既做master又做worker,还需要重新执行下面的命令去掉这个瑕疵


Lentil Sun
Channelsoft Software Engineer
Mail: lentil1016@gmail.com
Site: https://lentil1016.cn
Github: https://github.com/Lentil1016

文章已创建 13

一个回复在 “将Kubeadm单Master集群平滑升级至HA Master集群

一一进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部