如何在 EKS Anywhere 中解决 etcdadm 控制器问题?

2 分钟阅读
0

我想查看 etcdadm 容器组中的日志,从中寻找解决 ETCD 引导失败问题的线索。

简短描述

如果您的 Amazon Elastic Kubernetes Service (Amazon EKS) Anywhere 节点遇到引导失败问题,请查看 etcdadm 容器组的日志。另外,请查看您为堆叠 etcd 集群创建的 etcd 容器组的日志。

要进一步调试,请登录任何 etcd 虚拟机(VM)。如果您在引导失败之前没有创建 etcd 虚拟机,则无法使用该虚拟机进行调试。

解决方法

查看 etcdadm 容器组中的日志

**注意:**在以下命令中,将 SUFFIX 替换为您的引导提供者的后缀。将 KUBECONFIG_FILE 替换为您的 kubeconfig 文件位置。

创建集群后,您可以将其与本地目录中生成的 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 集群创建了容器组,请运行以下命令查看这些容器组的日志:

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

**注意:**请将 KUBECONFIG_FILE 替换为您的 kubeconfig 文件位置。

查看虚拟机日志

使用 kubectl 客户端查看日志后,您还可以查看虚拟机上的日志:

1.    登录虚拟机的控制面板:

ssh -i $PRIV_KEY ec2-user@$CONTROL_PLANE_VM_IP

**注意:**请将 PRIV_KEY 替换为您的私钥。请将 CONTROL_PLANE_VM_IP 替换为控制面板虚拟机的 IP 地址。

2.    对于 BottleRocket 操作系统 (OS): 要获取在 BottleRocket 操作系统上运行的节点的根 Shell,请运行 sudo sheltie 命令。

3.    登录 etcd 虚拟机后,可以在以下位置查看其他相关的容器日志:

cd /var/log/containers

查看日志中是否有未堆叠的 etcd 或外部 etcd

对于未堆叠的 etcd 或外部 etcd,请登录到您创建的任何 etcd 虚拟机。

1.    要登录您的 etcd 虚拟机,请运行以下命令:

ssh -i $PRIV_KEY ec2-user@$ETCD_VM_IP

**注意:**请将 PRIV_KEY 替换为您的私钥。请将 ETCD_VM_IP 替换为您的虚拟机的 IP 地址。

2.    对于 BottleRocket 操作系统 (OS): 要获取在 BottleRocket 操作系统上运行的节点的根 Shell,请运行 sudo sheltie 命令。

3.    登录 etcd 虚拟机后,可以在以下位置查看其他相关的容器日志:

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

错误消息示例

查看日志时,可能会看到与引导失败相关的各种错误消息。以下示例是一些最常见的错误:

“Waiting for External ETCD to be ready.”(等待外部 ETCD 准备就绪。)

要排除此错误,请参阅 Amazon EKS Anywhere 的故障排除文档

Kubelet of ETCD VMs Crashing.”(ETCD 虚拟机的 Kubelet 崩溃了。)

创建 ETCD 虚拟机后,集群预置不会继续。以下 kubelet 错误消息也会出现此问题:

“Failed to start ContainerManager" err="invalid Node Allocatable configuration.Resource \"ephemeral-storage\" has an allocatable of {{1175812097 0} {<nil>} BinarySI}, capacity of {{-155109377 0} {<nil>“无法启动 ContainerManager”错误=“节点可分配配置无效。资源‘ephemeral-storage’具有可分配资源 {{1175812097 0} {} BinarySI},容量为 {{-155109377 0} {} BinarySI}”)

这表明节点上的临时存储空间没有足够的可用空间。在每个 Kubernetes 节点中,kubelet 的根目录(默认为 /var/lib/kubelet)和日志目录(/var/log)位于节点的根分区上。

要显示特定文件系统的可用磁盘空间,请运行以下命令:

"df -h"

要显示所有文件及其相应大小的列表,请运行以下命令:

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

如果您没有足够的可用磁盘空间,请清理节点以释放空间。或者,扩展节点根分区的存储容量。

相关信息

安装 etcd(etcd 网站)

如何检查集群状态(etcd 网站)

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