TOC
1. 升级
将需要的升级到指定版本的k8s镜像传送到相应节点上,然后在任何一个master节点运行下面的命令即可完成升级。
$ yum install -y kubeadm=1.18.3 kubectl=1.18.3 kubelet=1.18.3
$ kubeadm config images list # 列出新版本需要的镜像,然后拉取。
$ kubeadm upgrade apply v1.18.3
2. 扩容
在当前的集群中新增节点:
2.1. 重新创建certificate key和token
$ sudo kubeadm init phase upload-certs --upload-certs
### Got:
# [upload-certs] Using certificate key:
# 2ffe5bbf7d2e670d5bcfb03dac194e2f21eb9715f2099c5f8574e4ba7679ff78
# Add certificate-key for Multi Master Node.
$ kubeadm token create --print-join-command --certificate-key 2ffe5bbf7d2e670d5bcfb03dac194e2f21eb9715f2099c5f8574e4ba7679ff78
2.2. 增加Worker节点:
$ kubeadm join 192.168.199.173:6443 --token rlxvkn.2ine1loolri50tzt
--discovery-token-ca-cert-hash sha256:86e68de8febb844ab8f015f6af4526d78a980d9cdcf7863eebb05b17c24b9383
2.3. 增加master节点:
$ kubeadm join 192.168.199.173:6443 --token rlxvkn.2ine1loolri50tzt
--discovery-token-ca-cert-hash sha256:86e68de8febb844ab8f015f6af4526d78a980d9cdcf7863eebb05b17c24b9383
--control-plane --certificate-key 440a880086e7e9cbbcebbd7924e6a9562d77ee8de7e0ec63511436f2467f7dde
3. 节点重新加入
如果因为维护等操作,将节点踢出了k8s集群的话,再重新加入执行上面扩容步骤即可。但是如果你维护的节点是etcd节点的话。那么在重新加入前必须做以下操作,不然执行kubeadm join xxx
会卡在[check-etcd] Checking that the etcd cluster is healthy
下面开始:
# 查看是etcd 节点的master信息
$ kubectl describe configmaps kubeadm-config -n kube-system
可也看到 剔除出去的 节点信息还存在与 kubeadm
配置中,说明 etcd
中还存储着该节点相关信息。
# 进入任意一个etcd pod,通过 kubectl 工具进入 pod 内部
$ kubectl get pods -n kube-system | grep etcd
$ kubectl exec -it etcd-k8s-master-2 -n kube-system -- sh
进入容器后,按下面步执行
#
$ export ETCDCTL_API=3
$ alias etcdctl='etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key'
## 查看 etcd 集群成员列表
$ etcdctl member list
63bfe05c4646fb08, started, k8s-master-2-11, https://192.168.2.11:2380, https://192.168.2.11:2379, false
8e41efd8164c6e3d, started, k8s-master-2-12, https://192.168.2.12:2380, https://192.168.2.12:2379, false
a61d0bd53c1cbcb6, started, k8s-master-2-13, https://192.168.2.13:2380, https://192.168.2.13:2379, false
## 删除 etcd 集群成员 k8s-master-2-11
$ etcdctl member remove 63bfe05c4646fb08
Member 63bfe05c4646fb08 removed from cluster ed984b9o8w35cap2
## 再次查看 etcd 集群成员列表
$ etcdctl member list
8e41efd8164c6e3d, started, k8s-master-2-12, https://192.168.2.12:2380, https://192.168.2.12:2379, false
a61d0bd53c1cbcb6, started, k8s-master-2-13, https://192.168.2.13:2380, https://192.168.2.13:2379, false
## 退出容器
$ exit
然后尝试加入 kubernetes 集群:
如果你之前kubeadm init操作失败了,记得执行
kubeadm reset
。
$ kubeadm join 192.168.199.173:6443 --token rlxvkn.2ine1loolri50tzt
--discovery-token-ca-cert-hash sha256:86e68de8febb844ab8f015f6af4526d78a980d9cdcf7863eebb05b17c24b9383
--control-plane --certificate-key 440a880086e7e9cbbcebbd7924e6a9562d77ee8de7e0ec63511436f2467f7dde
4. 分析问题所在及解决方案
因为集群是通过 kubeadm
工具搭建的,且使用了 etcd
镜像方式与 master
节点一起,所以每个 Master
节点上都会存在一个 etcd
容器实例。当剔除一个 master
节点时 etcd
集群未删除剔除的节点的 etcd
成员信息,该信息还存在 etcd
集群列表中。
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付

comments powered by Disqus