

 **協助改進此頁面** 

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

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

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

# 設定 AWS Fargate OS 修補事件的動作
<a name="fargate-pod-patching"></a>

Amazon EKS 會定期修補 AWS Fargate 節點的 OS 來確保節點的安全。作為修補程序的一部分，我們會回收節點以安裝作業系統修補程式。以對您的服務產生最小影響的方式嘗試更新。但是，如果未成功移出 Pod，有時必須將其刪除。您可以採取以下措施，以最大限度地減少潛在的中斷：
+ 設定適當的 Pod 中斷預算 (PDB)，以控制同時關閉的 Pod 數量。
+ 建立 Amazon EventBridge 規則，以便在刪除 Pod 之前處理失敗的移出事件。
+ 在您收到的通知中發布的移出日期之前，手動重新啟動受影響的 Pod。
+ 在 AWS 使用者通知中建立通知組態。

Amazon EKS 與 Kubernetes 社群密切合作，以盡快提供錯誤修復和安全修補程式。所有 Fargate Pod 均從最新的 Kubernetes 修補程式版本開始，該修補程式版本可從 Amazon EKS 取得，用於您叢集的 Kubernetes 版本。若您的 Pod 具有較舊的修補程式版本，Amazon EKS 可能會予以回收，以將其更新到最新版本。這可確保您的 Pod 配備了最新的安全更新。這樣，如果有一個關鍵 [Common Vulnerabilities and Exposures](https://cve.mitre.org/) (CVE) 問題，您將隨時了解最新資訊，以降低安全風險。

更新 AWS Fargate OS 時，Amazon EKS 會傳送通知給您，其中包括受影響的資源和即將移出 Pod 的日期。如果提供的移出日期不方便，您可以選擇在通知中發布的移出日期之前，手動重新啟動受影響的 Pod。在您收到通知之前建立的任何 Pod 都會被移出。如需如何手動重新啟動 Pod 的進一步指示，請參閱 [Kubernetes 文件](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_rollout/kubectl_rollout_restart)。

若要限制在回收 Pod 時同時關閉的 Pod 數量，您可以設定 Pod 中斷預算 (PDB)。您可以使用 PDB 根據每個應用程式的要求定義最低可用性，同時仍允許進行更新。PDB 的最低可用性必須小於 100%。如需詳細資訊，請參閱 Kubernetes 文件中的[為應用程式指定中斷預算](https://kubernetes.io/docs/tasks/run-application/configure-pdb/)。

Amazon EKS 使用[移出 API](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/#eviction-api) 以安全地消耗 Pod，同時尊重您為應用程式設定的 PDB。可用區域將 Pod 移出，以最大限度地減少影響。如果移出成功，新 Pod 將會取得最新的修補程式，且無須採取進一步的動作。

當 Pod 的移出失敗時，Amazon EKS 會向您的帳戶傳送一個事件，其中包含有關移出失敗的 Pod 的詳細資訊。您可以在計劃終止時間之前對訊息執行操作。具體時間根據修補程式的緊迫性而有所不同。到了該時間時，Amazon EKS 會再次嘗試移出 pod。但是，這次如果移出失敗，則不會傳送新事件。如果移出再次失敗，則會定期刪除現有的 Pod，以便新 Pod 具有最新的修補程式。

以下是當 Pod 移出失敗時收到的範例事件。其中包含有關叢集、Pod 名稱、Pod 命名空間、Fargate 設定檔和計劃終止時間的詳細資訊。

```
{
    "version": "0",
    "id": "12345678-90ab-cdef-0123-4567890abcde",
    "detail-type": "EKS Fargate Pod Scheduled Termination",
    "source": "aws.eks",
    "account": "111122223333",
    "time": "2021-06-27T12:52:44Z",
    "region": "region-code",
    "resources": [
        "default/my-database-deployment"
    ],
    "detail": {
        "clusterName": "my-cluster",
        "fargateProfileName": "my-fargate-profile",
        "podName": "my-pod-name",
        "podNamespace": "default",
        "evictErrorMessage": "Cannot evict pod as it would violate the pod's disruption budget",
        "scheduledTerminationTime": "2021-06-30T12:52:44.832Z[UTC]"
    }
}
```

此外，將多個 PDB 與 Pod 關聯可能會導致移出失敗事件。此事件傳回以下錯誤訊息。

```
"evictErrorMessage": "This pod has multiple PodDisruptionBudget, which the eviction subresource does not support",
```

您可以根據此事件建立所需的動作。例如，您可以調整 Pod 中斷預算 (PDB)，以控制如何移出 Pod。更具體地說，假設您從指定可用 Pod 的目標百分比的 PDB 開始。在升級期間強制終止 Pod 之前，您可以將 PDB 調整為不同百分比的 Pod。若要接收此事件，您必須在叢集所屬的 AWS 帳戶和 AWS 區域中建立 Amazon EventBridge 規則。規則必須使用以下**自訂模式**。如需詳細資訊，請參閱*《Amazon EventBridge 使用者指南》*中的[建立對事件做出反應的 Amazon EventBridge 規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html)。

```
{
  "source": ["aws.eks"],
  "detail-type": ["EKS Fargate Pod Scheduled Termination"]
}
```

可以為事件設定合適的目標以進行擷取。如需可用目標的完整清單，請參閱*《Amazon EventBridge 使用者指南》*中的 [Amazon EventBridge 目標](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html)。您也可以在 AWS 使用者通知中建立通知組態。使用 AWS 管理主控台 建立通知時，請在**事件規則**下，選擇 **Elastic Kubernetes Service (EKS)** 作為 **AWS 服務名稱**，並選擇 **EKS Fargate Pod 排程終止** 作為**事件類型**。如需詳細資訊，請參閱《AWS 使用者通知使用者指南》中的 [AWS 使用者通知入門](https://docs.aws.amazon.com/notifications/latest/userguide/getting-started.html)。

如需有關 EKS Pod 移出的常見問答集，請參閱 * AWS re:Post* 中的[常見問答集：Fargate Pod 移出通知](https://repost.aws/knowledge-center/fargate-pod-eviction-notice)。