EKS 노드 모니터링 에이전트로 노드 상태 문제 감지
EKS 노드 모니터링 에이전트로 노드 상태 문제 감지
EKS 노드 모니터링 에이전트가 감지하는 노드 상태 문제, 노드 조건·이벤트로 표시되는 방식, 에이전트 구성 방법을 설명합니다.
출처: 문서
본문
이 주제는 EKS 노드 모니터링 에이전트가 감지하는 노드 상태 문제, 이러한 문제가 노드 조건(node conditions) 또는 이벤트로 표시되는 방식, 노드 모니터링 에이전트를 구성하는 방법을 자세히 설명합니다.
EKS 노드 모니터링 에이전트는 EKS 자동 노드 복구와 함께 또는 없이 사용할 수 있습니다. EKS 자동 노드 복구에 대한 자세한 내용은 EKS 클러스터에서 노드 자동 복구를 참조하세요.
EKS 노드 모니터링 에이전트의 소스 코드는 GitHub의 aws/eks-node-monitoring-agent 저장소에 게시되어 있습니다.
노드 상태 문제
다음 표는 노드 모니터링 에이전트가 감지할 수 있는 노드 상태 문제를 설명합니다. 두 가지 유형의 문제가 있습니다.
- 조건(Condition) — 인스턴스 교체나 재부팅 같은 시정 조치를 정당화하는 종결적(terminal) 문제입니다. 자동 복구가 활성화되면 Amazon EKS가 노드 교체 또는 재부팅의 복구 작업을 수행합니다. 자세한 내용은 노드 조건을 참조하세요.
- 이벤트(Event) — 일시적 문제 또는 최적이 아닌 노드 구성입니다. 자동 복구 작업이 수행되지 않습니다. 자세한 내용은 노드 이벤트를 참조하세요.
AcceleratedHardware 노드 상태 문제
다음 표에서 심각도가 "Condition"인 문제의 모니터링 조건은 AcceleratedHardwareReady입니다. 다음 표의 이벤트와 조건은 NVIDIA 및 Neuron 관련 노드 상태 문제입니다. Reboot 복구 작업은 EKS 관리형 노드 그룹에만 적용됩니다. EKS Auto Mode 또는 Karpenter를 사용할 때 유일한 복구 작업은 Replace입니다.
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
| DCGMDiagnosticFailure | Condition | DCGM 활성 진단 테스트 스위트의 테스트 케이스가 실패했습니다. | 없음 |
| DCGMError | Condition | DCGM 호스트 프로세스에 대한 연결이 끊어졌거나 설정할 수 없었습니다. | 없음 |
| DCGMFieldError[Code] | Event | DCGM이 필드 식별자를 통해 GPU 성능 저하를 감지했습니다. | 없음 |
| DCGMHealthCode[Code] | Event | DCGM 상태 검사가 치명적이지 않은 방식으로 실패했습니다. | 없음 |
| DCGMHealthCode[Code] | Condition | DCGM 상태 검사가 치명적인 방식으로 실패했습니다. | 없음 |
| NeuronDMAError | Condition | DMA 엔진이 복구할 수 없는 오류를 만났습니다. | Replace |
| NeuronHBMUncorrectableError | Condition | HBM이 복구할 수 없는 오류를 만나 잘못된 결과를 생성했습니다. | Replace |
| NeuronNCUncorrectableError | Condition | Neuron Core 복구 불가능한 메모리 오류가 감지되었습니다. | Replace |
| NeuronSRAMUncorrectableError | Condition | 온칩 SRAM이 패리티 오류를 만나 잘못된 결과를 생성했습니다. | Replace |
| NvidiaDeviceCountMismatch | Event | NVML을 통해 보이는 GPU 수가 파일 시스템의 NVIDIA 디바이스 수와 일치하지 않습니다. | 없음 |
| NvidiaDoubleBitError | Condition | GPU 드라이버가 이중 비트 오류를 생성했습니다. | Replace |
| NvidiaNCCLError | Event | NVIDIA Collective Communications 라이브러리(libnccl)에서 세그폴트가 발생했습니다. |
없음 |
| NvidiaNVLinkError | Condition | GPU 드라이버가 NVLink 오류를 보고했습니다. | Replace |
| NvidiaPCIeError | Event | 전송 오류 복구를 위해 PCIe 재생이 트리거되었습니다. | 없음 |
| NvidiaPageRetirement | Event | GPU 드라이버가 메모리 페이지를 은퇴(retirement) 처리했습니다. 이는 같은 주소에서 단일 이중 비트 오류 또는 두 개의 단일 비트 오류가 발생할 때 일어날 수 있습니다. | 없음 |
| NvidiaPowerError | Event | GPU의 전원 사용률이 허용 임계값을 위반했습니다. | 없음 |
| NvidiaThermalError | Event | GPU의 열 상태가 허용 임계값을 위반했습니다. | 없음 |
| NvidiaXID[Code]Error | Condition | 중대한 GPU 오류가 발생했습니다. | Replace 또는 Reboot |
| NvidiaXID[Code]Warning | Event | 비중대 GPU 오류가 발생했습니다. | 없음 |
NVIDIA XID 오류 코드
노드 모니터링 에이전트는 GPU 커널 로그에서 NVIDIA XID 오류를 감지합니다. XID 오류는 두 범주로 나뉩니다.
- 잘 알려진 XID 코드 — 노드 조건(
AcceleratedHardwareReady=False)을 설정하고 활성화된 경우 자동 복구를 트리거하는 중대한 오류입니다. 이유 코드 형식은NvidiaXID[Code]Error입니다. EKS 노드 모니터링 에이전트가 감지하는 잘 알려진 XID 코드는 복구 작업이 필요한 전체 NVIDIA XID 코드 목록을 나타내지 않을 수 있습니다. - 알 수 없는 XID 코드 — Kubernetes 이벤트로만 기록됩니다. 자동 복구를 트리거하지 않습니다. 이유 코드 형식은
NvidiaXID[Code]Warning입니다. 알 수 없는 XID 오류를 조사하려면dmesg | grep -i nvrm으로 커널 로그를 검토하세요.
XID 오류에 대한 자세한 내용은 NVIDIA GPU 배포 및 관리 문서의 Xid Errors를 참조하세요. 개별 XID 메시지에 대한 자세한 내용은 NVIDIA GPU 배포 및 관리 문서의 Understanding Xid Messages를 참조하세요.
다음 표는 잘 알려진 XID 코드, 의미, 활성화된 경우 기본 노드 복구 작업을 나열합니다. Reboot 복구 작업은 EKS 관리형 노드 그룹에만 적용됩니다. EKS Auto Mode 또는 Karpenter를 사용할 때 유일한 복구 작업은 Replace입니다.
| XID 코드 | 설명 | 복구 작업 |
|---|---|---|
| 46 | GPU 처리가 중지됨 — 내부 시간 초과로 GPU 처리가 중지되었으며 복구하려면 GPU 리셋이 필요합니다. | Reboot |
| 48 | 이중 비트 ECC 오류 — GPU 메모리에서 복구할 수 없는 이중 비트 오류가 발생하여 잠재적인 하드웨어 성능 저하를 나타냅니다. | Reboot |
| 54 | 보조 전원 미연결 — GPU 보드에 보조 전원이 연결되지 않았으며, 일반적으로 전원 커넥터가 제대로 장착되지 않았음을 나타냅니다. | Reboot |
| 62 | 내부 마이크로 컨트롤러 정지 — GPU의 내부 마이크로 컨트롤러가 정지하여 GPU 리셋이 필요한 펌웨어 또는 하드웨어 결함을 나타냅니다. | Reboot |
| 63 | GPU 메모리 리맵 이벤트 — GPU 드라이버가 감지된 오류로 인해 GPU 메모리의 일부를 리맵했습니다. 종종 복구 가능합니다. | Reboot |
| 64 | GPU 메모리 리맵 실패 — GPU가 결함 메모리를 리맵하지 못해 하드웨어 문제를 나타냅니다. | Replace |
| 74 | NVLink 오류 — GPU 간 고속 NVLink 상호 연결에서 오류가 발생했습니다. | Replace |
| 79 | GPU가 버스에서 이탈 — GPU가 PCIe를 통해 더 이상 접근할 수 없으며, 일반적으로 하드웨어 실패 또는 전원 문제를 나타냅니다. | Replace |
| 95 | 비격리 메모리 오류 — 다른 애플리케이션이나 시스템 메모리에 영향을 줄 수 있는 메모리 오류가 발생했습니다. | Reboot |
| 109 | 컨텍스트 스위치 시간 초과 — GPU 컨텍스트 스위치가 제시간에 완료되지 않아 GPU가 멈췄으며 리셋이 필요함을 나타냅니다. | Reboot |
| 110 | 보안 결함 오류 — GPU에서 보안 결함이 감지되어 GPU 리셋이 필요하고, 지속되면 하드웨어 조사가 필요합니다. | Reboot |
| 119 | GSP RPC 시간 초과 — GPU 시스템 프로세서와의 통신이 시간 초과되었으며, 펌웨어 문제일 수 있습니다. | Replace |
| 120 | GSP 오류 — GPU 시스템 프로세서에서 오류가 발생했습니다. | Replace |
| 136 | 링크 트레이닝 실패 — GPU가 링크 트레이닝 중 정상적인 NVLink 연결을 설정하지 못했습니다. | Reboot |
| 140 | ECC 복구 불가 오류 — ECC 오류가 격리를 벗어나 데이터가 손상되었을 수 있습니다. | Reboot |
| 142 | NVENC3 오류 — NVENC3 비디오 인코더 하드웨어가 자동 복구 없이 실패했습니다. GB200에 적용됩니다. | Replace |
| 143 | GPU 초기화 오류 — GPU가 올바르게 초기화되지 못했습니다. | Reboot |
| 151 | 키 회전 오류 — 기밀 컴퓨팅 키 회전이 실패했습니다. H100, B100, GB200에 적용됩니다. | Replace |
| 155 | NVLink 소프트웨어 정의 오류 — NVLink에 소프트웨어 정의 오류가 보고되었습니다. | Reboot |
| 156 | 자원 은퇴 이벤트 — GPU가 감지된 결함으로 인해 하드웨어 자원을 은퇴했습니다. | Reboot |
| 158 | GPU 치명적 시간 초과 — GPU에서 치명적 시간 초과가 발생했습니다. | Reboot |
GPU 상태와 관련된 현재 노드 조건을 보려면 다음 명령을 실행하세요.
kubectl get nodes -o custom-columns='NAME:.metadata.name,ACCELERATOR_READY:.status.conditions[?(@.type=="AcceleratedHardwareReady")].status,REASON:.status.conditions[?(@.type=="AcceleratedHardwareReady")].reason'
클러스터에서 XID 관련 이벤트를 보려면 다음 명령 중 하나를 실행하세요.
kubectl get events | grep -i "NvidiaXID"
ContainerRuntime 노드 상태 문제
다음 표에서 심각도가 "Condition"인 문제의 모니터링 조건은 ContainerRuntimeReady입니다.
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
| ContainerRuntimeFailed | Event | 컨테이너 런타임이 컨테이너 생성에 실패했으며, 반복 발생 시 보고된 문제와 관련될 수 있습니다. | 없음 |
| DeprecatedContainerdConfiguration | Event | 더 이상 사용되지 않는 이미지 매니페스트 버전 2, 스키마 1을 사용하는 컨테이너 이미지가 containerd를 통해 최근 노드로 풀되었습니다. |
없음 |
| KubeletFailed | Event | kubelet이 실패 상태에 진입했습니다. | 없음 |
| LivenessProbeFailures | Event | 활성 프로브(liveness probe) 실패가 감지되었으며, 반복 발생 시 애플리케이션 코드 문제 또는 부족한 시간 초과 값을 나타낼 수 있습니다. | 없음 |
| PodStuckTerminating | Condition | Pod가 과도한 시간 동안 종료 중임이 감지되었으며, CRI 오류가 Pod 상태 진행을 막아 발생할 수 있습니다. | Replace |
| ReadinessProbeFailures | Event | 준비 프로브(readiness probe) 실패가 감지되었으며, 반복 발생 시 애플리케이션 코드 문제 또는 부족한 시간 초과 값을 나타낼 수 있습니다. | 없음 |
| [Name]RepeatedRestart | Event | systemd 유닛이 자주 다시 시작되고 있습니다. | 없음 |
| ServiceFailedToStart | Event | systemd 유닛이 시작에 실패했습니다. | 없음 |
Kernel 노드 상태 문제
다음 표에서 심각도가 "Condition"인 문제의 모니터링 조건은 KernelReady입니다.
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
| AppBlocked | Event | 작업이 오랜 시간 동안 스케줄링에서 차단되었으며, 보통 입출력에 차단되어 발생합니다. | 없음 |
| AppCrash | Event | 노드의 애플리케이션이 충돌했습니다. | 없음 |
| ApproachingKernelPidMax | Event | 현재 kernel.pid_max 설정에 따라 사용 가능한 최대 PID 수에 프로세스 수가 근접하고 있으며, 이후에는 더 이상 프로세스를 시작할 수 없습니다. |
없음 |
| ApproachingMaxOpenFiles | Event | 현재 커널 설정에 따라 가능한 최대 열린 파일 수에 열린 파일 수가 근접하고 있으며, 이후에는 새 파일 열기에 실패합니다. | 없음 |
| ConntrackExceededKernel | Event | 커널에 대해 연결 추적 최대치를 초과하여 새 연결을 설정할 수 없었으며, 패킷 손실이 발생할 수 있습니다. | 없음 |
| ExcessiveZombieProcesses | Event | 완전히 회수할 수 없는 프로세스가 대량으로 축적되고 있으며, 애플리케이션 문제를 나타내고 시스템 프로세스 한도에 도달할 수 있습니다. | 없음 |
| ForkFailedOutOfPIDs | Condition | 시스템의 프로세스 ID 또는 메모리가 부족하여 fork 또는 exec 호출이 실패했으며, 좀비 프로세스 또는 물리적 메모리 고갈로 발생할 수 있습니다. | Replace |
| KernelBug | Event | Linux 커널 자체가 커널 버그를 감지하고 보고했습니다. 다만 높은 CPU 또는 메모리 사용 노드로 인해 이벤트 처리가 지연되어 발생할 수 있습니다. | 없음 |
| LargeEnvironment | Event | 이 프로세스의 환경 변수 수가 예상보다 많으며, enableServiceLinks가 true로 설정된 많은 서비스로 인해 성능 문제가 발생할 수 있습니다. |
없음 |
| RapidCron | Event | cron 작업이 이 노드에서 5분보다 짧은 간격으로 실행되고 있으며, 작업이 상당한 자원을 소비하면 성능에 영향을 줄 수 있습니다. | 없음 |
| SoftLockup | Event | CPU가 일정 시간 동안 중단되었습니다. | 없음 |
Networking 노드 상태 문제
다음 표에서 심각도가 "Condition"인 문제의 모니터링 조건은 NetworkingReady입니다.
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
| BandwidthInExceeded | Event | 인바운드 총 대역폭이 인스턴스의 최대치를 초과하여 패킷이 대기열에 넣어지거나 삭제되었습니다. | 없음 |
| BandwidthOutExceeded | Event | 아웃바운드 총 대역폭이 인스턴스의 최대치를 초과하여 패킷이 대기열에 넣어지거나 삭제되었습니다. | 없음 |
| ConntrackExceeded | Event | 인스턴스에 대해 연결 추적 최대치를 초과하여 새 연결을 설정할 수 없었으며, 패킷 손실이 발생할 수 있습니다. | 없음 |
| EFAErrorMetric | Event | EFA 드라이버 지표에서 성능 저하가 있는 인터페이스가 있음을 보여줍니다. | 없음 |
| IPAMDInconsistentState | Event | 디스크의 IPAMD 체크포인트 상태가 컨테이너 런타임의 IP를 반영하지 않습니다. | 없음 |
| IPAMDNoIPs | Event | IPAMD에 IP 주소가 부족합니다. | 없음 |
| IPAMDNotReady | Condition | IPAMD가 API 서버에 연결하지 못합니다. | Replace |
| IPAMDNotRunning | Condition | Amazon VPC CNI 프로세스가 실행 중이 아닌 것으로 확인되었습니다. | Replace |
| IPAMDRepeatedlyRestart | Event | IPAMD 서비스에서 여러 번의 다시 시작이 발생했습니다. | 없음 |
| InterfaceNotRunning | Condition | 이 인터페이스가 실행 중이 아닌 것 같거나 네트워크 문제가 있습니다. | Replace |
| InterfaceNotUp | Condition | 이 인터페이스가 켜져 있지 않은 것 같거나 네트워크 문제가 있습니다. | Replace |
| KubeProxyNotReady | Event | Kube-proxy가 리소스를 감시(watch)하거나 나열(list)하지 못했습니다. | 없음 |
| LinkLocalExceeded | Event | 로컬 프록시 서비스로의 트래픽 PPS가 네트워크 인터페이스 최대치를 초과하여 패킷이 삭제되었습니다. | 없음 |
| MACAddressPolicyMisconfigured | Event | systemd-networkd 링크 구성에 잘못된 MACAddressPolicy 값이 있습니다. |
없음 |
| MissingDefaultRoutes | Event | 기본 경로 규칙이 없습니다. | 없음 |
| MissingIPRoutes | Event | Pod IP에 대한 경로가 없습니다. | 없음 |
| MissingIPRules | Event | Pod IP에 대한 규칙이 없습니다. | 없음 |
| MissingLoopbackInterface | Event | 이 인스턴스에서 루프백 인터페이스가 없어 로컬 연결에 의존하는 서비스가 실패합니다. | Replace |
| NetworkSysctl | Event | 이 노드의 네트워크 sysctl 설정이 잠재적으로 올바르지 않습니다. |
없음 |
| PPSExceeded | Event | 양방향 PPS가 인스턴스의 최대치를 초과하여 패킷이 대기열에 넣어지거나 삭제되었습니다. | 없음 |
| PortConflict | Event | Pod가 hostPort를 사용하면 호스트에 이미 바인딩된 포트를 덮어쓰는 iptables 규칙을 작성하여 API 서버의 kubelet 접근을 막을 수 있습니다. |
없음 |
| UnexpectedRejectRule | Event | iptables에서 예기치 않은 REJECT 또는 DROP 규칙이 발견되어 예상 트래픽을 차단할 수 있습니다. |
없음 |
Storage 노드 상태 문제
다음 표에서 심각도가 "Condition"인 문제의 모니터링 조건은 StorageReady입니다.
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
| EBSInstanceIOPSExceeded | Event | 인스턴스의 최대 IOPS를 초과했습니다. | 없음 |
| EBSInstanceThroughputExceeded | Event | 인스턴스의 최대 처리량을 초과했습니다. | 없음 |
| EBSVolumeIOPSExceeded | Event | 특정 EBS 볼륨에 대한 최대 IOPS를 초과했습니다. | 없음 |
| EBSVolumeThroughputExceeded | Event | 특정 Amazon EBS 볼륨에 대한 최대 처리량을 초과했습니다. | 없음 |
| EtcHostsMountFailed | Event | kubelet-container 작업 중 userdata가 /var/lib/kubelet/pods를 다시 마운트하여 kubelet이 생성한 /etc/hosts 마운트가 실패했습니다. |
없음 |
| IODelays | Event | 프로세스에서 입출력 지연이 감지되었으며, 과도하면 부족한 입출력 프로비저닝을 나타낼 수 있습니다. | 없음 |
| KubeletDiskUsageSlow | Event | kubelet이 파일 시스템에 접근하려고 할 때 느린 디스크 사용을 보고합니다. 부족한 디스크 입출력 또는 파일 시스템 문제를 나타낼 수 있습니다. |
없음 |
| XFSSmallAverageClusterSize | Event | XFS 평균 클러스터 크기가 작아 과도한 여유 공간 단편화를 나타냅니다. 이는 사용 가능한 inode나 여유 공간이 있음에도 파일 생성이 불가능해질 수 있습니다. | 없음 |
노드 모니터링 에이전트 구성
EKS 노드 모니터링 에이전트는 DaemonSet으로 배포됩니다. EKS 애드온으로 배포하면 다음 구성 값으로 설치를 사용자 지정할 수 있습니다. 기본 구성은 EKS 노드 모니터링 에이전트 Helm 차트를 참조하세요.
| 구성 옵션 | 설명 |
|---|---|
monitoringAgent.resources.requests.cpu |
모니터링 에이전트의 CPU 자원 요청. |
monitoringAgent.resources.requests.memory |
모니터링 에이전트의 메모리 자원 요청. |
monitoringAgent.resources.limits.cpu |
모니터링 에이전트의 CPU 자원 한도. |
monitoringAgent.resources.limits.memory |
모니터링 에이전트의 메모리 자원 한도. |
monitoringAgent.tolerations |
테인트된(tainted) 노드에 모니터링 에이전트를 스케줄링하기 위한 허용 오차(tolerations). |
monitoringAgent.additionalArgs |
모니터링 에이전트에 전달할 추가 명령줄 인수. |
참고
hostname-override와verbosity를 EKS 애드온 또는 Helm 설치와 함께monitoringAgent.additionalArgs로 구성할 수 있습니다. 현재 추가 인수로 노드 모니터링 에이전트의probe-address(8002) 또는metrics-address(8003)를 EKS 애드온이나 Helm 설치로 사용자 지정할 수 없습니다.
노드 모니터링 에이전트는 NVIDIA GPU 모니터링을 위한 NVIDIA DCGM(Data Center GPU Manager) 서버 구성 요소(nv-hostengine)를 포함합니다. 이 구성 요소는 에이전트의 Helm 차트의 nodeAffinity가 보여주듯 NVIDIA GPU 인스턴스 유형인 노드에서만 실행됩니다. EKS 노드 모니터링 에이전트와 함께 기존 NVIDIA DCGM 설치를 사용할 수 없으며, 이 기능이 필요하면 EKS 로드맵 GitHub issue #2763에 피드백을 제공하세요.
EKS 노드 모니터링 에이전트를 EKS 애드온으로 배포할 때 다음 구성 값으로 NVIDIA DCGM 설치를 사용자 지정할 수 있습니다.
| 구성 옵션 | 설명 |
|---|---|
dcgmAgent.resources.requests.cpu |
DCGM 에이전트의 CPU 자원 요청. |
dcgmAgent.resources.requests.memory |
DCGM 에이전트의 메모리 자원 요청. |
dcgmAgent.resources.limits.cpu |
DCGM 에이전트의 CPU 자원 한도. |
dcgmAgent.resources.limits.memory |
DCGM 에이전트의 메모리 자원 한도. |
dcgmAgent.tolerations |
테인트된 노드에 DCGM 에이전트를 스케줄링하기 위한 허용 오차. |
다음 AWS CLI 명령으로 EKS 노드 모니터링 에이전트 EKS 애드온의 버전과 스키마에 대한 유용한 정보를 얻을 수 있습니다.
Kubernetes 버전에 대한 최신 에이전트 애드온 버전을 가져옵니다. 1.35를 Kubernetes 버전으로 바꾸세요.
aws eks describe-addon-versions \
--addon-name eks-node-monitoring-agent \
--kubernetes-version 1.35 \
--query='addons[].addonVersions[].addonVersion'
EKS 애드온에서 지원하는 에이전트 애드온 스키마를 가져옵니다. v1.5.1-eksbuild.1을 에이전트 버전으로 바꾸세요.
aws eks describe-addon-configuration \
--addon-name eks-node-monitoring-agent \
--addon-version v1.5.1-eksbuild.1