背景
1 臺 master 加入集群后發(fā)現(xiàn)忘了修改主機(jī)名,而在 k8s 集群中修改節(jié)點(diǎn)主機(jī)名非常麻煩废酷,將 master 退出集群改名并重新加入集群(前提是用的是高可用集群)。
操作步驟
ssh 登錄另外一臺 master 節(jié)點(diǎn)將要改名的 master 節(jié)點(diǎn)移出集群抹缕。
kubectl drain master1
kubectl delete master1
登錄已退出集群的 master 服務(wù)器重置 kubelet 配置并重新加入集群澈蟆。
kubeadm reset
kubeadm join k8s-api:6443 --token ****** \
--discovery-token-ca-cert-hash ****** \
--control-plane --certificate-key ****** \
--v=5
加入失敗,錯誤信息如下:
I0109 21:26:48.440711 3893 etcd.go:107] etcd endpoints read from pods: https://10.0.1.81:2379,https://10.0.1.32:2379,https://10.0.1.33:2379
I0109 21:26:48.455921 3893 etcd.go:166] etcd endpoints read from etcd: https://10.0.1.81:2379,https://10.0.1.32:2379,https://10.0.1.33:2379
I0109 21:26:48.455975 3893 etcd.go:125] update etcd endpoints: https://10.0.1.81:2379,https://10.0.1.32:2379,https://10.0.1.33:2379
I0109 21:27:08.469938 3893 etcd.go:388] Failed to get etcd status for https://10.0.1.81:2379: failed to dial endpoint https://10.0.1.81:2379 with maintenance client: context deadline exceeded
failed to dial endpoint https://10.0.1.81:2379 with maintenance client: context deadline exceeded
etcd cluster is not healthy
分析問題
從錯誤信息看 etcd 集群不知道 10.0.1.81 已經(jīng)退出 k8s 集群卓研,etcd 集群中還保存著 10.0.1.81 的信息趴俘,所以在加入時連接 10.0.1.81 失敗。
分析到原因后奏赘,登錄其中一臺正常的 master 寥闪,進(jìn)入 etcd 容器:
docker exec -it $(docker ps -f name=etcd_etcd -q) /bin/sh
查看 etcd 集群的成員列表,果然其中還有那臺已經(jīng)退出集群的服務(wù)器
$ etcdctl --endpoints 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 member list
12637f5ec2bd02b8, started, blog-k8s-n0, https://10.0.1.81:2380, https://10.0.1.81:2379, false
17d58f8d29164d23, started, k8s-master1, https://10.0.1.32:2380, https://10.0.1.32:2379, false
19441808830db070, started, k8s-master2, https://10.0.1.33:2380, https://10.0.1.33:2379, false
解決問題
知道了原因磨淌,接下來的時候就簡單了疲憋,登錄etcd集群刪除臟數(shù)據(jù)即可。
在容器中將這臺服務(wù)器從 etcd 集群中移除
etcdctl --endpoints 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 member remove 12637f5ec2bd02b8
移除之后之前退出集群的服務(wù)器就能成功加入集群梁只。