協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
設定 AWS Fargate OS 修補事件的動作
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
更新 AWS Fargate OS 時,Amazon EKS 會傳送通知給您,其中包括受影響的資源和即將移出 Pod 的日期。如果提供的移出日期不方便,您可以選擇在通知中發布的移出日期之前,手動重新啟動受影響的 Pod。在您收到通知之前建立的任何 Pod 都會被移出。如需如何手動重新啟動 Pod 的進一步指示,請參閱 Kubernetes 文件
若要限制在回收 Pod 時同時關閉的 Pod 數量,您可以設定 Pod 中斷預算 (PDB)。您可以使用 PDB 根據每個應用程式的要求定義最低可用性,同時仍允許進行更新。PDB 的最低可用性必須小於 100%。如需詳細資訊,請參閱 Kubernetes 文件中的為應用程式指定中斷預算
Amazon EKS 使用移出 API
當 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 規則。
{ "source": ["aws.eks"], "detail-type": ["EKS Fargate Pod Scheduled Termination"] }
可以為事件設定合適的目標以進行擷取。如需可用目標的完整清單,請參閱《Amazon EventBridge 使用者指南》中的 Amazon EventBridge 目標。您也可以在 AWS 使用者通知中建立通知組態。使用 AWS 管理主控台 建立通知時,請在事件規則下,選擇 Elastic Kubernetes Service (EKS) 作為 AWS 服務名稱,並選擇 EKS Fargate Pod 排程終止 作為事件類型。如需詳細資訊,請參閱《AWS 使用者通知使用者指南》中的 AWS 使用者通知入門。
如需有關 EKS Pod 移出的常見問答集,請參閱 AWS re:Post 中的常見問答集:Fargate Pod 移出通知