教學課程 - 升級 Azure Kubernetes Service (AKS) 叢集

在應用程式和叢集生命週期內,您可能會想要升級至 Kubernetes 的最新可用版本。 您可以使用 Azure CLI、Azure PowerShell 或Azure 入口網站,升級 Azure Kubernetes Service (AKS) 叢集。

在本教學課程中,您會升級 AKS 叢集。 您將學習如何:

  • 識別目前和可用的 Kubernetes 版本。
  • 升級 Kubernetes 節點。
  • 驗證升級成功。

開始之前

在先前的教學課程中,您已將應用程式封裝到容器映像,並將容器映像上傳至 Azure Container Registry (ACR)。 您也會建立 AKS 叢集,並將應用程式部署至該叢集。 如果您尚未完成這些步驟,並且想要跟著做,請從教學課程 1 - 準備 AKS 的應用程式開始。

如果欲使用 Azure CLI,則本教學課程需要 Azure CLI 2.34.1 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。

如果使用 Azure PowerShell,本教學課程需要 Azure PowerShell 5.9.0 版或更新版本。 執行 Get-InstalledModule -Name Az 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure PowerShell。

要升級 AKS 叢集,你需要 Azure Kubernetes Service 貢獻者角色或同等權限。

升級前,請先閱讀 AKS 發布說明 中的破壞性變更和已棄用的 API。 同時驗證你的工作負載的 Pod 中斷預算(PDB)、可用運算配額,以及突波節點的子網 IP 容量。 欲了解更多資訊,請參閱 AKS 叢集的升級選項與建議。

使用 Azure CLI 取得可用的叢集版本

升級前,請使用 az aks get-upgrades 指令確認叢集可用的 Kubernetes 版本。

az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster

以下範例輸出顯示叢集目前版本,並列出較新的版本:upgrades

  {
    "agentPoolProfiles": null,
    "controlPlaneProfile": {
      "kubernetesVersion": "1.33.7",
      ...
      "upgrades": [
        {
          "isPreview": null,
          "kubernetesVersion": "1.34.10"
        },
        {
          "isPreview": null,
          "kubernetesVersion": "1.34.9"
        }
      ]
    },
    ...
  }

使用 Azure PowerShell 取得可用的叢集版本

  1. 升級前,請用 Get-AzAksCluster cmdlet 檢查叢集目前的 Kubernetes 版本和區域。

    Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster |
      Select-Object -Property Name, CurrentKubernetesVersion, Location
    

    以下範例輸出顯示叢集目前的版本與位置:

    Name              CurrentKubernetesVersion      Location
    ----              ------------------------      --------
    myAKSCluster      1.33.7                        westus2
    
  2. 使用 Get-AzAksVersion cmdlet 列出你的叢集所在區域中可用的 Kubernetes 發行版本。

    Get-AzAksVersion -Location westus2 | Where-Object OrchestratorVersion
    

    以下範例輸出顯示了 OrchestratorVersion 下方的區域版本:

    Default     IsPreview     OrchestratorType     OrchestratorVersion
    -------     ---------     ----------------     -------------------
                              Kubernetes               1.34.10
                              Kubernetes               1.34.9
    True                      Kubernetes               1.33.7
    ...
    

    為了識別潛在的升級目標,請將叢集目前版本更新的版本與 Kubernetes 版本升級規則進行比較。 這個指令檔列出區域可用性,並不會驗證特定叢集的升級路徑。

透過 Azure 入口網站取得可用的叢集版本

  1. 登入 Azure 入口網站。

  2. 前往您的 AKS 資源群組。

  3. 在服務選單中,在 設定中選擇 升級。

  4. 依 Kubernetes 版本,選擇 升級版本。

    Azure 入口網站升級版本選項的截圖。

  5. 在 升級 Kubernetes 版本 頁面,選擇 Kubernetes 版本 下拉選單,以查看可升級的 Kubernetes 版本。

    [升級版本] 畫面的螢幕擷取畫面,其中包含可用的升級版本。

如果沒有可用的升級選項,你的叢集可能已經是最新版本,或者叢集版本已經超出支援視窗。 如果該版本不支援且 AKS 沒有提供復原升級,請建立一個支援的 Kubernetes 版本的新叢集,並遷移你的工作負載。 欲了解更多資訊,請參閱 AKS 關於 Kubernetes 版本的支援政策。

AKS 叢集升級流程

系統會仔細地隔離並清空 AKS 節點,將會對執行中應用程式造成中斷的任何可能性降到最低。 在此程序中,AKS 會執行下列步驟:

  • 將新的緩衝區節點 (或最大激增中設定的節點數量) 新增至執行指定 Kubernetes 版本的叢集。
  • 隔離和清空其中一個舊節點,以將執行中應用程式的中斷降到最低。 若您正在使用最大激增,則會同時隔離和清空與指定緩衝節點相同的節點。
  • 舊節點完全清空時,系統會重新安裝映像以接收新版本,並成為即將升級之後續節點的緩衝區節點。
  • 此流程在叢集中所有節點都已升級前,會不斷重複。
  • 流程結束時會刪除最後一個緩衝區節點,維持現有代理程式節點數量和區域平衡。

注意

如果未指定修補檔,叢集會自動升級至指定次要版本的最新 GA 修補檔。 例如,將 --kubernetes-version 設定為 1.28 會導致叢集升級至 1.28.9。

如需詳細資訊,請參閱 AKS 中支援的 Kubernetes 次要版本升級。

你可以手動升級叢集,或設定自動叢集升級。 設定自動叢集升級,幫助你的叢集維持在支援的 Kubernetes 版本上。

使用 Azure CLI 手動升級叢集

用指令 az aks upgrade 升級你的叢集。 以下範例將叢集升級至 1.34.10 版本:

az aks upgrade \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --kubernetes-version 1.34.10

注意

受支援的非 LTS 叢集必須依次要版本循序升級。 例如,要從 1.33.x 升級到 1.35.x,先升級到 1.34.x。 若升級符合版本偏斜要求與驗證檢查,LTS 叢集在升級至 AKS 提供較高版本時可跳過次要版本。 欲了解更多資訊,請參閱 Kubernetes 版本升級規則。

以下範例輸出展示了升級後的結果。 kubernetesVersion該值現在與範例指令中指定的版本相符:

{
  ...
  "agentPoolProfiles": [
    {
      ...
      "count": 3,
      "currentOrchestratorVersion": "1.34.10",
      "maxPods": 110,
      "name": "nodepool1",
      "nodeImageVersion": "AKSUbuntu-2204gen2containerd-202608.26.0",
      "orchestratorVersion": "1.34.10",
      "osType": "Linux",
      "upgradeSettings": {
        "drainTimeoutInMinutes": null,
        "maxSurge": "10%",
        "nodeSoakDurationInMinutes": null,
        "undrainableNodeBehavior": null
      },
      "vmSize": "Standard_DS2_v2",
      ...
    }
  ],
  ...
  "currentKubernetesVersion": "1.34.10",
  "dnsPrefix": "myAKSClust-myResourceGroup-12ab34",
  "enableRbac": false,
  "fqdn": "myaksclust-myresourcegroup-12ab34-cd56e7fg.hcp.westus2.azmk8s.io",
  "id": "/subscriptions/<Subscription ID>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster",
  "kubernetesVersion": "1.34.10",
  "location": "westus2",
  "name": "myAKSCluster",
  "type": "Microsoft.ContainerService/ManagedClusters"
  ...
}

手動升級叢集 使用 Azure PowerShell

用 Set-AzAksCluster cmdlet 升級你的叢集。 以下範例將叢集升級至 1.34.10 版本:

Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -KubernetesVersion 1.34.10

注意

受支援的非 LTS 叢集必須按次要版本逐一升級。 例如,要從 1.33.x 升級到 1.35.x,先升級到 1.34.x。 若升級符合版本偏斜要求與驗證檢查,LTS 叢集在升級至 AKS 提供較高版本時可跳過次要版本。 欲了解更多資訊,請參閱 Kubernetes 版本升級規則。

以下範例輸出展示了升級後的結果。 KubernetesVersion該值現在與範例 cmdlet 中指定的版本相符:

...
ProvisioningState        : Succeeded
MaxAgentPools            : 100
KubernetesVersion        : 1.34.10
CurrentKubernetesVersion : 1.34.10
...
ResourceGroupName        : myResourceGroup
Name                     : myAKSCluster
Type                     : Microsoft.ContainerService/ManagedClusters
Location                 : westus2
Tags                     :

手動升級叢集時,請使用 Azure 入口網站

  1. 在 Azure 入口網站中,瀏覽至您的 AKS 叢集資源。

  2. 在服務選單中,在 設定中選擇 升級。

  3. 依 Kubernetes 版本,選擇 升級版本。

    Azure 入口網站升級版本選項的截圖。

  4. 在 升級 Kubernetes 版本 頁面,選擇 Kubernetes 版本 下拉選單,以查看可升級的 Kubernetes 版本。

    [升級版本] 畫面的螢幕擷取畫面,其中包含可用的升級版本。

  5. 選擇你想升級的 Kubernetes 版本,然後選擇 儲存。

升級持續時間取決於節點數量、突波設定、工作負載中斷限制、耗電逾時及節點浸水時間等因素。 預設的排水逾時為每個節點 30 分鐘,且可設定為 5 分鐘至 24 小時。 節點浸泡時間可能會讓每個節點多花 0 到 30 分鐘。 如需詳細資訊,請參閱 「自訂節點集區超量與不可用設定」。

用 Azure CLI 配置自動叢集升級

使用 Azure PowerShell 設定自動叢集升級

透過 Azure 入口網站設定自動叢集升級

AKS Automatic 叢集會使用通道 stable ,你不需要設定通道。 對於 AKS Standard 叢集,請根據你的版本政策選擇通道。 stable 和 rapid 通道會將 Kubernetes 升級到較新的次要版本,並協助讓叢集維持在受支援的版本範圍內。 頻道 patch 只安裝目前小版本的補丁,並不會讓叢集升級到較新的小版本。

在 AKS Standard 叢集上,請使用 指令 az aks update 設定自動升級通道。 以下範例使用 stable 通道:

az aks update --resource-group myResourceGroup --name myAKSCluster --auto-upgrade-channel stable

在 AKS Standard 叢集上,使用 Set-AzAksCluster cmdlet 設定自動升級通道。 以下範例使用 Stable 通道:

Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -AutoUpgradeChannel Stable
  1. 在 Azure 入口網站中,瀏覽至您的 AKS 叢集資源。

  2. 在服務選單中,在 設定中選擇 升級。

  3. 依 Kubernetes 版本,選擇 升級版本。

    Azure 入口網站升級版本選項的截圖。

  4. 對於 AKS Standard 叢集,在 Upgrade Kubernetes 版本 頁面,選擇 自動升級 下拉選單,選擇 啟用並穩定,然後選擇 儲存。

    升級 Kubernetes 版本頁面的截圖,顯示自動升級通道選項。

如需詳細資訊,請參閱自動升級 Azure Kubernetes Service (AKS) 叢集。

升級節點映像檔

AKS 會定期提供新的節點映像。 Linux 節點映像會每週更新,而 Windows 節點映像會每月更新。 建議您經常升級節點映像,以使用最新的 AKS 功能和安全性更新。 如需詳細資訊,請參閱在 Azure Kubernetes Service 中升級節點映像 (AKS)。 若要設定自動節點映像升級,請參閱自動升級 Azure Kubernetes Service (AKS) 叢集節點作業系統映像。

檢視升級事件

注意

升級叢集時,節點上可能會發生下列 Kubenetes 事件:

  • 激增:建立激增節點。
  • 清空:從節點逐出 Pod。 AKS 預設會保留 30 分鐘來清空節點。 你可以將排水逾時時間從五分鐘設定到24小時。
  • 更新:更新節點成功或失敗。
  • 刪除:刪除激增節點。

使用 kubectl get 欄位選擇器的指令,可以在預設命名空間中查看 AKS 升級器事件。

kubectl get events --field-selector source=upgrader

以下範例輸出顯示升級過程中列出的一些前述事件:

LAST SEEN   TYPE      REASON    OBJECT                                   MESSAGE
...
5m          Normal    Drain     node/aks-nodepool1-12345678-vmss000000   Draining node: aks-nodepool1-12345678-vmss000000
5m          Normal    Upgrade   node/aks-nodepool1-12345678-vmss000000   Deleting node aks-nodepool1-12345678-vmss000000 from API server
4m          Normal    Upgrade   node/aks-nodepool1-12345678-vmss000000   Successfully reimaged node: aks-nodepool1-12345678-vmss000000
4m          Normal    Upgrade   node/aks-nodepool1-12345678-vmss000000   Successfully upgraded node: aks-nodepool1-12345678-vmss000000
4m          Normal    Drain     node/aks-nodepool1-12345678-vmss000000   Draining node: aks-nodepool1-12345678-vmss000000
...

使用 Azure CLI 驗證升級

請使用指令 az aks show 確認升級是否成功。

az aks show --resource-group myResourceGroup --name myAKSCluster --output table

以下範例輸出顯示 AKS 叢集運行目標 Kubernetes 版本:

Name          Location    ResourceGroup    KubernetesVersion    CurrentKubernetesVersion  ProvisioningState    Fqdn
------------  ----------  ---------------  -------------------  ------------------------  -------------------  ----------------------------------------------------------------
myAKSCluster  westus2      myResourceGroup  1.34.10              1.34.10                   Succeeded            myaksclust-myresourcegroup-12ab34-cd56e7fg.hcp.westus2.azmk8s.io

使用 Azure PowerShell 驗證升級

請用 Get-AzAksCluster cmdlet 確認升級是否成功。

Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster |
  Select-Object -Property Name, Location, KubernetesVersion, ProvisioningState

以下範例輸出顯示 AKS 叢集運行目標 Kubernetes 版本:

Name             Location     KubernetesVersion     ProvisioningState
----             --------     -----------------     -----------------
myAKSCluster     westus2       1.34.10               Succeeded

使用 Azure portal 驗證升級

  1. 在 Azure 入口網站中,瀏覽至您的 AKS 叢集資源。
  2. 在 概覽 頁面的 Essentials 下,檢查 Kubernetes 版本 以確認升級成功。

使用 Azure CLI 刪除叢集

用 Azure PowerShell 刪除叢集

使用 Azure 入口網站刪除叢集

由於本教學課程是系列的最後一部分,您可能會想要刪除 AKS 叢集,以避免產生 Azure 費用。

使用指令移除資源群組、容器服務及所有相關資源 az group delete 。

az group delete --name myResourceGroup --yes --no-wait

使用 Remove-AzResourceGroup cmdlet 移除資源群組、容器服務及所有相關資源。

Remove-AzResourceGroup -Name myResourceGroup
  1. 在 Azure 入口網站中,瀏覽至您的 AKS 叢集資源。
  2. 在 [概觀] 頁面上,按一下 [刪除]。
  3. 在 [刪除叢集確認] 頁面上,選取 [刪除]。

注意

當您刪除叢集時,系統不會移除 AKS 叢集所使用的 Microsoft Entra 服務主體。 如需有關如何移除服務主體的步驟,請參閱 AKS 服務主體的考量和刪除。 如果您使用受控識別,則身分識別會由平台管理,因此您不需要佈建或輪替任何祕密。

下一步

在本教學課程中,您已在 AKS 叢集中升級 Kubernetes。 您已了解如何,

  • 識別目前和可用的 Kubernetes 版本。
  • 升級 Kubernetes 節點。
  • 驗證升級成功。

如需 AKS 的詳細資訊,請參閱 AKS 概觀。 如需使用 AKS 建立完整解決方案的指引,請參閱 AKS 解決方案指引。