我想查看 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 网站)