背景:
一台master磁盤爆了導致k8s服務故障,重啟之后死活kubelet起不來,於是老哥就想把它給reset掉重新join,接着出現如下報錯提示是說etcd集群健康檢查未通過:
error execution phase check-etcd: error syncing endpoints with etc: dial tcp 172.31.182.152:2379: connect: connection refused
解決方法:
1.在kubeadm-config刪除的狀態不存在的etcd節點:
kubectl edit configmaps -n kube-system kubeadm-config
cn-hongkong.i-j6caps6av1mtyxyofmrw:
advertiseAddress: 172.31.182.152
bindPort: 6443
把上邊的刪掉:
2.因為我是用kubeadm搭建的集群,所有etcd在每個master節點都會以pod的形式存在一個,etcd是在每個控制平面都啟動一個實例的,當刪除k8s-001節點時,etcd集群未自動刪除此節點上的etcd成員,因此需要手動刪除。
注意這里首先要進入etcd的pod。
kubectl exec -it etcd-cn-hongkong.i-j6caps6av1mtyxyofmrx sh -n kube-system
export ETCDCTL_API=3 alias etcdctl='etcdctl --endpoints=https://172.31.182.153:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key' / # etcdctl member list ceb6b1f4369e9ecc, started, cn-hongkong.i-j6caps6av1mtyxyofmrx, https://172.31.182.154:2380, https://172.31.182.154:2379 d4322ce19cc3f8da, started, cn-hongkong.i-j6caps6av1mtyxyofmrw, https://172.31.182.152:2380, https://172.31.182.152:2379 d598f7eabefcc101, started, cn-hongkong.i-j6caps6av1mtyxyofmry, https://172.31.182.153:2380, https://172.31.182.153:2379 #刪除不存在的節點 / # etcdctl member remove d4322ce19cc3f8da Member d4322ce19cc3f8da removed from cluster ed812b9f85d5bcd7 / # etcdctl member list ceb6b1f4369e9ecc, started, cn-hongkong.i-j6caps6av1mtyxyofmrx, https://172.31.182.154:2380, https://172.31.182.154:2379 d598f7eabefcc101, started, cn-hongkong.i-j6caps6av1mtyxyofmry, https://172.31.182.153:2380, https://172.31.182.153:2379 / # etcdctl member list cd4e1e075b1904b2, started, cn-hongkong.i-j6caps6av1mtyxyofmrw, https://172.31.182.152:2380, https://172.31.182.152:2379 ceb6b1f4369e9ecc, started, cn-hongkong.i-j6caps6av1mtyxyofmrx, https://172.31.182.154:2380, https://172.31.182.154:2379 d598f7eabefcc101, started, cn-hongkong.i-j6caps6av1mtyxyofmry, https://172.31.182.153:2380, https://172.31.182.153:2379 / # exit
最后每次kubeadm join失敗后要kubeadm reset重置節點,在kubeadm join才會成功。