

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# EKS 클러스터에서 노드 자동 복구
<a name="node-repair"></a>

이 주제에서는 EKS 자동 노드 복구 동작과 요구 사항에 맞게 이 기능을 구성하는 방법을 자세히 설명합니다. EKS 자동 노드 복구는 EKS Auto Mode에서 기본적으로 활성화되며 EKS 관리형 노드 그룹 및 Karpenter와 함께 사용할 수 있습니다.

기본 EKS 자동 노드 복구 작업은 아래 표에 요약되어 있으며 EKS Auto Mode, EKS 관리형 노드 그룹 및 Karpenter의 동작에 적용됩니다. EKS Auto Mode 또는 Karpenter를 사용하는 경우 모든 `AcceleratedHardwareReady` 복구 작업은 `Replace`이며 EKS 관리형 노드 그룹만 복구 작업으로 `Reboot`를 지원합니다.

EKS 노드 모니터링 에이전트에서 감지한 노드 상태 문제 및 해당 노드 복구 작업의 상세 목록은 [EKS 노드 모니터링 에이전트에서 노드 상태 문제 감지](node-health-nma.md) 섹션을 참조하세요.


| 노드 조건 | 설명 | 다음 이후에 복구 | 복구 작업 | 
| --- | --- | --- | --- | 
|  AcceleratedHardwareReady  |  AcceleratedHardwareReady는 노드의 가속 하드웨어(GPU, Neuron)가 올바르게 작동하는지를 나타냅니다.  |  10m  |  교체 또는 재부팅  | 
|  ContainerRuntimeReady  |  ContainerRuntimeReady는 컨테이너 런타임(Containered 등)이 올바르게 작동하고 컨테이너를 실행할 수 있는지를 나타냅니다.  |  30m  |  Replace  | 
|  DiskPressure  |  DiskPressure는 노드에서 디스크 압력(디스크 공간 부족 또는 높은 I/O)이 발생하고 있음을 나타내는 표준 Kubernetes 조건입니다.  |  해당 사항 없음  |  없음  | 
|  KernelReady  |  KernelReady는 커널이 심각한 오류, 패닉 또는 리소스 소진 없이 올바르게 작동하는지를 나타냅니다.  |  30m  |  Replace  | 
|  MemoryPressure  |  MemoryPressure는 노드에서 메모리 압력(사용 가능한 메모리 부족)이 발생하고 있음을 나타내는 표준 Kubernetes 조건입니다.  |  해당 사항 없음  |  없음  | 
|  NetworkingReady  |  NetworkingReady는 노드의 네트워킹 스택이 올바르게 작동하는지(인터페이스, 라우팅, 연결)를 나타냅니다.  |  30m  |  Replace  | 
|  StorageReady  |  StorageReady는 노드의 스토리지 하위 시스템이 올바르게 작동하는지(디스크, 파일 시스템, I/O)를 나타냅니다.  |  30m  |  Replace  | 
|  준비됨  |  Ready는 노드가 정상이고 포드를 수락할 준비가 되었음을 나타내는 표준 Kubernetes 조건입니다.  |  30m  |  Replace  | 

EKS 자동 노드 복구 작업은 기본적으로 다음 시나리오에서 비활성화됩니다. 진행 중인 노드 복구 작업은 각 시나리오에서 계속됩니다. 이러한 기본 설정을 재정의하는 방법은 [자동 노드 복구 구성](#configure-node-repair) 섹션을 참조하세요.

 **EKS 관리형 노드 그룹** 
+ 노드 그룹에는 노드가 5개 넘게 있고 노드 그룹의 노드 중 20% 넘게 비정상 상태입니다.
+ 클러스터의 영역 전환은 Application Recovery Controller(ARC)를 통해 트리거됩니다.

 **EKS Auto Mode 및 Karpenter** 
+ NodePool의 노드 중 20% 넘게 비정상 상태입니다.
+ 독립 실행형 NodeClaims의 경우 클러스터의 노드 중 20%가 비정상 상태입니다.

## 자동 노드 복구 구성
<a name="configure-node-repair"></a>

EKS Auto Mode를 사용하는 경우 자동 노드 복구를 구성할 수 없으며, 항상 Karpenter와 동일한 기본 설정으로 활성화됩니다.

### Karpenter
<a name="configure-node-repair-karpenter"></a>

Karpenter에서 자동 노드 복구를 사용하려면 `NodeRepair=true` 기능 게이트를 활성화합니다. `--feature-gates` CLI 옵션 또는 Karpenter 배포의 `FEATURE_GATES` 환경 변수를 통해 기능 게이트를 활성화할 수 있습니다. 자세한 내용은 [Karpenter](https://karpenter.sh/docs/concepts/disruption/#node-auto-repair) 설명서를 참조하세요.

### 관리형 노드 그룹
<a name="configure-node-repair-mng"></a>

새 EKS 관리형 노드 그룹을 생성하는 경우 또는 기존 EKS 관리형 노드 그룹을 업데이트하여 자동 노드 복구를 활성화할 수 있습니다.
+  **Amazon EKS 콘솔** - 관리형 노드 그룹에 대해 **노드 자동 복구 활성화** 확인란을 선택합니다. 자세한 내용은 [클러스터에 대한 관리형 노드 그룹 생성](create-managed-node-group.md) 섹션을 참조하세요.
+  **AWS CLI** – [https://docs.aws.amazon.com/cli/latest/reference/eks/create-nodegroup.html](https://docs.aws.amazon.com/cli/latest/reference/eks/create-nodegroup.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/eks/update-nodegroup-config.html](https://docs.aws.amazon.com/cli/latest/reference/eks/update-nodegroup-config.html) 명령에 `--node-repair-config enabled=true`를 추가합니다.
+  **eksctl** – `managedNodeGroups.nodeRepairConfig.enabled: true`를 구성합니다. [eksctl GitHub](https://github.com/eksctl-io/eksctl/blob/main/examples/44-node-repair.yaml)의 예제를 참조하세요.

EKS 관리형 노드 그룹을 사용하는 경우 다음 설정을 기반으로 노드 자동 복구 동작을 제어할 수 있습니다.

노드 자동 복구가 작업 수행을 중지하는 시점을 제어하려면 노드 그룹에서 비정상 노드 수를 기반으로 임계치를 설정합니다. 절대 수 또는 백분율을 설정합니다. 단, 둘 다 설정할 수는 없습니다.


| 설정 | 설명 | 
| --- | --- | 
|   `maxUnhealthyNodeThresholdCount`   |  노드 자동 복구가 중지되는 비정상 노드의 절대 수입니다. 이를 사용하여 복구 범위를 제한합니다.  | 
|   `maxUnhealthyNodeThresholdPercentage`   |  노드 자동 복구가 중지되는 비정상 노드의 백분율(0\$1100)입니다.  | 

동시에 복구되는 노드 수를 제어하기 위해 복구 병렬 처리를 구성할 수 있습니다. 비정상 노드 임계치와 마찬가지로 절대 수 또는 백분율을 설정합니다. 단, 둘 다 설정할 수는 없습니다.


| 설정 | 설명 | 
| --- | --- | 
|   `maxParallelNodesRepairedCount`   |  동시에 복구할 최대 노드 수입니다.  | 
|   `maxParallelNodesRepairedPercentage`   |  동시에 복구할 비정상 노드의 최대 비율(0\$1100)입니다.  | 

`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개의 노드 복구
+ 5분 후에 노드를 교체하도록 XID 64 오류(GPU 메모리 재매핑 실패)를 재정의합니다. 기본값은 10분 후 재부팅입니다.
+ 아무 작업도 수행하지 않도록 XID 31 오류(GPU 메모리 페이지 오류)를 재정의합니다. 기본값은 10분 후 재부팅입니다.