如何在 EKS Anywhere 中解决 etcdadm 控制器问题?
我想查看 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 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前