升級 Azure Kubernetes Service (AKS) 叢集控制平面

Azure Kubernetes Service(AKS)叢集主要由兩個元件組成: 由 Azure 管理的控制平面 ,以及 工作負載運行的節點池。 本文著重於獨立升級控制平面,讓你能採用新的 Kubernetes 版本以提供 API 伺服器功能,同時獨立管理節點池升級。

開始之前

  • 如果您使用 Azure CLI,本文會要求您使用 Azure CLI 2.34.1 以上版本。 使用指令 az --version 來尋找版本。 如果您需要安裝或升級,請參閱 安裝 Azure CLI。
  • 如果您使用 Azure PowerShell,本文會要求您執行 Azure PowerShell 5.9.0 以上版本。 用 Get-InstalledModule -Name Az cmdlet 找出版本。 如果您需要安裝或升級,請參閱安裝 Azure PowerShell。
  • 要執行升級操作,你需要 Azure Kubernetes Service 貢獻者角色或等效權限。
  • 當你升級到 Kubernetes 1.30 和 1.27 LTS 版本時,Beta API 預設會被停用。

警告

升級前務必確保你的運算配額足夠。 如果配額不足,升級可能會失敗。 如需詳細資訊,請參閱增加配額。

AKS 升級類型概述

下表列出三種 AKS 升級類型,重點說明其範圍與使用案例:

升級類型 Scope 用例
僅限控制平面 API 伺服器、ETCD、控制器管理器、排程器 升級工作負載前先測試新的 Kubernetes API
完整叢集 控制平面與所有節點池 標準升級以保持叢集的更新
僅限節點池 特定節點池 控制平面升級後的分段推出

小提示

先升級控制平面,可以讓你在影響執行工作負載前,先驗證 Kubernetes API 的相容性。 關於節點池升級策略,請參見 「配置滾動升級」。

Kubernetes 版本升級規則

當你升級支援的非 LTS AKS 叢集時,無法跳過 Kubernetes 的小型版本。 您必須依次要版本號碼循序執行所有升級。 例如,允許在 1.28.x 到>1.29.x 或 1.29.x 到>1.30.x 之間升級。 1.28.x 到>1.30.x 是不允許的。

LTS 叢集在升級至 AKS 提供較高的 LTS 版本時,若升級符合版本偏差要求與驗證檢查,則可跳過次要版本。 更多資訊請參閱: 我可以在叢集升級時跳過多個 AKS 版本嗎?。

從 Kubernetes 1.28 開始,控制平面最多可以比節點池高出三個小版本。 舉例來說,如果你的控制平面是 1.35.x,你的節點池可以是 1.32.x、 1.33.x、 1.34.x 或 1.35.x。 關於目前的限制,請參見 AKS 版本偏斜策略。

檢查可用的 AKS 升級

小提示

欲掌握最新的 AKS 發布與更新,請參閱 AKS 發布追蹤器。

請使用指令 az aks get-upgrades 查詢 AKS 叢集可用的 Kubernetes 版本。

az aks get-upgrades --resource-group <resource-group-name> --name <cluster-name> --output table

下列範例輸出顯示目前的版本為 1.28.9,並列出 upgrades 下出可用的版本:

Name     ResourceGroup          MasterVersion    Upgrades
-------  ---------------        ---------------  --------------
default  <resource-group-name>  1.28.9           1.29.2, 1.29.4

只升級 AKS 控制平面

Important

啟用 叢集自動升級 時,無法只在控制平面進行升級。 叢集自動升級總是會同時升級控制平面和所有節點池。

  1. 用 az aks upgrade 帶有 --control-plane-only 旗幟的指令升級控制平面。 以下範例將控制平面升級至 Kubernetes 版本 1.29.4:

    az aks upgrade \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --kubernetes-version 1.29.4 \
        --control-plane-only
    
  2. 請用指令 az aks show 確認控制平面升級成功。

    az aks show --resource-group <resource-group-name> --name <cluster-name> --output table
    

    以下範例輸出顯示控制平面現在運行為 1.29.4:

    Name            Location    ResourceGroup          KubernetesVersion    ProvisioningState    Fqdn
    ------------    ----------  ---------------        -------------------  -------------------  ------------------------------------------------
    <cluster-name>  eastus      <resource-group-name>  1.29.4               Succeeded            <cluster-name>-dns-123abcd4.hcp.eastus.azmk8s.io
    
  3. 請用指令 az aks nodepool list 確認節點池的版本沒有被更改。

    az aks nodepool list --resource-group <resource-group-name> --cluster-name <cluster-name> --query "[].{Name:name,Version:orchestratorVersion}" --output table
    

    在輸出中,節點池應該仍顯示先前的 Kubernetes 版本。

升級完整的 AKS 叢集

備註

在完整叢集升級過程中,AKS 會先升級控制平面,然後依序升級每個節點池。 欲了解更多節點池升級控制,請參閱 「配置滾動升級」。

用指令 az aks upgrade 升級整個叢集(控制平面和所有節點池)。 以下範例將叢集升級至 Kubernetes 版本 1.29.4:

az aks upgrade \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --kubernetes-version 1.29.4

AKS 控制平面升級常見問題(FAQ)

僅控制平面的升級也會升級節點池嗎?

否。 僅控制平面的升級不會改變節點池。 叢集自動升級 的運作方式不同:它不支援僅控制平面的升級,而是將控制平面和所有節點池一起升級。

我可以在控制平面之前先升級節點池嗎?

否。 控制平面版本必須始終等於或大於任何節點池版本。 你必須先升級控制平面。

控制平面升級需要多久時間?

升級時間會依叢集狀態和 Azure 條件而異。 監控 provisioningState 使用或 az aks showGet-AzAksCluster。 當配置狀態為 Succeeded時,升級即完成。

解決控制平面升級問題

沒有升級選項

對於未支援的叢集,請用來 az aks get-upgrades 檢查 AKS 是否提供符合資格的支援目標。 若有目標可用,則進行全叢集升級。 此恢復路徑不支援僅控制平面的升級。

如果沒有可用的目標,你的叢集可能已經是最新版本。 如果叢集運行的是不支援的版本,請建立一個支援版本的新叢集並遷移你的工作負載。

由於 API 已過時,升級失敗

升級前,請使用 kube-no-trouble(kubent)等工具檢查是否有已棄用的 API:

kubent

此指令會掃描透過目前 kubeconfig 上下文存取的資源,尋找已棄用的 Kubernetes API 版本。 輸出依 Kubernetes 版本將發現分組,並依 、 NAMESPACE、 NAMEAPI_VERSION、 及 來識別每個受影響的資源KIND。 升級前,更新每個列出資源的原始碼清單,使其使用支援的 API 版本。