教學課程 - 升級 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

取得可用的叢集版本

  • 在升級之前,請使用 az aks get-upgrades 命令來檢查叢集可用的 Kubernetes 版本。

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

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

    {
      "agentPoolProfiles": null,
      "controlPlaneProfile": {
        "kubernetesVersion": "1.26.6",
        ...
        "upgrades": [
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.1"
          },
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.3"
          }
        ]
      },
      ...
    }
    

升級 AKS 叢集

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

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

注意

如果未指定修補程式,叢集會自動升級至指定次要版本的最新 GA 修補程式。 例如,設定 --kubernetes-version1.21 會導致叢集升級至 1.21.9

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

您可以手動升級叢集,或設定自動叢集升級建議您設定自動叢集升級,以確保叢集一律執行最新版的 Kubernetes

手動升級叢集

  • 使用 az aks upgrade 命令升級叢集。

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

    注意

    您一次只能升級一個次要版本。 例如,您可以從 1.14.x 升級至 1.15.x,但無法從 1.14.x 直接升級至 1.16.x。 若要從 1.14.x 升級至 1.16.x,您必須先從 1.14.x 升級至 1.15.x,然後再執行另一次從 1.15.x1.16.x 的升級。

    下列範例輸出顯示升級至 1.27.3 的結果。 請注意,現在 kubernetesVersion 會顯示 1.27.3

    {
      "agentPoolProfiles": [
        {
          "count": 3,
          "maxPods": 110,
          "name": "nodepool1",
          "osType": "Linux",
          "vmSize": "Standard_DS1_v2",
        }
      ],
      "dnsPrefix": "myAKSClust-myResourceGroup-19da35",
      "enableRbac": false,
      "fqdn": "myaksclust-myresourcegroup-19da35-bd54a4be.hcp.eastus.azmk8s.io",
      "id": "/subscriptions/<Subscription ID>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster",
      "kubernetesVersion": "1.27.3",
      "location": "eastus",
      "name": "myAKSCluster",
      "type": "Microsoft.ContainerService/ManagedClusters"
    }
    

設定自動叢集升級

  • 使用 az aks update 命令將 --auto-upgrade-channel 參數設定為 patch 以在叢集上設定自動升級通道。

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

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

升級 AKS 節點映像

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

檢視升級事件

注意

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

  • 激增:建立激增節點。
  • 清空:從節點收回 Pod。 每個 Pod 都有五分鐘的逾時時間可以完成收回。
  • 更新:更新節點成功或失敗。
  • 刪除:刪除激增節點。
  • 使用 kubectl get events 命令檢視預設命名空間中的升級事件。

    kubectl get events --field-selector source=upgrader
    

    以下範例輸出顯示升級期間列出的上述部分事件:

    ...
    default 2m1s Normal Drain node/aks-nodepool1-96663640-vmss000001 Draining node: [aks-nodepool1-96663640-vmss000001]
    ...
    default 9m22s Normal Surge node/aks-nodepool1-96663640-vmss000002 Created a surge node [aks-nodepool1-96663640-vmss000002 nodepool1] for agentpool %!s(MISSING)
    ...
    

驗證升級

  • 使用 az aks show 命令確認升級成功。

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

    下列範例輸出顯示 AKS 叢集執行 KubernetesVersion 1.27.3

    Name          Location    ResourceGroup    KubernetesVersion    CurrentKubernetesVersion  ProvisioningState    Fqdn
    ------------  ----------  ---------------  -------------------  ------------------------  -------------------  ----------------------------------------------------------------
    myAKSCluster  eastus      myResourceGroup  1.27.3               1.27.3                    Succeeded            myaksclust-myresourcegroup-19da35-bd54a4be.hcp.eastus.azmk8s.io
    

選取叢集

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

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

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

注意

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

下一步

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

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

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