教程 - 升级 Azure Kubernetes 服务 (AKS) 群集

在应用程序和群集生命周期内,你可以升级到最新可用的 Kubernetes 版本。 可以使用 Azure CLI、Azure PowerShell 或 Azure 门户升级 Azure Kubernetes 服务 (AKS) 群集。

本教程是由七个部分组成的教程系列的第七部分,内容是升级 AKS 群集。 学习如何:

  • 确定 Kubernetes 的当前版本和可用版本。
  • 升级 Kubernetes 节点。
  • 验证升级是否成功。

准备阶段

在上一教程中,你已将应用程序打包到容器映像中,并且将容器映像上传到了 Azure 容器注册表 (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-version 设置为 1.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.x 升级到 1.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.chinaeast2.cx.prod.service.azk8s.cn",
      "id": "/subscriptions/<Subscription ID>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster",
      "kubernetesVersion": "1.27.3",
      "location": "chinaeast2",
      "name": "myAKSCluster",
      "type": "Microsoft.ContainerService/ManagedClusters"
    }
    

配置自动群集升级

  • 使用 --auto-upgrade-channel 参数设为 patchaz aks update 命令在群集上设置自动升级通道。

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

有关详细信息,请参阅自动升级 Azure Kubernetes 服务 (AKS) 群集

升级 AKS 节点映像

AKS 会定期提供新的节点映像。 Linux 节点映像每周更新,Windows 节点映像每月更新。 建议经常升级节点映像,以使用最新的 AKS 功能和安全更新。 有关详细信息,请参阅升级 Azure Kubernetes 服务 (AKS) 中的节点映像。 若要配置自动节点映像升级,请参阅自动升级 Azure Kubernetes 服务 (AKS) 群集节点操作系统映像

查看升级事件

注意

升级群集时,节点上可能会发生以下 Kubernetes 事件:

  • 激增:创建激增节点。
  • 排空:从节点逐出 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.cx.prod.service.azk8s.cn
    

删除群集

由于本教程是本教程系列的最后一部分,因此你可以删除 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 解决方案指南