etcd節點檢查失敗,處理方法
一、問題描述
下面節點資訊都是都是為了寫部落格虛構的,跟真實節點資訊大體相同
Kubernetes 叢集中總共有三臺 Master,分別是:
- k8s-master-2-11
- k8s-master-2-12
- k8s-master-2-13
對其中 k8s-master-2-11
Master 節點伺服器進行了核心和軟體升級操作,從而先將其暫時剔出叢集,然後進行升級,完成後準備重新加入到 Kubernetes 叢集,通過 Kubeadm 執行,輸入下面命令:
$ kubeadm join mydlq.club:16443 \ --token 6w0nwi.zag57qgfcdhi76vd \ --discovery-token-ca-cert-hash sha256:efa49231e4ffd836ff996921741c98ac4c5655dc729d7c32aa48c608232f0f08 \ --control-plane --certificate-key a64e9da7346153bd64dba1e5126a644a97fdb63c878bb73de07911d1add8e26b
在執行過程中,輸出下面日誌,提示 etcd 監控檢查失敗:
...... [control-plane] Creating static Pod manifest for "kube-controller-manager" W0329 00:01:51.364121 19209 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC" [control-plane] Creating static Pod manifest for "kube-scheduler" W0329 00:01:51.373807 19209 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC" [check-etcd] Checking that the etcd cluster is healthy error execution phase check-etcd: etcd cluster is not healthy: failed to dial endpoint https://10.8.18.105:2379 with maintenance client: context deadline exceeded To see the stack trace of this error execute with --v=5 or higher
根據關鍵資訊 "error execution phase check-etcd"
可知,可能是在執行加入 etcd
時候出現的錯誤,導致 master
無法加入原先的 kubernetes
叢集。
二、分析問題
通過 kubectl 和 kubeadm 資訊分析問題。
1、檢視叢集節點列表
首先通過 Kuberctl 工具檢查一下現有的節點資訊:
$ kubectl get node NAME STATUS ROLES VERSION k8s-master-2-12 Ready master v1.17.4 k8s-master-2-13 Ready master v1.17.4 k8s-node-2-14 Ready <none> v1.17.4 k8s-node-2-15 Ready <none> v1.17.4 k8s-node-2-16 Ready <none> v1.17.4
可以看到,k8s-master-2-11 節點確實不在節點列表中
2、檢視 Kubeadm 配置資訊
在看看 Kubernetes 叢集中的 kubeadm 配置資訊:
$ kubectl describe configmaps kubeadm-config -n kube-system
獲取到的內容如下:
Name: kubeadm-config
Namespace: kube-system
Labels: <none>
Annotations: <none>
...
ClusterStatus:
----
apiEndpoints:
k8s-master-2-11:
advertiseAddress: 192.168.2.11
bindPort: 6443
k8s-master-2-12:
advertiseAddress: 192.168.2.12
bindPort: 6443
k8s-master-2-13:
advertiseAddress: 192.168.2.13
bindPort: 6443
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterStatus
可也看到 k8s-master-2-11
節點資訊還存在與 kubeadm
配置中,說明 etcd
中還儲存著 k8s-master-2-11
相關資訊。
3、分析問題所在及解決方案
因為叢集是通過 kubeadm
工具搭建的,且使用了 etcd
映象方式與 master
節點一起,所以每個 Master
節點上都會存在一個 etcd
容器例項。當剔除一個 master
節點時 etcd
叢集未刪除剔除的節點的 etcd
成員資訊,該資訊還存在 etcd
叢集列表中。
所以,我們需要 進入 etcd 手動刪除 etcd 成員資訊。
三、解決問題
1、獲取 Etcd 映象列表
首先獲取叢集中的 etcd pod 列表
$ kubectl get pods -n kube-system | grep etcd
etcd-k8s-master-2-12 1/1 Running 0
etcd-k8s-master-2-13 1/1 Running 0
2、進入 Etcd 容器並刪除節點資訊
選擇上面兩個 etcd 中任意一個 pod,通過 kubectl 工具進入 pod 內部:
$ kubectl exec -it etcd-k8s-master-2-12 sh -n kube-system
進入容器後,按下面步執行
## 配置環境
$ 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
3、通過 kubeadm 命令再次嘗試加入叢集
通過 kubeadm
命令再次嘗試將 k8s-master-2-11
節點加入叢集,在執行前首先進入到 k8s-master-2-11
節點伺服器,執行 kubeadm
的清除命令:
$ kubeadm reset
然後嘗試加入 kubernetes 叢集:
$ kubeadm join mydlq.club:16443 \
--token 6w0nwi.zag57qgfcdhi76vd \
--discovery-token-ca-cert-hash sha256:efa49231e4ffd836ff996921741c98ac4c5655dc729d7c32aa48c608232f0f08 \
--control-plane --certificate-key a64e9da7346153bd64dba1e5126a644a97fdb63c878bb73de07911d1add8e26b
轉載http://www.mydlq.club/article/73/
成功解決了我的問題,謝謝大佬