

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 自動修復 EKS 叢集中的節點
<a name="node-repair"></a>

本主題詳細說明 EKS 自動節點修復行為，以及如何將其設定為滿足您的需求。EKS 自動節點修復預設為在 EKS Auto 模式中啟用，可與 EKS 受管節點群組和 Karpenter 搭配使用。

預設 EKS 自動節點修復動作摘要如下表所示，適用於 EKS Auto Mode、EKS 受管節點群組和 Karpenter 的行為。使用 EKS Auto Mode 或 Karpenter 時，所有`AcceleratedHardwareReady`修復動作都是 `Replace`，只有 EKS 受管節點群組支援`Reboot`做為修復動作。

如需 EKS 節點監控代理程式偵測到的節點運作狀態問題及其對應節點修復動作的詳細清單，請參閱 [使用 EKS 節點監控代理程式偵測節點運作狀態問題](node-health-nma.md)。


| 節點條件 | Description | 在 之後修復 | 修復動作 （多個） | 
| --- | --- | --- | --- | 
|  AcceleratedHardwareReady  |  AcceleratedHardwareReady 指出節點上的加速硬體 (GPU、Neuron) 是否正常運作。  |  10m  |  取代或重新啟動  | 
|  ContainerRuntimeReady  |  ContainerRuntimeReady 指出容器執行時間 （容器等） 是否正常運作且能夠執行容器。  |  30m  |  取代  | 
|  DiskPressure  |  DiskPressure 是標準 Kubernetes 條件，表示節點遇到磁碟壓力 （磁碟空間不足或 I/O 高）。  |  N/A  |  無  | 
|  KernelReady  |  KernelReady 指出核心是否正常運作，而不會發生嚴重錯誤、恐慌或資源耗盡。  |  30m  |  取代  | 
|  MemoryPressure  |  MemoryPressure 是標準 Kubernetes 條件，表示節點正經歷記憶體壓力 （可用的記憶體不足）。  |  N/A  |  無  | 
|  NetworkingReady  |  NetworkingReady 指出節點的網路堆疊是否正常運作 （介面、路由、連線能力）。  |  30m  |  取代  | 
|  StorageReady  |  StorageReady 指出節點的儲存子系統是否正常運作 （磁碟、檔案系統、I/O)。  |  30m  |  取代  | 
|  備妥  |  Ready 是標準 Kubernetes 條件，表示節點運作狀態良好且已準備好接受 Pod。  |  30m  |  取代  | 

在下列情況下，EKS 自動節點修復動作預設為停用。在每個案例中，進行中的節點修復動作都會繼續。如需如何覆寫這些預設設定[設定自動節點修復](#configure-node-repair)，請參閱 。

 **EKS 受管節點群組** 
+ 節點群組有超過五個節點，且節點群組中超過 20% 的節點運作狀態不佳。
+ 透過應用程式復原控制器 (ARC) 觸發叢集的區域轉移。

 **EKS 自動模式和 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`。您可以透過 CLI `--feature-gates` 選項或 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** – `--node-repair-config enabled=true`新增至 [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)命令。
+  **eksctl** – 設定 `managedNodeGroups.nodeRepairConfig.enabled: true`，請參閱 [eksctl GitHub](https://github.com/eksctl-io/eksctl/blob/main/examples/44-node-repair.yaml) 中的範例。

使用 EKS 受管節點群組時，您可以使用下列設定控制節點自動修復行為。

若要控制節點自動修復何時停止採取動作，請根據節點群組中運作狀態不佳的節點數目來設定閾值。設定絕對計數或百分比，但不能同時設定兩者。


| 設定 | Description | 
| --- | --- | 
|   `maxUnhealthyNodeThresholdCount`   |  節點自動修復停止運作狀態不佳的節點絕對數量。使用此項目來限制修復的範圍。  | 
|   `maxUnhealthyNodeThresholdPercentage`   |  節點自動修復停止運作狀態不佳的節點百分比 (0-100)。  | 

若要控制同時修復的節點數量，您可以設定修復平行處理。如同運作狀態不佳的節點閾值，請設定絕對計數或百分比，但不能同時設定兩者。


| 設定 | Description | 
| --- | --- | 
|   `maxParallelNodesRepairedCount`   |  要同時修復的節點數目上限。  | 
|   `maxParallelNodesRepairedPercentage`   |  要同時修復的不良節點百分比上限 (0-100)。  | 

使用 `nodeRepairConfigOverrides`，您可以針對特定條件自訂修復行為。當您需要不同的修復動作或不同問題類型的等待時間時，請使用此選項。

每個覆寫都需要下列所有欄位：


| 欄位 | Description | 
| --- | --- | 
|   `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 分鐘後重新啟動。