協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
回復 EKS Auto Mode 叢集
當您在執行 EKS Auto Mode 的叢集上啟動版本轉返時,Amazon EKS 會在還原控制平面之前自動管理自動模式工作者節點的轉返。本頁說明自動模式節點復原的運作方式、加速方式,以及視需要取消的方式。
如需版本轉返的一般資訊,包括先決條件、洞見檢查和整體轉返程序,請參閱 將叢集轉返至先前的 Kubernetes 版本。
自動模式轉返的運作方式
EKS Auto Mode 使用 Karpenter 型系統來管理工作者節點基礎設施,包括 Kubernetes 版本升級和轉返。當您UpdateClusterVersion在啟用自動模式的叢集上使用先前的 (N-1) 版本呼叫 時,EKS 會執行下列順序:
-
驗證先決條件並重新整理回復整備洞察。
-
使用 Karpenter 型系統將節點漂向所需的轉返版本,遵守設定的中斷控制。
-
在所有節點都位於所需轉返版本的 Kubernetes 版本扭曲政策中之後,EKS 會重新檢查洞見並繼續控制平面轉返。
控制平面會保留在目前 (較新) 版本上,並在節點轉返時繼續正常提供流量。Kubernetes 版本扭曲政策允許節點執行比 kube-apiserver 最多三個較舊的次要版本,因此此中繼狀態有效。
注意
您可以使用 中所述的相同 API 和程序來觸發轉返將叢集轉返至先前的 Kubernetes 版本。自動模式節點復原沒有單獨的 API。
注意
節點復原階段 (步驟 2) 可能需要幾分鐘到 7 天,視您的中斷控制而定。如果節點復原未在設定的逾時內完成,則更新會標記為失敗。
注意
當復原正在進行時,會封鎖其他客戶觸發的控制平面更新。若要執行不同的更新,請先使用 CancelUpdate API 取消轉返。
復原期間的叢集狀態
| 階段 | 叢集狀態 | 發生了什麼事 |
|---|---|---|
|
節點復原進行中 |
ACTIVE |
Karpenter 正在將節點取代為舊版 AMI。控制平面運作狀態良好,可為目前版本的流量提供服務。 |
|
控制平面轉返 |
UPDATING |
API 伺服器和控制平面元件正在還原至先前的版本。 |
|
復原完成 |
ACTIVE |
叢集完全位於舊版上。 |
叢集狀態會在節點復原階段ACTIVE保持。使用 ListUpdates或 DescribeUpdate 來判斷是否正在進行轉返。在 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。
取消之後,您可以立即:
-
重試轉返 (只要您仍在 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
如果所有節點未在指定的逾時內完成轉返:
-
轉返逾時。
-
節點開始漂移回目前的叢集版本。
-
控制平面會保留在目前版本 (從未復原)。
-
更新狀態會轉換為
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,然後執行更新,如果仍在資格時段內,則重新啟動轉返。