Azure Kubernetes Service (AKS) 中的節點集區版本復原功能可以讓您從 Kubernetes 升級後的意外行為中復原。 若發生問題,您可以將節點池回滾至先前的 Kubernetes 版本與節點映像組合,確保業務持續性並減少停機時間。 本文說明何時以及如何使用回滾功能、其功能與限制,以及回滾後的最佳實務。
先決條件
- Azure CLI 版本 2.88.0 或更新版本。 用指令
az --version找到你的版本。 如果你需要安裝或升級,請參考 安裝 Azure CLI。aks-preview擴充功能並非必要。 - API 版本
2026-04-01或更新版本。
節點集區版本回復支援的功能。
節點池版本回滾功能支援以下功能:
| 特徵 / 功能 | Description |
|---|---|
| 還原版本。 | 能將 Kubernetes 和 node 映像檔版本還原到原本的狀態。 |
| 手動扳機,自動執行 | 回滾需要手動啟動,但一旦觸發,系統會自動處理整個回滾過程,無需進一步介入。 |
| 節點池相容性 | 適用於所有類型的節點池,包括虛擬機(VM)池及基於 虛擬機器擴展集(VMSS)的節點池。 |
| 作業系統支援 | 相容於所有作業系統庫存單位(SKU),包括 Ubuntu、Azure Linux 及 Windows 池。 |
| 簡化流程 | 不需要進行快照管理。 |
節點池回滾限制與考量
使用節點池回滾功能時,請注意以下限制:
- 僅限版本變更。 其他節點集區變更不會還原。
- 回滾期間不允許進行並發操作。
- 你必須在回滾前停用 Kubernetes 自動升級通道。 如果啟用了 node OS 升級通道,Kubernetes 版本回滾可以繼續,但先前的節點映像可能無法還原。 當你需要回滾 Kubernetes 版本和 node 映像檔時,請關閉 node OS 升級通道。
- 升級完成後僅可使用七天。
- 無法連續回復以回到多個舊版本。
- 回滾不支援還原作業系統 SKU 變更。 如果你更改了節點池的作業系統 SKU(例如從 Ubuntu 改成 Azure Linux),回滾會嘗試還原屬於不同作業系統 SKU 的先前節點映像版本,但該版本會被拒絕。 若要還原作業系統 SKU 變更,請改用 指令
az aks nodepool update --os-sku。
使用節點池回滾時請留意以下幾點:
| 安全性隱含意義 | 作業考量 |
|---|---|
| * 弱點暴露:復原動作會從較新版本中移除安全性修補與更新。 因此,我們建議僅在解決問題期間暫時使用回復,並在問題解決後儘速重新升級。 |
*
服務中斷:回滾過程可能導致暫時性工作負載中斷。 * 資源可用性:確保回滾操作有足夠的容量。 * 測試需求:在再次嘗試升級前,請先解決根本問題。 |
為何使用回復。
回滾為生產環境提供了關鍵的恢復機制:
- 業務持續性:當升級引發意外問題時,盡量減少停機時間
- 風險緩解:快速恢復已知良好的配置,無需複雜的復原程序
- 簡化復原:避免手動介入或從備份重建叢集
何時應使用節點池回滾功能
在下列情況下,請考慮使用回滾作為您的復原選項:
- 升級失敗發生:基礎設施問題、資源限制或相容性問題阻礙升級成功。
- 應用程式故障:工作負載在較新的 Kubernetes 版本中會發生嚴重故障或資料損壞。
- 效能下降:新版本會導致無法接受的延遲、吞吐量問題或資源消耗。
- 測試缺口浮現:生產過程中出現未在生產前測試中發現的問題。
節點池回滾工作流程
下圖說明節點池回滾工作流程:
回滾過程會將節點池中的所有節點恢復到先前的版本狀態。 工作流程的關鍵面向包括:
- 全有或全無方式:所有節點都必須成功還原至先前版本,回復才會成功完成。 若任何節點未能回滾,整個操作即告失敗,以清楚傳達叢集狀態,類似升級操作。
- 進度追蹤:利用 Azure 活動記錄 監控回滾狀態,以查看操作歷史並使用 操作狀態 API 獲得即時更新。
回復節點集區版本。
這很重要
回復節點集區版本時,請注意下列資訊:
- 長期使用舊版本會增加安全風險,並可能因版本偏斜限制而最終阻礙升級。 將回滾視為暫時的恢復機制,而非永久解決方案。
- 回滾會替換節點池中的節點,並可能暫時干擾工作負載。 開始前,請確認你的工作負載有足夠的容量,且你的 Pod Disruption 預算是否允許所需的節點中斷。
- 使用 REST API 時,你可以先呼叫 Agent Pools - Get Upgrade Profile API,取得最近使用的版本。 請利用這些資訊在回滾請求中指定目標版本。
Azure CLI 回滾指令會自動選擇最近記錄的版本,也就是 N-1。 你不能用指令選擇任意的 Kubernetes 或節點映像版本,也不能連續回滾來逐步回復到更早的多個先前版本。
檢視叢集的自動升級設定。
az aks show \ --name myAKSCluster \ --resource-group myResourceGroup \ --query autoUpgradeProfile在回滾前關閉 Kubernetes 自動升級通道。 如果你需要還原之前的節點映像檔,也請停用節點作業系統升級通道。
使用
az aks nodepool get-rollback-versions指令檢視可用的回滾目標。az aks nodepool get-rollback-versions \ --name myNodePool \ --resource-group myResourceGroup \ --cluster-name myAKSCluster如果指令沒有回傳任何版本,表示該節點池沒有合格的回滾目標。 節點池必須已在過去七天內完成升級,且 AKS 仍支援已記錄的 Kubernetes 版本。
請使用
az aks nodepool rollback指令回滾節點池。az aks nodepool rollback \ --name myNodePool \ --resource-group myResourceGroup \ --cluster-name myAKSCluster回滾完成後,請確認 Kubernetes 版本、節點映像版本及配置狀態。
az aks nodepool show \ --name myNodePool \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --query '{provisioningState:provisioningState,kubernetesVersion:currentOrchestratorVersion,nodeImageVersion:nodeImageVersion}'成功的回滾針對
provisioningState會傳回Succeeded並顯示記錄的 Kubernetes 與節點映像版本。
如果你在回滾前更改了叢集的自動升級設定,調查並解決升級問題後,請恢復原本的設定。
監控節點池回滾狀態
您可以使用以下方法監控節點池回滾操作的狀態並驗證回滾是否成功:
- 查查你叢集的 活動日誌 。
- 查看你的集群上特定的升級相關事件。
- 訂閱AKS 事件並使用 Azure 事件方格。
- 如果你訂閱自動升級頻道,可以使用 AKS 通訊管理員 來接收升級通知。
排解節點池回滾問題
下表說明常見的回滾問題及其解決方法:
| Issue | 原因和解決方案 |
|---|---|
| 不會傳回任何回滾版本。 | 節點池可能沒有記錄到升級,七天回滾窗口可能已過期,或是先前的 Kubernetes 版本不再支援。 請查看節點池的升級歷史以及 AKS Kubernetes 版本支援政策。 |
| AKS報告另一項作業正在進行中。 | 等目前的叢集或節點池操作結束後再重新嘗試回滾。 如果你需要停止操作,請使用指令 az aks nodepool operation-abort 。 |
| Kubernetes 版本會回滾,但節點映像檔不會。 | Node OS 升級通道可能已經啟用。 當你需要還原之前的節點映像檔時,請停用該通道。 |
| AKS 會拒絕先前的節點映像版本。 | 節點池的作業系統 SKU 可能自記錄的版本以來有所變動。 回滾不支援還原作業系統 SKU 變更。 改用az aks nodepool update --os-sku來還原 OS SKU。 |
| AKS 會拒絕先前的 Kubernetes 版本。 | 已記錄的版本可能已經不再受到支援。 請查看 AKS Kubernetes 版本支援政策。 |
回復後最佳做法。
成功回復節點集區後,請使用下列最佳做法以確保穩定與安全:
- 調查根本原因:先找出升級失敗的原因,再嘗試下一次升級。 檢視申請日誌、資源指標及相容性要求。
- 非生產環境測試:在開發或暫存環境中驗證新版本,以重現並解決問題,然後再升級生產環境。
-
規劃你的重新升級:不要一直停留在回退版本上。 安排重新升級以維護安全補丁與支援:
- 針對關鍵安全問題:修補驗證後數日內重新升級。
- 針對應用程式相容性問題:程式碼調整後數週內重新升級。
- 建議最大期限:30天以避免累積安全漏洞。
常見問題集 (FAQ)
在節點池回滾期間,我可以執行其他操作嗎?
不,回滾操作必須先完成才能開始其他操作。 要執行不同操作,請先中止回滾。
節點集區回復是否會同時還原 Kubernetes 版本與節點映像?
是的,回復會還原至最近使用的 Kubernetes 版本及其對應的節點映像。 若兩個元件都更改,系統會恢復先前版本的 Kubernetes 版本,並使用該版本最後相容的節點映像檔。
我可以只還原節點映像檔,而不更改節點池版本嗎?
是的,如果你只在過去七天內更新過節點映像檔(且沒有升級節點池版本),回滾會恢復之前的虛擬硬碟(VHD)映像檔,同時維持相同的 Kubernetes 版本。
我可以回滾到已經不再支援的版本嗎?
不,你無法回滾到 AKS 不再支援的 Kubernetes 版本。 舉例來說,如果你的節點池是 1.27.9 版本(現在已停止支援),而你升級到 1.28.5,你無法回滾到 1.27.9,因為它已經不在支援版本清單中。 務必查看 AKS Kubernetes 版本支援政策 以確認版本可用性。
出於同樣的原因,平台發起的升級無法回滾。 當 AKS 將處於不受支援版本的叢集進行升級時,先前版本將不再可用。
我需要在執行節點池回滾前先關閉自動升級嗎?
是的,你必須在執行回滾前停用 Kubernetes 自動升級通道。 如果你只啟用 node OS 升級通道,Kubernetes 版本回滾可以繼續,但之前的節點映像可能無法恢復。 當你需要回滾 Kubernetes 版本和 node 映像檔時,請關閉 node OS 升級通道。
如果該叢集包含在 Azure Kubernetes Fleet Manager 自動升級設定檔中的某個更新群組中,你也必須在執行回滾前將該叢集從更新群組中移除。 否則,自動升級程序可能會在回滾完成後,再次自動升級您的節點池。
變更 OS SKU 後,是否可以復原 (例如從 Ubuntu 變更為 Azure Linux)?
否。 節點集區復原僅限於版本變更,無法復原 OS SKU 變更。 在從一個作業系統 SKU 遷移到另一個 SKU 後(例如從 Ubuntu 到 Azure Linux),先前的節點映像版本屬於舊的作業系統 SKU,與目前的配置不相容。 回滾操作會以類似以下錯誤的方式拒絕前一個映像版本:
NodeImageVersion 'AKSUbuntu-2204gen2containerd-202602.13.5' is not accepted. NodeImageVersion can only be current version 'AKSAzureLinux-V3gen2-202602.13.5' or 'latest'
要還原作業系統 SKU,請使用 az aks nodepool update 帶有參數的 --os-sku 指令。 如需詳細資訊,請參閱復原您的 OS 版本。
相關內容
欲了解更多關於 AKS 節點池升級的資訊,請參閱以下文章: