一、問題描述
下面節點信息都是都是為了寫博客虛構的,跟真實節點信息大體相同
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/
成功解決了我的問題,謝謝大佬