이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
노드 자동 복구 활성화 및 노드 상태 문제 조사
노드 상태는 워크로드를 효과적으로 실행하는 노드의 운영 상태 및 기능을 나타냅니다. 정상 노드는 예상 연결을 유지하고, 리소스가 충분하며, 중단 없이 포드를 성공적으로 실행할 수 있습니다. 노드에 대한 자세한 내용은 노드의 상태 보기 및 kubectl 및 S3를 사용하여 관리형 노드에 대한 노드 로그 검색 섹션을 참조하세요.
Amazon EKS는 노드 모니터링 에이전트 및 노드 자동 복구를 제공하여 정상 노드를 유지하는 데 도움이 됩니다.
중요
노드 모니터링 에이전트 및 노드 자동 복구는 Linux에서만 사용할 수 있습니다. Windows에서는 이러한 기능을 사용할 수 없습니다.
노드 모니터링 에이전트
노드 모니터링 에이전트는 노드 로그를 자동으로 읽어 특정 상태 문제를 감지합니다. 노드 로그를 통해 구문 분석하여 장애를 감지하고 워커 노드에 대한 다양한 상태 정보를 표시합니다. 스토리지 및 네트워킹 문제와 같이 감지된 각 문제 범주에 대해 워커 노드에 전용 NodeCondition이 적용됩니다. 감지된 상태 문제에 대한 설명은 관찰성 대시보드에서 확인할 수 있습니다. 자세한 내용은 노드 상태 문제 섹션을 참조하세요.
노드 모니터링 에이전트는 모든 Amazon EKS Auto Mode 클러스터의 기능으로 포함됩니다. 다른 클러스터 유형의 경우 모니터링 에이전트를 Amazon EKS 추가 기능으로 추가할 수 있습니다. 자세한 내용은 Amazon EKS 추가 기능 생성 섹션을 참조하세요.
노드 자동 복구
노드 자동 복구는 노드 상태를 지속적으로 모니터링하여 감지된 문제에 자동으로 대응하고 가능한 경우 노드를 교체하는 추가 기능입니다. 이렇게 하면 수동 개입을 최소화하면서 클러스터의 전반적인 가용성을 높일 수 있습니다. 상태 확인이 실패하면 노드에 새 포드가 예약되지 않도록 노드가 자동으로 차단됩니다.
노드 자동 복구는 자체적으로 kubelet 및 수동으로 삭제된 노드 객체의 Ready 조건에 대응할 수 있습니다. 노드 모니터링 에이전트와 페어링하면 노드 자동 복구가 감지되지 않는 더 많은 조건에 대응할 수 있습니다. 이러한 추가 조건에는 KernelReady, NetworkingReady, StorageReady가 포함됩니다.
이 자동 노드 복구는 클러스터 조인 실패, 응답하지 않는 kubelet, 액셀러레이터(디바이스) 오류 증가 등 간헐적인 노드 문제를 자동으로 해결합니다. 안정성이 향상되면 애플리케이션 가동 중지 시간을 줄이고 클러스터 작업을 개선할 수 있습니다. 기본적으로 노드 자동 복구는 , DiskPressure, MemoryPressure, PIDPressure 및 DCGM(NVIDIA Data Center GPU Manager) 진단 또는 모니터링 도구 오류와 같은 특정 조건에서 노드를 자동으로 복구하지 않습니다. 이러한 조건은 종종 노드 수준 장애가 아닌 애플리케이션 동작, 워크로드 구성 또는 리소스 제한 관련 문제를 나타내기 때문에 적절한 기본 복구 작업을 결정하기가 어렵습니다. 그러나 nodeRepairConfigOverrides를 사용하여 이 동작을 사용자 지정하면 사용 사례에 따라 이러한 조건에 대한 자동 복구 작업을 활성화할 수 있습니다. Amazon EKS는 AcceleratedHardwareReady NodeConditions에 대한 작업을 수행하기 전에 10분, 다른 모든 조건에 대해서는 30분을 기다립니다.
또한 관리형 노드 그룹은 두 가지 시나리오에서 안전상의 이유로 노드 복구를 자동으로 비활성화합니다. 이전에 진행 중인 모든 복구 작업은 두 상황 모두에서 계속됩니다.
-
Application Recovery Controller(ARC)를 통해 클러스터의 영역 전환이 트리거된 경우 이후의 모든 복구 작업이 중지됩니다.
-
노드 그룹에 5개가 넘는 노드가 있고 노드 그룹에서 비정상 상태의 노드가 20%를 초과하는 경우 복구 작업이 중지됩니다.
관리형 노드 그룹을 생성하거나 편집할 때 노드 자동 복구를 활성화할 수 있습니다.
-
Amazon EKS 콘솔을 사용하는 경우 관리형 노드 그룹에 대해 노드 자동 복구 활성화 확인란을 활성화합니다. 자세한 내용은 클러스터에 대한 관리형 노드 그룹 생성 섹션을 참조하세요.
-
AWS CLI를 사용하는 경우
eks create nodegroup또는eks update-nodegroup-config명령에--node-repair-config enabled=true를 추가합니다. -
노드 자동 복구와 함께 관리형 노드 그룹을 사용하는
eksctlClusterConfig예제는 GitHub의 44-node-repair.yaml을 참조하세요.
Amazon EKS는 다음을 통해 노드 자동 복구 동작을 보다 세밀하게 제어할 수 있습니다.
-
maxUnhealthyNodeThresholdCount및maxUnhealthyNodeThresholdPercentage-
이러한 필드를 사용하면 비정상 노드의 수 또는 백분율 임계치를 지정할 수 있습니다. 이 값을 초과하면 노드 자동 복구 작업이 중지됩니다. 이를 통해 노드 자동 복구의 '영향 범위'를 더 잘 제어할 수 있습니다.
-
절대 수 또는 백분율을 설정할 수 있지만 둘 다 설정할 수는 없습니다.
-
-
maxParallelNodesRepairedCount및maxParallelNodesRepairedPercentage-
이러한 필드를 사용하면 동시에 또는 병렬로 복구할 수 있는 최대 노드 수를 지정할 수 있으며, 이는 모든 비정상 노드의 수 또는 백분율로 표현됩니다. 이를 통해 노드 교체 속도를 더 세밀하게 제어할 수 있습니다.
-
비정상 노드 임계치와 마찬가지로 절대 수 또는 백분율을 설정할 수 있지만 둘 다 설정할 수는 없습니다.
-
-
nodeRepairConfigOverrides-
이는 특정 복구 작업에 대해 세분화된 재정의를 설정할 수 있는 복잡한 구조입니다. 이러한 재정의는 노드를 복구할 수 있는 항목으로 간주하기 전에 복구 작업과 복구 지연 시간을 제어합니다.
-
다음은 이 구조의 특정 필드입니다.
-
nodeMonitoringCondition: 노드 모니터링 에이전트가 보고하는 비정상 조건. -
nodeUnhealthyReason: 노드 모니터링 에이전트가 노드를 비정상으로 식별한 이유. -
minRepairWaitTimeMins: 노드가 복구에 적합한 자격을 갖추기 위해 복구 조건과 비정상 이유가 지속되어야 하는 최소 시간(분). -
repairAction: 위의 조건이 충족될 때 수리 시스템이 수행해야 하는 작업.
-
-
이 필드를 사용하는 경우 구조의 모든 필드를 지정해야 합니다. 이러한 재정의 목록을 제공할 수도 있습니다.
-
nodeMonitoringCondition및nodeUnhealthyReason은 시스템의 기본 동작에서 벗어나도록 설정한 수동 텍스트 입력입니다. -
minRepairWaitTimeMins및repairAction필드를 사용하면 시스템의 기본 동작과의 차이를 지정할 수 있습니다. -
다음 예제에서는 Amazon EKS가
NvidiaXID13Error조건이 발생한 노드를 재부팅하기 전에 대기 시간을 20분으로 재정의하는 방법을 보여줍니다. 기본적으로 Amazon EKS는AcceleratedHardwareReady조건에 대한 복구 작업을 수행하기 전에 10분을 기다립니다.aws eks update-nodegroup-config \ --cluster-name my-cluster \ --nodegroup-name my-nodegroup \ --node-repair-config 'enabled=true,nodeRepairConfigOverrides=[{nodeMonitoringCondition=AcceleratedHardwareReady,nodeUnhealthyReason=NvidiaXID13Error,minRepairWaitTimeMins=20}]'
-
노드 상태 문제
다음 표에서는 노드 모니터링 에이전트가 감지할 수 있는 노드 상태 문제를 설명합니다. 두 가지 문제가 있습니다.
AcceleratedHardware 노드 상태 문제
다음 표에서 심각도가 '조건'인 문제에 대한 모니터링 조건은 AcceleratedHardwareReady입니다.
자동 복구가 활성화된 경우 나열된 복구 작업은 문제가 감지되고 10분 후에 시작됩니다. XID 오류에 대한 자세한 내용은 NVIDIA GPU 배포 및 관리 설명서의 Xid Errors
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
|
DCGMDiagnosticFailure |
조건 |
DCGM 활성 진단 테스트 제품군의 테스트 사례가 실패했습니다. |
없음 |
|
DCGMError |
조건 |
DCGM 호스트 프로세스에 대한 연결이 끊어졌거나 해당 연결을 설정할 수 없습니다. |
없음 |
|
DCGMFieldError[Code] |
Event |
DCGM이 필드 식별자를 통해 GPU 성능 저하를 감지했습니다. |
없음 |
|
DCGMHealthCode[Code] |
Event |
DCGM 상태 확인이 치명적이지 않은 방식으로 실패했습니다. |
없음 |
|
DCGMHealthCode[Code] |
조건 |
DCGM 상태 확인이 치명적인 방식으로 실패했습니다. |
없음 |
|
NeuronDMAError |
조건 |
DMA 엔진에서 복구할 수 없는 오류가 발생했습니다. |
Replace |
|
NeuronHBMUncorrectableError |
조건 |
HBM에서 수정할 수 없는 오류가 발생하여 잘못된 결과가 발생했습니다. |
Replace |
|
NeuronNCUncorrectableError |
조건 |
Neuron Core의 수정 불가능한 메모리 오류가 감지되었습니다. |
Replace |
|
NeuronSRAMUncorrectableError |
조건 |
온칩 SRAM에 패리티 오류가 발생하여 잘못된 결과가 발생했습니다. |
Replace |
|
NvidiaDeviceCountMismatch |
Event |
NVML을 통해 표시되는 GPU 수가 파일 시스템의 NVIDIA 디바이스 수와 일치하지 않습니다. |
없음 |
|
NvidiaDoubleBitError |
조건 |
GPU 드라이버에서 더블 비트 오류가 발생했습니다. |
Replace |
|
NvidiaNCCLError |
Event |
NVIDIA Collective Communications 라이브러리( |
없음 |
|
NvidiaNVLinkError |
조건 |
GPU 드라이버에서 NVLink 오류가 보고되었습니다. |
Replace |
|
NvidiaPCIeError |
Event |
전송 오류를 복구하기 위해 PCIe 재생이 트리거되었습니다. |
없음 |
|
NvidiaPageRetirement |
Event |
GPU 드라이버가 사용 중지를 위해 메모리 페이지를 표시했습니다. 동일한 주소에 단일 더블 비트 오류가 있거나 두 개의 단일 비트 오류가 발생하는 경우 이 문제가 발생할 수 있습니다. |
없음 |
|
NvidiaPowerError |
Event |
GPU의 전력 사용률이 허용된 임계치를 위반했습니다. |
없음 |
|
NvidiaThermalError |
Event |
GPU의 열 상태가 허용된 임계치를 위반했습니다. |
없음 |
|
NvidiaXID[Code]Error |
조건 |
심각한 GPU 오류가 발생했습니다. |
교체 또는 재부팅 |
|
NvidiaXID[Code]Warning |
Event |
심각하지 않은 GPU 오류가 발생했습니다. |
없음 |
ContainerRuntime 노드 상태 문제
다음 표에서 심각도가 '조건'인 문제에 대한 모니터링 조건은 ContainerRuntimeReady입니다.
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
|
ContainerRuntimeFailed |
Event |
컨테이너 런타임이 컨테이너를 생성하지 못했습니다. 반복적으로 발생하는 경우 보고된 문제와 관련이 있을 수 있습니다. |
없음 |
|
DeprecatedContainerdConfiguration |
Event |
사용 중단된 이미지 매니페스트 버전 2, 스키마 1을 사용하는 컨테이너 이미지인 스키마가 최근 |
없음 |
|
KubeletFailed |
Event |
kubelet이 실패 상태가 되었습니다. |
없음 |
|
LivenessProbeFailures |
Event |
활성 프로브 장애가 감지되었습니다. 반복해서 발생하는 경우 애플리케이션 코드 문제 또는 불충분한 제한 시간 값을 나타낼 수 있습니다. |
없음 |
|
PodStuckTerminating |
조건 |
포드가 과도한 시간 동안 종료되지 않거나 중단되었습니다. 이는 포드 상태 진행을 방지하는 CRI 오류로 인해 발생할 수 있습니다. |
Replace |
|
ReadinessProbeFailures |
Event |
준비 상태 프로브 장애가 감지되었습니다. 반복적으로 발생하는 경우 애플리케이션 코드 문제 또는 불충분한 제한 시간 값을 나타낼 수 있습니다. |
없음 |
|
[Name]RepeatedRestart |
Event |
시스템 장치가 자주 다시 시작됩니다. |
없음 |
|
ServiceFailedToStart |
Event |
systemd 단위를 시작하지 못했습니다. |
없음 |
커널 노드 상태 문제
다음 표에서 심각도가 '조건'인 문제에 대한 모니터링 조건은 KernelReady입니다.
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
|
AppBlocked |
Event |
일반적으로 입력 또는 출력에서 차단되어 일정 예약에서 장시간 동안 작업이 차단되었습니다. |
없음 |
|
AppCrash |
Event |
노드의 애플리케이션이 충돌했습니다. |
없음 |
|
ApproachingKernelPidMax |
Event |
프로세스 수가 현재 |
없음 |
|
ApproachingMaxOpenFiles |
Event |
현재 커널 설정을 고려할 때 열려 있는 파일의 수가 가능한 최대 수에 근접하고 있으며, 그 이후에는 새 파일을 열지 못합니다. |
없음 |
|
ConntrackExceededKernel |
Event |
연결 추적이 커널의 최댓값을 초과했으며 새 연결을 설정할 수 없어 패킷 손실이 발생할 수 있습니다. |
없음 |
|
ExcessiveZombieProcesses |
Event |
완전히 회수할 수 없는 프로세스가 많은 수로 누적되고 이는 애플리케이션 문제를 나타내며 시스템 프로세스 제한에 도달할 수 있습니다. |
없음 |
|
ForkFailedOutOfPIDs |
조건 |
시스템이 프로세스 ID 또는 메모리를 벗어났기 때문에 포크 또는 실행 직접 호출이 실패했습니다. 이는 좀비 프로세스 또는 물리적 메모리 소진으로 인해 발생할 수 있습니다. |
Replace |
|
KernelBug |
Event |
Linux 커널 자체에서 커널 버그가 감지 및 보고되었지만, 이는 CPU 또는 메모리 사용량이 높은 노드로 인해 발생할 수 있으며 이벤트 처리가 지연될 수 있습니다. |
없음 |
|
LargeEnvironment |
Event |
이 프로세스의 환경 변수 수는 예상보다 많으며, 이는 |
없음 |
|
RapidCron |
Event |
cron 작업이 이 노드에서 5분 간격보다 빠르게 실행되고 있어 작업이 상당한 리소스를 소비하면 성능에 영향을 줄 수 있습니다. |
없음 |
|
SoftLockup |
Event |
CPU가 지정된 시간 동안 중지되었습니다. |
없음 |
네트워킹 노드 상태 문제
다음 표에서 심각도가 '조건'인 문제에 대한 모니터링 조건은 NetworkingReady입니다.
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
|
BandwidthInExceeded |
Event |
인바운드 집계 대역폭이 인스턴스의 최댓값을 초과하여 패킷이 대기열에 추가되거나 손실되었습니다. |
없음 |
|
BandwidthOutExceeded |
Event |
아웃바운드 집계 대역폭이 인스턴스의 최댓값을 초과하여 패킷이 대기열에 추가되거나 손실되었습니다. |
없음 |
|
ConntrackExceeded |
Event |
연결 추적이 인스턴스의 최댓값을 초과했으며 새 연결을 설정할 수 없어 패킷 손실이 발생할 수 있습니다. |
없음 |
|
IPAMDInconsistentState |
Event |
디스크의 IPAMD 체크포인트 상태는 컨테이너 런타임의 IP를 반영하지 않습니다. |
없음 |
|
IPAMDNoIPs |
Event |
IPAMD에 IP 주소가 없습니다. |
없음 |
|
IPAMDNotReady |
조건 |
IPAMD가 API 서버에 연결되지 않습니다. |
Replace |
|
IPAMDNotRunning |
조건 |
Amazon VPC CNI 프로세스가 실행 중인 것으로 확인되지 않았습니다. |
Replace |
|
IPAMDRepeatedlyRestart |
Event |
IPAMD 서비스에서 여러 번 다시 시작되었습니다. |
없음 |
|
InterfaceNotRunning |
조건 |
이 인터페이스가 실행 중이 아니거나 네트워크 문제가 있는 것 같습니다. |
Replace |
|
InterfaceNotUp |
조건 |
이 인터페이스가 작동하지 않거나 네트워크 문제가 있는 것 같습니다. |
Replace |
|
KubeProxyNotReady |
Event |
Kube-proxy가 리소스를 감시하거나 나열하지 못했습니다. |
없음 |
|
LinkLocalExceeded |
Event |
로컬 프록시 서비스에 대한 트래픽의 PPS가 네트워크 인터페이스의 최댓값을 초과하여 패킷이 손실되었습니다. |
없음 |
|
MACAddressPolicyMisconfigured |
Event |
systemd-networkd 링크 구성의 |
없음 |
|
MissingDefaultRoutes |
Event |
기본 라우팅 규칙이 누락되었습니다. |
없음 |
|
MissingIPRoutes |
Event |
포드 IP에 대한 경로가 누락되었습니다. |
없음 |
|
MissingIPRules |
Event |
포드 IP에 대한 규칙이 누락되었습니다. |
없음 |
|
MissingLoopbackInterface |
조건 |
루프백 인터페이스가 이 인스턴스에서 누락되어 로컬 연결에 따라 서비스가 실패하게 됩니다. |
Replace |
|
NetworkSysctl |
Event |
이 노드의 네트워크 |
없음 |
|
PPSExceeded |
Event |
양방향 PPS가 인스턴스의 최댓값을 초과하여 패킷이 대기열에 추가되거나 손실되었습니다. |
없음 |
|
PortConflict |
Event |
포드가 hostPort를 사용하는 경우 호스트의 이미 바인딩된 포트를 재정의하는 |
없음 |
|
UnexpectedRejectRule |
Event |
예상치 못한 |
없음 |
스토리지 노드 상태 문제
다음 표에서 심각도가 '조건'인 문제에 대한 모니터링 조건은 StorageReady입니다.
| 이름 | 심각도 | 설명 | 복구 작업 |
|---|---|---|---|
|
EBSInstanceIOPSExceeded |
Event |
인스턴스에 대한 최대 IOPS를 초과했습니다. |
없음 |
|
EBSInstanceThroughputExceeded |
Event |
인스턴스에 대한 최대 처리량을 초과했습니다. |
없음 |
|
EBSVolumeIOPSExceeded |
Event |
특정 EBS 볼륨에 대한 최대 IOPS를 초과했습니다. |
없음 |
|
EBSVolumeThroughputExceeded |
Event |
특정 Amazon EBS 볼륨에 대한 최대 처리량을 초과했습니다. |
없음 |
|
EtcHostsMountFailed |
Event |
|
없음 |
|
IODelays |
Event |
프로세스에서 입력 또는 출력 지연이 감지되었으며, 이는 과도한 경우 입력-출력 프로비저닝이 부족할 수 있음을 나타냅니다. |
없음 |
|
KubeletDiskUsageSlow |
Event |
|
없음 |
|
XFSSmallAverageClusterSize |
Event |
XFS Average Cluster 크기는 작으며 이는 과도한 여유 공간 조각화를 나타냅니다. 이 경우 사용 가능한 inode 또는 여유 공간에도 불구하고 파일이 생성되지 않을 수 있습니다. |
없음 |