如何對 EKS Anywhere 中的 etcdadm 控制器問題進行疑難排解?

2 分的閱讀內容
0

我想檢查 etcdadm Pod 中的日誌,以取得對 ETCD 引導失敗問題進行疑難排解的線索。

簡短說明

如果您的 Amazon Elastic Kubernetes Service (Amazon EKS) Anywhere 節點發生引導失敗,請檢查 etcdadm Pod 的日誌。此外,請檢查您為堆疊 etcd 叢集建立的 etcd Pod 的日誌。

若要進一步偵錯,請登入任何 etcd 虛擬機器 (VM)。如果您沒有在引導失敗前建立 etcd VM,則無法使用該 VM 進行偵錯。

解決方法

檢查 etcdadm Pod 中的日誌

**注意:**在下列命令中,使用您的引導提供者的尾碼取代 SUFFIX (尾碼)。使用您的 kubeconfig 檔案位置取代 KUBECONFIG_FILE

建立您的叢集之後,您可以將其用於本機目錄中產生的 KUBECONFIG 檔案

KUBECONFIG=${PWD}/${CLUSTER_NAME}/${CLUSTER_NAME}-eks-a-cluster.kubeconfig

若要檢查 etcdadm-bootstrap-provider-controller 日誌,請執行下列命令:

kubectl -n etcdadm-bootstrap-provider-system logs etcdadm-bootstrap-provider-controller-SUFFIX  
    --kubeconfig=KUBECONFIG_FILE

若要檢查 etcdadm-controller-controller-manager 日誌,請執行下列命令:

kubectl -n etcdadm-controller-system logs etcdadm-controller-controller-manager-SUFFIX --kubeconfig=KUBECONFIG_FILE

檢查堆疊 etcd 的日誌

如果您已為堆疊 etcd 叢集建立 Pod,請執行下列命令來檢查這些 Pod 的日誌:

kubectl logs -n kube-system etcd-$CONTROL_PLANE_VM_IP --kubeconfig=KUBECONFIG_FILE

**注意:**使用您的 kubeconfig 檔案位置取代 KUBECONFIG_FILE

檢查 VM 日誌

使用 kubectl 用戶端檢查日誌後,您還可以檢查 VM 上的日誌:

  1. 登入 VM 的控制平面:
ssh -i $PRIV_KEY ec2-user@$CONTROL_PLANE_VM_IP

**注意:**以您的私密金鑰取代 PRIV_KEY。使用您的控制平面 VM 的 IP 地址取代 CONTROL_PLANE_VM_IP

  1. 對於 BottleRocket 作業系統 (OS): 若要取得在 BottleRocket OS 上執行的節點的根 Shell,請執行 sudo sheltie 命令。

  2. 登入 etcd VM 後,您可以在下列位置檢查其他相關容器日誌:

cd /var/log/containers

檢查未堆疊或外部 etcd 的日誌

對於未堆疊或外部 etcd,請登入您建立的任何 etcd VM。

  1. 若要登入您的 etcd VM,請執行下列命令:
ssh -i $PRIV_KEY ec2-user@$ETCD_VM_IP

**注意:**以您的私密金鑰取代 PRIV_KEY。使用您的 VM 的 IP 地址取代 ETCD_VM_IP

  1. 對於 BottleRocket 作業系統 (OS): 若要取得在 BottleRocket OS 上執行的節點的根 Shell,請執行 sudo sheltie 命令。

  2. 登入 etcd VM 後,您可以在下列位置檢查其他相關容器日誌:

cd /var/log/containers  
bash-5.1# ls -lrt  
total 4  
lrwxrwxrwx. 1 root root 90 Apr 11 16:38 etcd-mgmt-etcd-4mt4g_kube-system_etcd-aa91be45434b920903e0630254cb5f319b86b50c56b87d8f992b0285272b93c4.log -> /var/log/pods/kube-system_etcd-mgmt-etcd-4mt4g_88b6dbc1be367b4ffc5a6bfab65e7376/etcd/0.log

執行運作狀態檢查

ETCD_CONTAINER_ID=$(ctr -n k8s.io c ls | grep -w "etcd-io" | cut -d " " -f1)  
ctr -n k8s.io t exec -t --exec-id etcd ${ETCD_CONTAINER_ID} etcdctl \  
     --cacert=/var/lib/etcd/pki/ca.crt \  
     --cert=/var/lib/etcd/pki/server.crt \  
     --key=/var/lib/etcd/pki/server.key \  
     endpoint health  

127.0.0.1:2379 is healthy: successfully committed proposal: took = 10.241212ms

錯誤訊息範例

當您檢查日誌時,您可能會看到與引導失敗相關的各種錯誤訊息。下列範例是一些最常見的錯誤:

「等待外部 ETCD 準備就緒。」

若要對此錯誤進行疑難排解,請參閱對 Amazon EKS Anywhere 文件進行疑難排解

ETCD VM 的 Kubelet 當機。」

建立 ETCD VM 後,叢集佈建未繼續。下列 kubelet 錯誤訊息也會遇到此問題:

「無法啟動 ContainerManager" err="invalid 節點可分配組態。資源 \"ephemeral-storage\" 的可分配量為 {{1175812097 0} {<nil>} BinarySI},容量為 {{-155109377 0} {<nil>} BinarySI}」

這表示節點上的暫時性儲存沒有足夠的可用空間。在每個 Kubernetes 節點中,kubelet 的根目錄 (預設為 /var/lib/kubelet) 和日誌目錄 (/var/log) 都位於節點的根分割區。

若要顯示特定檔案系統的可用磁碟空間,請執行下列命令:

"df -h"

若要顯示所有檔案及各自大小的清單,請執行下列命令:

"sudo du -d 3 /var/lib/"

如果您沒有足夠的可用磁碟空間,請清理節點以釋放空間。或者,擴充節點的根分割區的儲存容量。

相關資訊

安裝 etcd (etcd 網站)

如何檢查叢集狀態 (etcd 網站)

AWS 官方
AWS 官方已更新 1 年前