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/
成功解決了我的問題,謝謝大佬


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM