View a markdown version of this page

回復 EKS Auto Mode 叢集 - Amazon EKS

協助改進此頁面

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

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

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

回復 EKS Auto Mode 叢集

當您在執行 EKS Auto Mode 的叢集上啟動版本轉返時,Amazon EKS 會在還原控制平面之前自動管理自動模式工作者節點的轉返。本頁說明自動模式節點復原的運作方式、加速方式,以及視需要取消的方式。

如需版本轉返的一般資訊,包括先決條件、洞見檢查和整體轉返程序,請參閱 將叢集轉返至先前的 Kubernetes 版本

自動模式轉返的運作方式

EKS Auto Mode 使用 Karpenter 型系統來管理工作者節點基礎設施,包括 Kubernetes 版本升級和轉返。當您UpdateClusterVersion在啟用自動模式的叢集上使用先前的 (N-1) 版本呼叫 時,EKS 會執行下列順序:

  1. 驗證先決條件並重新整理回復整備洞察。

  2. 使用 Karpenter 型系統將節點漂向所需的轉返版本,遵守設定的中斷控制。

  3. 在所有節點都位於所需轉返版本的 Kubernetes 版本扭曲政策中之後,EKS 會重新檢查洞見並繼續控制平面轉返。

控制平面會保留在目前 (較新) 版本上,並在節點轉返時繼續正常提供流量。Kubernetes 版本扭曲政策允許節點執行比 kube-apiserver 最多三個較舊的次要版本,因此此中繼狀態有效。

注意

您可以使用 中所述的相同 API 和程序來觸發轉返將叢集轉返至先前的 Kubernetes 版本。自動模式節點復原沒有單獨的 API。

注意

節點復原階段 (步驟 2) 可能需要幾分鐘到 7 天,視您的中斷控制而定。如果節點復原未在設定的逾時內完成,則更新會標記為失敗。

注意

當復原正在進行時,會封鎖其他客戶觸發的控制平面更新。若要執行不同的更新,請先使用 CancelUpdate API 取消轉返。

復原期間的叢集狀態

階段 叢集狀態 發生了什麼事

節點復原進行中

ACTIVE

Karpenter 正在將節點取代為舊版 AMI。控制平面運作狀態良好,可為目前版本的流量提供服務。

控制平面轉返

UPDATING

API 伺服器和控制平面元件正在還原至先前的版本。

復原完成

ACTIVE

叢集完全位於舊版上。

叢集狀態會在節點復原階段ACTIVE保持。使用 ListUpdatesDescribeUpdate 來判斷是否正在進行轉返。在 Amazon EKS 主控台中,導覽至您的叢集並開啟更新歷史記錄索引標籤,以檢視與復原相關聯的更新 ID 狀態。

若要在復原期間追蹤個別節點進度,請檢查自動模式節點的 Kubernetes 版本:

kubectl get nodes -l karpenter.sh/nodepool=<nodepool-name> -o wide

中斷控制

自動模式轉返會遵守所有現有的中斷控制。這些控制項會決定節點的取代速度,並可能大幅影響復原持續時間。

NodePool 中斷預算

NodePool 中斷預算可控制可同時中斷的節點數量。在復原期間,Karpenter 在將節點漂移至先前版本時遵守這些預算。

  • 漂移區塊無限期轉返nodes: 0的預算。這會觸發 ERROR 洞見。

  • 限制性預算 (例如 nodes: 1) 會減慢轉返速度,但允許轉返進度。

具有中斷預算的範例 NodePool,允許一次取代 10% 的節點:

apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: default spec: disruption: budgets: - nodes: "10%" reasons: - Drifted

如需設定 NodePool 中斷預算的詳細資訊,請參閱為 EKS Auto Mode 建立節點集區和 Karpenter 中斷預算

PodDisruptionBudgets

Kubernetes PodDisruptionBudgets 會在節點取代期間接受。如果 PDB 防止 Pod 移出,節點中斷會延遲至 TerminationGracePeriod。

  • 具有maxUnavailable: 0延遲節點中斷PDBs。這會觸發警告洞察。

  • PDBs不會永久封鎖轉返,但可能會大幅降低轉返速度。

如需詳細資訊,請參閱使用 PDB 保護關鍵工作負載Kubernetes PDB 文件

Do-not-disrupt註釋

karpenter.sh/do-not-disrupt 註釋可以在節點或 Pod 上設定:

在節點上:無限期地封鎖節點中斷。這會觸發 ERROR 洞見,且必須先移除,才能在該節點上繼續轉返。

在 Pod 上:將節點中斷延遲至 TerminationGracePeriod。這會觸發警告洞察,但不會永久封鎖轉返。

如需 Karpenter 中斷行為的詳細資訊,請參閱 Karpenter 中斷文件

加速轉返

如果回復時間超過預期,您可以在回復進行時調整中斷控制。

增加 NodePool 中斷預算

編輯 NodePool 資源以允許更多並行節點替換:

kubectl edit nodepool default

將預算變更為較高的值:

spec: disruption: budgets: - nodes: "50%" reasons: - Drifted

從節點移除do-not-disrupt註釋

列出具有註釋的節點並將其移除:

# List nodes with the annotation kubectl get nodes -o json | jq '.items[] | select(.metadata.annotations["karpenter.sh/do-not-disrupt"] == "true") | .metadata.name' # Remove from a specific node kubectl annotate node <node-name> karpenter.sh/do-not-disrupt-

調整 PodDisruptionBudgets

如果 PDBs 正在減緩 Pod 移出速度,請暫時調整它們:

kubectl edit pdb <pdb-name> -n <namespace>
警告

調整中斷控制會影響您的應用程式可用性保證。在生產環境中進行變更之前,請務必了解影響。

如需管理中斷控制的詳細資訊,請參閱在 Amazon EKS Auto 模式下防止 Pod 和節點中斷

取消轉返

只有在節點復原時,復原才會處於可取消狀態。您可以在此階段使用 CancelUpdate 來停止操作。

aws eks cancel-update \ --name my-cluster \ --update-id <update-id> \ --region us-west-2

取消行為

面向 Behavior (行為)

當 可取消時

只有在自動模式節點正在復原時 (在控制平面復原開始之前)

語意學

盡最大努力停止。停止節點復原操作。

中斷中節點

如果節點在取消時間中斷中,則會完成其目前的操作。

取消後狀態

更新從 Cancelling到 的轉換Cancelled

叢集狀態

會保留ACTIVE整個 。

取消之後

成功取消後,節點會照常漂向目前的叢集版本。更新會從 轉換為 Cancelling Cancelled

取消之後,您可以立即:

  • 重試轉返 (只要您仍在 7 天的資格時段內)。

  • 執行不同的叢集更新。

  • 將叢集維持在目前版本上。

當無法取消時

如果節點轉返已完成且控制平面轉返已開始,或者更新已完成,或者Failed狀態為 Successful或 ,則取消會失敗。

注意

CloudFormation 和 Terraform 不支援 CancelUpdate API。如果您需要取消透過 IaC 啟動的轉返,您必須直接呼叫 API。

轉返逾時

自動模式節點復原具有由 中的 timeoutMinutes 參數控制的可設定逾時rollbackConfig。預設逾時為 720 分鐘 (12 小時)。您可以設定介於 120 分鐘 (2 小時) 到 10080 分鐘 (7 天) 之間的值。逾時是最小限制屬性,表示它不會比您指定的時間更早發生,但會在之後不久發生。

aws eks update-cluster-version \ --name my-cluster \ --kubernetes-version 1.30 \ --rollback-config timeoutMinutes=1440 \ --region us-west-2

如果所有節點未在指定的逾時內完成轉返:

  1. 轉返逾時。

  2. 節點開始漂移回目前的叢集版本。

  3. 控制平面會保留在目前版本 (從未復原)。

  4. 更新狀態會轉換為 Failed

在逾時之後,如果您仍在原始升級的 7 天復原資格時段內,您可以重試復原。實際上,如果節點在第 7 天轉返逾時,則轉返資格時段可能也已過期,因為兩者都是 7 天。

若要避免逾時,請在啟動轉返之前檢閱轉返整備洞察。這些洞察會警告可能會減慢節點復原程序的中斷預算或註釋。

--force 旗標和 Auto 模式

上的 --force旗標UpdateClusterVersion只會略過叢集洞見檢查。它不會影響自動模式節點中斷行為。

即使使用 --force

  • 仍會遵守 NodePool 中斷預算。

  • 仍會遵守 PodDisruptionBudgets。

  • 仍會遵守Do-not-disrupt註釋。

  • 7 天的節點復原逾時仍然適用。

加速節點復原的唯一方法是自行調整中斷控制。如需詳細資訊,請參閱 加速轉返

IaC 逾時衝突

Infrastructure-as-Code工具有逾時限制,可能與自動模式轉返持續時間衝突。CloudFormation 每個資源最多允許 36 小時。如果操作逾時,CloudFormation 會將其視為無操作,這會讓叢集處於偏離狀態,其中範本不會反映實際的叢集版本。必須明確啟動版本轉返。Terraform Enterprise/Cloud 有大約 24 小時的逾時,但用戶端逾時可能會因憑證過期和其他因素而有所不同。

若要將轉返持續時間與您的 IaC 工具保持一致,請使用 中的 timeoutMinutes 參數rollbackConfig來設定適當的逾時。如果您的 IaC 工具逾時,請直接使用 CancelUpdate API 重新取得控制權。如果您有限制性的中斷預算,請考慮直接透過 CLI 或 API 而非 IaC 啟動轉返。

節點復原期間的系統更新

當自動模式節點轉返時,EKS 會繼續保持控制平面的安全和可用性。

節點復原進行中時,會封鎖客戶觸發的更新 (例如 UpdateClusterVersion 或 UpdateClusterConfig)。如果您需要執行高優先順序更新,請先使用 取消轉返CancelUpdate,然後執行更新,如果仍在資格時段內,則重新啟動轉返。