EKS Anywhere에서 etcdadm 컨트롤러 문제를 해결하려면 어떻게 해야 하나요?

3분 분량
0

etcdadm 포드의 로그에서 ETCD 부트스트랩 오류 문제를 해결하기 위한 단서를 찾으려고 합니다.

간략한 설명

Amazon Elastic Kubernetes Service(Amazon EKS) Anywhere 노드에서 부트스트랩 장애가 발생하는 경우 etcdadm 포드에 대한 로그를 확인하십시오. 또한 스택된 etcd 클러스터용으로 생성한 etcd 포드의 로그를 확인하십시오.

추가로 디버깅하려면 etcd 가상 머신 중 하나에 로그인합니다. 부트스트랩 오류가 발생하기 전에 etcd VM을 생성하지 않은 경우 VM을 사용하여 디버깅할 수 없습니다.

해결 방법

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 파일 위치로 바꿉니다.

VM 로그 확인

kubectl 클라이언트를 사용하여 로그를 확인한 후 VM의 로그도 확인할 수 있습니다.

1.    VM의 컨트롤 플레인에 로그인합니다.

ssh -i $PRIV_KEY ec2-user@$CONTROL_PLANE_VM_IP

참고: PRIV_KEY를 프라이빗 키로 바꿉니다. CONTROL_PLANE_VM_IP를 컨트롤 플레인 VM의 IP 주소로 바꿉니다.

2.    BottleRocket 운영 체제(OS)의 경우: BottleRocket OS에서 실행되는 노드의 루트 쉘을 가져오려면 sudo sheltie 명령을 실행합니다.

3.    etcd VM에 로그인한 후 다음 위치에서 추가 관련 컨테이너 로그를 확인할 수 있습니다.

cd /var/log/containers

로그에서 스택되지 않은 etcd 또는 외부 etcd가 있는지 확인

스택되지 않은 etcd나 외부 etcd의 경우 생성한 모든 etcd VM에 로그인합니다.

1.    etcd VM에 로그인하려면 다음 명령을 실행합니다.

ssh -i $PRIV_KEY ec2-user@$ETCD_VM_IP

참고: PRIV_KEY를 프라이빗 키로 바꿉니다. ETCD_VM_IP를 VM의 IP 주소로 바꿉니다.

2.    BottleRocket 운영 체제(OS)의 경우: BottleRocket OS에서 실행되는 노드의 루트 쉘을 가져오려면 sudo sheltie 명령을 실행합니다.

3.    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="잘못된 노드 할당 가능 구성. 리소스 \"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 공식업데이트됨 일 년 전