EKS 클러스터에서 노드 자동 복구
EKS 클러스터에서 노드 자동 복구
EKS 자동 노드 복구의 동작과 이를 요구 사항에 맞게 구성하는 방법을 설명합니다.
출처: 문서
본문
이 주제는 EKS 자동 노드 복구의 동작과 이를 요구 사항에 맞게 구성하는 방법을 자세히 설명합니다. EKS 자동 노드 복구는 EKS Auto Mode에서 기본적으로 활성화되며, EKS 관리형 노드 그룹과 Karpenter에서 사용할 수 있습니다.
기본 EKS 자동 노드 복구 작업은 아래 표에 요약되어 있으며 EKS Auto Mode, EKS 관리형 노드 그룹, Karpenter의 동작에 적용됩니다. EKS Auto Mode 또는 Karpenter를 사용할 때 모든 AcceleratedHardwareReady 복구 작업은 Replace이며, Reboot을 복구 작업으로 지원하는 것은 EKS 관리형 노드 그룹뿐입니다.
EKS 노드 모니터링 에이전트가 감지한 노드 상태 문제와 해당 노드 복구 작업의 자세한 목록은 EKS 노드 모니터링 에이전트로 노드 상태 문제 감지를 참조하세요.
| 노드 조건 | 설명 | 복구 시점 | 복구 작업 |
|---|---|---|---|
| AcceleratedHardwareReady | 노드의 가속 하드웨어(GPU, Neuron)가 올바르게 작동하는지 여부를 나타냅니다. | 10m | Replace 또는 Reboot |
| ContainerRuntimeReady | 컨테이너 런타임(containerd 등)이 올바르게 작동하고 컨테이너를 실행할 수 있는지 여부를 나타냅니다. | 30m | Replace |
| DiskPressure | 노드가 디스크 압력(낮은 디스크 공간 또는 높은 I/O)을 겪고 있음을 나타내는 표준 Kubernetes 조건입니다. | 해당 없음 | 없음 |
| KernelReady | 커널이 중대한 오류, 패닉, 자원 고갈 없이 올바르게 작동하는지 여부를 나타냅니다. | 30m | Replace |
| MemoryPressure | 노드가 메모리 압력(낮은 사용 가능 메모리)을 겪고 있음을 나타내는 표준 Kubernetes 조건입니다. | 해당 없음 | 없음 |
| NetworkingReady | 노드의 네트워킹 스택(인터페이스, 라우팅, 연결)이 올바르게 작동하는지 여부를 나타냅니다. | 30m | Replace |
| StorageReady | 노드의 스토리지 하위 시스템(디스크, 파일 시스템, I/O)이 올바르게 작동하는지 여부를 나타냅니다. | 30m | Replace |
| Ready | 노드가 정상이고 Pod를 받을 준비가 되었음을 나타내는 표준 Kubernetes 조건입니다. | 30m | Replace |
EKS 자동 노드 복구 작업은 기본적으로 다음 시나리오에서 비활성화됩니다. 진행 중인 노드 복구 작업은 각 시나리오에서 계속됩니다. 이러한 기본 설정을 재정의하는 방법은 자동 노드 복구 구성을 참조하세요.
- EKS 관리형 노드 그룹
- 노드 그룹에 5개 이상의 노드가 있고 노드 그룹의 노드 중 20% 이상이 비정상입니다.
- 클러스터에 대한 존 시프트(zonal shift)가 Application Recovery Controller(ARC)를 통해 트리거됩니다.
- EKS Auto Mode 및 Karpenter
- NodePool의 노드 중 20% 이상이 비정상입니다.
- 독립형 NodeClaim의 경우 클러스터의 노드 중 20%가 비정상입니다.
자동 노드 복구 구성
EKS Auto Mode를 사용할 때는 자동 노드 복구를 구성할 수 없으며 Karpenter와 동일한 기본 설정으로 항상 활성화됩니다.
Karpenter
Karpenter에서 자동 노드 복구를 사용하려면 기능 게이트 NodeRepair=true를 활성화하세요. Karpenter 배포의 --feature-gates CLI 옵션이나 FEATURE_GATES 환경 변수로 기능 게이트를 활성화할 수 있습니다. 자세한 내용은 Karpenter 문서를 참조하세요.
관리형 노드 그룹
새 EKS 관리형 노드 그룹을 만들 때나 기존 EKS 관리형 노드 그룹을 업데이트할 때 자동 노드 복구를 활성화할 수 있습니다.
- Amazon EKS 콘솔 — 관리형 노드 그룹에 대해 Enable node auto repair 확인란을 선택합니다. 자세한 내용은 클러스터용 관리형 노드 그룹 생성을 참조하세요.
- AWS CLI —
eks create-nodegroup또는eks update-nodegroup-config명령에--node-repair-config enabled=true를 추가합니다. - eksctl —
managedNodeGroups.nodeRepairConfig.enabled: true를 구성합니다. 예시는 eksctl GitHub를 참조하세요.
EKS 관리형 노드 그룹을 사용할 때 다음 설정으로 노드 자동 복구 동작을 제어할 수 있습니다.
노드 자동 복구가 작업을 중단하는 시점을 제어하려면 노드 그룹의 비정상 노드 수를 기준으로 임계값을 설정하세요. 절대 개수 또는 백분율 중 하나만 설정하세요(둘 다는 불가).
| 설정 | 설명 |
|---|---|
maxUnhealthyNodeThresholdCount |
노드 자동 복구가 중단되는 비정상 노드의 절대 개수입니다. 복구 범위를 제한하는 데 사용합니다. |
maxUnhealthyNodeThresholdPercentage |
노드 자동 복구가 중단되는 비정상 노드의 백분율(0-100)입니다. |
동시에 복구할 노드 수를 제어하려면 복구 병렬성(repair parallelism)을 구성할 수 있습니다. 비정상 노드 임계값과 마찬가지로 절대 개수 또는 백분율 중 하나만 설정하세요(둘 다는 불가).
| 설정 | 설명 |
|---|---|
maxParallelNodesRepairedCount |
동시에 복구할 최대 노드 수입니다. |
maxParallelNodesRepairedPercentage |
동시에 복구할 비정상 노드의 최대 백분율(0-100)입니다. |
nodeRepairConfigOverrides로 특정 조건에 대한 복구 동작을 사용자 지정할 수 있습니다. 다른 문제 유형에 대해 다른 복구 작업이나 대기 시간이 필요할 때 사용하세요.
각 재정의에는 다음 필드가 모두 필요합니다.
| 필드 | 설명 |
|---|---|
nodeMonitoringCondition |
노드 모니터링 에이전트가 보고하는 노드 조건 유형입니다. 예: AcceleratedHardwareReady, NetworkingReady, StorageReady, KernelReady |
nodeUnhealthyReason |
비정상 조건의 특정 이유 코드입니다. 예: NvidiaXID31Error, IPAMDNotRunning |
minRepairWaitTimeMins |
노드가 복구 대상이 되기 전에 조건이 지속되어야 하는 최소 시간(분)입니다. 일시적인 문제에 대해 노드를 복구하지 않도록 하는 데 사용합니다. |
repairAction |
조건이 충족될 때 취할 작업입니다. 유효한 값: Replace(노드 종료 및 교체), Reboot(노드 재부팅), NoAction(복구 작업 없음) |
다음 AWS CLI 예시는 사용자 지정 복구 설정으로 노드 그룹을 생성합니다.
aws eks create-nodegroup \
--cluster-name my-cluster \
--nodegroup-name my-nodegroup \
--node-role arn:aws:iam::111122223333:role/NodeRole \
--subnets subnet-0123456789abcdef0 \
--node-repair-config '{
"enabled": true,
"maxUnhealthyNodeThresholdPercentage": 10,
"maxParallelNodesRepairedCount": 3,
"nodeRepairConfigOverrides": [
{
"nodeMonitoringCondition": "AcceleratedHardwareReady",
"nodeUnhealthyReason": "NvidiaXID64Error",
"minRepairWaitTimeMins": 5,
"repairAction": "Replace"
},
{
"nodeMonitoringCondition": "AcceleratedHardwareReady",
"nodeUnhealthyReason": "NvidiaXID31Error",
"minRepairWaitTimeMins": 15,
"repairAction": "NoAction"
}
]
}'
이 구성은 다음을 수행합니다.
- 노드 자동 복구를 활성화합니다.
- 노드의 10% 이상이 비정상일 때 복구 작업을 중단합니다.
- 한 번에 최대 3개 노드를 복구합니다.
- XID 64 오류(GPU 메모리 리맵 실패)를 재정의하여 5분 후 노드를 교체합니다. 기본값은 10분 후 재부팅입니다.
- XID 31 오류(GPU 메모리 페이지 폴트)를 재정의하여 작업을 수행하지 않습니다. 기본값은 10분 후 재부팅입니다.