Azure Kubernetes Service (AKS) 叢集的升級選項
本文涵蓋 AKS 叢集的不同升級選項。 若要執行基本的 Kubernetes 版本升級,請參閱升級 AKS 叢集。
若為使用多個節點集區或 Windows 伺服器節點的 AKS 叢集,請參閱在 AKS 中升級節點集區 (機器翻譯)。 若要升級特定節點集區而不執行 Kubernetes 叢集升級,請參閱升級特定節點集區。
執行手動升級
您可以執行手動升級來控制叢集升級至新的 Kubernetes 版本的時機。 當您想要在升級生產叢集之前測試新的 Kubernetes 版本時,手動升級十分實用。 您也可以使用手動升級,將叢集升級至非最新可用版本的特定 Kubernetes 版本。
若要執行手動升級,請參閱下列文章:
設定自動升級
您可以設定自動升級,將叢集自動升級至最新的可用 Kubernetes 版本。 當您想要確保叢集一律執行最新的 Kubernetes 版本時,自動升級十分實用。 您也可以使用自動升級來確保叢集一律執行支援的 Kubernetes 版本。
若要設定自動升級,請參閱下列文章:
- 自動升級 AKS 叢集
- 使用計劃性維護來排程和控制 AKS 叢集的升級
- 在 API 中斷性變更時自動停止 AKS 叢集升級 (預覽)
- 自動升級 AKS 叢集節點作業系統映像
- 使用 GitHub Actions 自動將安全性更新套用至 AKS 節點
跨多個可用性區域的節點集區特殊考量
AKS 在節點群組中使用盡力區域平衡。 在升級激增期間,虛擬機器擴展集中的激增節點區域事先未知,這可能會在升級期間暫時造成不平衡的區域設定。 但 AKS 會在升級完成後刪除激增節點,並保持原始區域平衡。 如果您想要在升級期間保持區域平衡,您可以將激增增加至三個節點的倍數,而虛擬機器擴展集會使用最佳區域平衡在跨可用性區域平衡節點。 若使用最佳區域平衡,擴展集會嘗試縮減或擴增以維持平衡。 不過,如果基於某些原因,這是不可能的(例如,如果某個區域關閉,擴展集就無法在該區域中建立新的 VM),擴展集可讓暫時性不平衡成功相應縮小或相應放大。
如果您有 Azure 本地備援儲存體 (LRS) 資料箱磁碟支援的永續性磁碟區宣告 (PVC),它們會綁定特定區域,且如果激增節點不符合 PVC 的區域,可能無法立即復原。 若區域不符合,當升級作業繼續清空節點但 PV 綁定區域時,這可能會造成應用程式停機。 若要處理此案例並維持高可用性,請在您的應用程式上設定 Pod 中斷預算,以允許 Kubernetes 在清空作業期間遵守可用性需求。
針對無法透支的節點行為進行優化 (預覽)
您可以設定清空失敗的升級程序行為。 默認升級行為是 Schedule
,其中包含導致升級作業失敗的節點清空失敗,使未執行節點處於可排程狀態。 或者,您可以選取 Cordon
行為,這會略過無法清空的節點,方法是將其置於隔離狀態、加上 kubernetes.azure.com/upgrade-status:Quarantined
標籤,然後繼續升級其餘節點。 此行為可確保所有節點都已升級或隔離。 此方法可讓您針對清空失敗進行疑難解答,並正常管理隔離的節點。
如何? 設定新的 Cordon 行為嗎?
使用 CLI 預覽並安裝 aks-preview
延伸模組 9.0.0b3 或更新版本。
您可以使用下列命令來更新或安裝 aks-preview
擴充功能:
az extension update --name aks-preview
az extension add --name aks-preview
將節點集區無法透支的節點行為更新為 Cordon
:
az aks nodepool update --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --resource-group $RESOURCE_GROUP --max-surge 1 --undrainable-node-behavior Cordon
下列範例輸出顯示更新了無法透支的節點行為:
"upgradeSettings": {
"drainTimeoutInMinutes": null,
"maxSurge": "1",
"nodeSoakDurationInMinutes": null,
"undrainableNodeBehavior": "Cordon"
}
確認任何已封鎖節點上的標籤。 使用下列命令在升級時發生清空節點失敗:
kubectl get nodes --show-labels=true
已封鎖的節點會針對Pod取消排程,並以標籤 "kubernetes.azure.com/upgrade-status: Quarantined"
示。 可被封鎖的節點數目上限不能超過 Max-Surge
值。
如何? 移除封鎖的節點嗎?
首先解決造成清空的問題。 下列範例會移除負責任的 PDB:
kubectl delete pdb nginx-pdb
poddisruptionbudget.policy "nginx-pdb" deleted.
然後使用 命令刪除封鎖的節點 az aks nodepool delete-machines
。 如果您想要藉由移除舊版中留下的節點來減少節點集區使用量,此命令會很有用。
az aks nodepool delete-machines --cluster-name MyCluster --machine-names aks-nodepool1-test123-vmss000000 --name nodepool1 --resource-group TestRG
完成此步驟之後,您可以執行任何更新作業來協調叢集狀態,而不需要此處所述的選擇性字段。
範例 命令:
az aks update --resource-group TestRG --name MyCluster
或者,您可以將節點集區調整為與升級節點計數相同的節點數目。 此動作可確保節點集區達到其預定的原始大小。 AKS 會優先移除已封鎖的節點。 這個指令也會將叢集布建狀態還原至 Succeeded
。 在指定的範例中, 2
是升級的節點總數。
az aks nodepool scale --resource-group TestRG --cluster-name MyCluster --name nodepool1 --node-count 2
最佳化升級以改善效能,並將中斷降至最低
計劃性維護期間、最大激增、Pod 中斷預算、節點清空逾時以及節點測試時間的組合可能會大幅提高節點升級在維護期間結束時成功完成的可能性,同時將中斷降至最低。
- 計劃性維護期間可讓服務小組在預先定義的時段內排程自動升級,通常是低流量期間,以將工作負載影響降到最低。 我們建議至少四個小時的時間範圍。
- 節點集區上的 最大激增允許在升級流程期間要求額外的配額,並限制同時選取升級的節點數目。 較高的最大激增會使升級流程更快速。 我們不建議將它設定為 100%,因為它會同時升級所有節點,這可能會導致執行中的應用程式中斷。 針對生產節點集區,我們建議將最大激增設定為 33%。
- Pod 中斷預算是針對服務應用程式所設定,並限制在自發性中斷期間可關閉的 Pod 數目,例如 AKS 控制的節點升級。 它可以設定為
minAvailable
複本,指出需要作用的應用程式 Pod 數目下限,或maxUnavailable
複本,指出可以終止的應用程式 Pod 數目上限,確保應用程式的高可用性。 請參閱設定 Pod 中斷預算 (PDB) 所提供的指引。 PDB 值應該經過驗證,以判斷最適合您特定服務的設定。 - 節點集區上的節點清空逾時可讓您設定在升級期間收回 Pod 和正常終止每個節點的等候持續時間。 處理長時間執行的工作負載時,此選項十分實用。 指定節點清空逾時 (以分鐘為單位) 時,AKS 會遵守等候 Pod 中斷預算。 如果未指定,則預設逾時時間為 30 分鐘。
- 節點測試時間會以受控制的方式協助錯開節點升級,並可將升級期間的應用程式停機時間降到最低。 您可以指定等候時間,最好盡量合理地接近 0 分鐘,以檢查節點升級之間的應用程式整備程度。 如果未指定,則預設值是 0 分鐘。 節點測試時間與節點集區中可用的最大激增和節點清空逾時屬性搭配運作,以在升級速度和應用程式可用性方面提供正確的結果。
下一步
本文列出 AKS 叢集的不同升級選項。 如需升級最佳做法和其他考量的詳細討論,請參閱 AKS 修補檔和升級指導。