본 기사는 AWS 지원 자동화 워크플로우 (Support Automation Workflow)의 "AWSSupport-CollectEKSInstanceLogs" 런북을 사용하여 Amazon EKS 클러스터의 EC2 워커 노드로부터 운영체제 및 Amazon EKS 관련 로그 파일을 자동으로 수집하여 문제를 보다 쉽게 해결하는 방법에 대하여 설명합니다.
Amazon Elastic Kubernetes Service (EKS) 서비스는 Amazon Web Services (AWS) 환경에 Kubernetes 컨트롤 플레인을 설치, 운영 및 유지 관리할 필요가 없는 관리형 서비스입니다.
그러나 EKS 클러스터를 사용하는 중에 종종 다양한 이유로 Amazon Elastic Compute Cloud (EC2) 워커 노드 (인스턴스)에서 발생하는 상황을 확인하기 위해 kubelet, containerd, ipamd 및 커널, 운영체제 단의 정보나 로그 파일들을 수집해야 하는 상황이 종종 발생합니다.
이러한 경우 AWS Premium Support에서 서포트 케이스를 생성하여 문제 해결에 지원을 받거나, AWS 지원 자동화 워크플로우 (Support Automation Workflow) 런북을 활용하여 AWS Premium Support의 지원을 기다리지 않고 직접 빠르게 이슈를 진단하고 해결할 수도 있습니다.
AWS 지원 자동화 워크플로우는 AWS Systems Manager 셀프 서비스 자동화 런북 모음입니다. 이러한 런북은 AWS Support Engineering 팀에서 고객 문제를 해결하며 배운 모범 사례를 바탕으로 작성되었습니다.
이를 통해 AWS 고객은 AWS 리소스의 일반적인 문제를 진단, 수정, 해결할 수 있습니다. 또한 네트워크 문제를 사전에 식별하고 로그 수집 및 분석의 다양한 작업을 수행할 수 있습니다.
AWS 지원 자동화 워크플로우 런북은 AWS 모범 사례에 따라 수동 작업 및 관리 오버헤드, 인적 오류를 줄일 수 있습니다.
AWS 지원 자동화 워크플로우에서 제공되는 "AWSSupport-CollectEKSInstanceLogs" 런북을 이용하면 Amazon EKS 클러스터의 EC2 워커 노드에 발생한 문제를 직접 빠르게 진단하고 해결할 수 있습니다.
단, 본 런북의 자동화 도구를 성공적으로 실행하려면 EC2 인스턴스에 연결된 루트 Amazon Elastic Block Store (Amazon EBS) 볼륨에 사용 가능한 디스크 공간의 10% 이상이 필요합니다. 루트 볼륨에 사용 가능한 디스크 공간이 충분하지 않으면 자동화가 중지됩니다.
"AWSSupport-CollectEKSInstanceLogs" 런북은 사용자를 대신하여 EC2 워커 노드 (EC2 인스턴스)에 대하여 아래와 같은 작업을 수행합합니다.
- assertInstanceIsManagedLinux: 대상 EKS 워커 노드가 관리형 EC2 인스턴스인지 확인합니다.
- runLogCollectionScript: 대상 워커 노드에 대하여 아래와 같은 자원 정보를 수집합니다.
- 운영 체제 및 커널 단의 로그를 수집합니다.
- 마운트 포인트 (Mount points), 볼륨 정보 (Volume information), SELinux, iptables 정보를 수집합니다.
- 인스턴스 내에 설치된 패키지 정보, 활성 상태의 시스템 서비스 정보를 수집합니다.
- Containerd, Docker, sandbox-image 데몬 및 kubelet 에이전트의 정보 및 로그를 수집합니다.
- L-IPAMD 관련 정보, Multus 로그 및 sysctls 정보를 수집합니다.
- 네트워킹 및 CNI (Container Network Interface)의 정보를 수집합니다.
- CPU 및 IO와 관련하여 Throttled 된 프로세스 정보를 수집합니다.
- branchIfS3BucketProvided: 앞의 단계에서 수집된 정보를 저장할 수 있는 S3 버킷의 유효성을 확인합니다.
- runUploadScript: 앞의 단계에서 수집된 정보 및 로그 파일들을 정의된 S3 버킷에 업로드합니다.
본 기사에서는 "AWSSupport-CollectEKSInstanceLogs" 런북을 이용하여 Amazon EKS 클러스터에 연결된 EC2 워커 노드에 대하여 로그 및 정보를 수집하고 이를 확인하여 기술적 문제를 진단하고 해결하는 예시를 제공합니다.
EC2 워커 노드에 발생한 문제 원인 분석 및 해결을 위해 런북을 사용한 예시
그림 1: EKS 클러스터의 워커 노드 (EC2 인스턴스)가 'NotReady'로 전환되는 현상 발생
예를 들어, 위와 같이 EC2 워커 노드의 상태가 'Ready'에서 'NotReady' 상태로 전환되며 클러스터에 Join하지 못하는 경우 그 원인을 진단하고 해결할 방법을 찾기 위해 본 런북에서 제공하는 자동화 (Automation) 도구를 콘솔에서 실행하여 자동으로 로그를 수집하여 확인할 수 수 있습니다.
런북 자동화 도구 실행 절차:
- AWS Systems Manager 콘솔로 이동하여 왼편의 네비게이션 메뉴에서 '자동화 (Automation)' 메뉴를 선택합니다.
그림 2: AWS systems Manager 콘솔의 왼편에서 '자동화 (Automation)' 메뉴를 선택
- '자동화 (Automation)' 화면에서 '자동화 실행 (Execute automation)' 버튼을 선택합니다.
그림 3: '자동화 실행 (Execute automation)' 버튼를 선택하여 자동화 런북 찾기
- 중앙의 자동화 런북에서 "AWSSupport-CollectEKSInstanceLogs"을 검색하고 선택한 뒤 하단에서 다음(Next)를 클릭합니다.
그림 4: AWSSupport-CollectEKSInstanceLogs 런북 검색
그림 5: AWSSupport-CollectEKSInstanceLogs 런북 탐색 결과
그림 6: AWSSupport-CollectEKSInstanceLogs 런북 선택 - '다음 (Next)' 버튼 클릭
- 단순 실행 (Simple execution) 모드로 런북을 실행하며 입력 파라미터 섹션에서 진단 대상 EC2 워커 노드 선택하고 EKS 클러스터의 이름 (ClusterName)을 입력한 후 하단의 '실행 (Execute)' 버튼을 클릭합니다.
그림 7: 단순 실행 (Simple execution) 모드로 런북 실행
그림 8: 로그 수집을 희망하는 EC2 워커 노드 선택, (희망 시) 로그를 저장할 S3 버킷 이름 입력
- 런북 자동화 도구가 실행을 마치면 EC2 워커 노드의 로그 수집 결과를 확인합니다.
그림 9: 런북 자동화 도구 실행 시작
그림 10: 런북 실행 완료 후 마지막 단계 'TroubleshootWorkerNode'의 실행 결과를 확인
그림 11: 워커 노드 내 로그 수집이 성공적으로 수행되었음을 확인
그림 12: S3 버킷에 업로드된 로그 파일 확인
그림 13: 수집된 로그들의 목록 중에서 kubelet 에이전트에서 특이 사항 발견 01
그림 14: 수집된 로그들의 목록 중에서 kubelet 에이전트에서 특이 사항 발견 02
- 런북을 통해 확인한 문제의 원인을 해결하여 EC2 워커 노드가 클러스터에 다시 연결되는 것을 확인합니다.
그림 15: 문제가 발생한 EC2 인스턴스 (워커 노드)에 접속
그림 16: kubelet 데몬 상태 확인 - kubelet이 정지되었음을 확인
그림 17: kubelet 시작 후 다시 상태 확인 - kubelet이 다시 시작된 것을 확인
그림 18: kubelet 재시작 이후 EKS 클러스터에 워커 노드가 정상적으로 연결됨을 확인
만약, 위와 같이 AWS 지원 자동화 워크플로우 (Support Automation Workflow) 런북을 진행하였음에도 불구 이슈가 해결되지 않거나 이슈 해결에 보다 전문적인 도움이 필요한 경우 EKS 클러스터 및 EC2 워커 노드의 정보와 더불어 위와 같이 실행한 런북 실행 ID 및 실행 결과, 수집된 로그 등의 정보를 함께 공유해주시며 AWS Premium Support의 도움을 요청해 주시길 바랍니다.