教程 - 升级 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

若要升级 AKS 群集,需要Azure Kubernetes 服务参与者角色或等效权限。

在升级之前,请查看 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                        chinaeast2
    
  2. 使用 cmdlet 列出群集所在的 Get-AzAksVersion 区域中可用的 Kubernetes 版本。

    Get-AzAksVersion -Location chinaeast2 | Where-Object OrchestratorVersion
    

    以下示例输出显示了 OrchestratorVersion 下的区域版本:

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

    若要确定潜在的升级目标,请将高于集群当前版本的版本与 Kubernetes 版本升级规则 进行比较。 此 cmdlet 列出了区域可用性,并且不会验证特定群集的升级路径。

使用 Azure 门户获取可用的群集版本

  1. 登录 Azure 门户

  2. 导航到 AKS 群集资源。

  3. 在服务菜单中的 “设置”下,选择“ 升级”。

  4. 通过 Kubernetes 版本,选择 “升级版本”。

    Azure 门户中“升级版本”选项的屏幕截图。

  5. “升级 Kubernetes 版本 ”页上,选择 “Kubernetes 版本 ”下拉列表以查看可用的 Kubernetes 版本进行升级。

    屏幕截图显示“升级版本”屏幕,其中包含可用的升级版本。

如果没有可用的升级,则群集可能已处于最新可用版本,或者群集版本可能位于支持窗口之外。 如果版本不受支持,并且 AKS 不提供恢复升级,请创建一个具有受支持的 Kubernetes 版本的新群集,并迁移工作负载。 有关详细信息,请参阅 Kubernetes 版本的 AKS 支持策略

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 提供的更高 LTS 版本时跳过次要版本。 有关详细信息,请参阅 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.eastus.cx.prod.service.azk8s.cn",
  "id": "/subscriptions/<Subscription ID>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster",
  "kubernetesVersion": "1.34.10",
      "location": "eastus",
  "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 提供的更高 LTS 版本时跳过次要版本。 有关详细信息,请参阅 Kubernetes 版本升级规则

以下示例输出显示了升级的结果。 该值 KubernetesVersion 现在与示例 cmdlet 中指定的版本匹配:

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

使用 Azure 门户手动升级群集

  1. 在Azure portal中,导航到 AKS 群集资源。

  2. 在服务菜单中的 “设置”下,选择“ 升级”。

  3. 通过 Kubernetes 版本,选择 “升级版本”。

    Azure 门户中“升级版本”选项的屏幕截图。

  4. “升级 Kubernetes 版本 ”页上,选择 “Kubernetes 版本 ”下拉列表以查看可用的 Kubernetes 版本进行升级。

    屏幕截图显示“升级版本”屏幕,其中包含可用的升级版本。

  5. 选择要升级到的 Kubernetes 版本,然后选择“ 保存”。

升级持续时间取决于节点数、激增设置、工作负荷中断约束、排水超时和节点浸泡持续时间等因素。 每个节点的默认排空超时时间为 30 分钟,可设置为 5 分钟到 24 小时。 节点浸泡时间会为每个节点额外增加 0 到 30 分钟。 有关详细信息,请参阅 自定义节点池激增和不可用设置

使用 Azure CLI 配置自动群集升级

使用 Azure PowerShell 配置自动群集升级

使用 Azure 门户配置自动群集升级

对于 AKS 标准群集,请根据版本策略选择通道。 stablerapid 通道会将 Kubernetes 次要版本向前推进,并帮助使集群保持在受支持的版本范围内。 通道 patch 仅安装当前次要版本的修补程序,不会将群集提升到较新的次要版本。

在 AKS 标准群集上,使用 az aks update 命令设置自动升级通道。 以下示例使用 stable 通道:

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

在 AKS 标准群集上,使用 Set-AzAksCluster cmdlet 设置自动升级通道。 以下示例使用 Stable 通道:

Set-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster -AutoUpgradeChannel Stable
  1. 在Azure portal中,导航到 AKS 群集资源。

  2. 在服务菜单中的 “设置”下,选择“ 升级”。

  3. 通过 Kubernetes 版本,选择 “升级版本”。

    Azure 门户中“升级版本”选项的屏幕截图。

  4. 对于 AKS 标准群集,请在 “升级 Kubernetes 版本 ”页上,选择“ 自动升级 ”下拉列表,选择“ 已启用并稳定”,然后选择“ 保存”。

    “升级 Kubernetes 版本”页的屏幕截图,其中显示了自动升级通道选项。

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

升级节点镜像

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

查看升级事件

注意

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

  • 激增:创建激增节点。
  • 驱逐:从节点中移除 Pod。 默认情况下,AKS 允许 30 分钟清空节点。 可以将排空超时时间配置为 5 分钟到 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  chinaeast2      myResourceGroup  1.34.10              1.34.10                   Succeeded            myaksclust-myresourcegroup-12ab34-cd56e7fg.hcp.chinaeast2.cx.prod.service.azk8s.cn

使用 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     chinaeast2       1.34.10              Succeeded

使用 Azure 门户验证升级

  1. 在Azure portal中,导航到 AKS 群集资源。
  2. “概述 ”页上的 “概要”下,检查 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 portal中,导航到 AKS 群集资源。
  2. 在“概览” 页上,选择“删除” 。
  3. 在“删除群集确认”页上,选择“删除”。

注意

删除群集时,AKS 群集使用的 Microsoft Entra 服务主体不会被删除。 有关如何删除服务主体的步骤,请参阅 AKS 服务主体的注意事项和删除。 如果你使用了托管标识,则该标识将由平台管理,你不需要预配或轮换任何机密。

后续步骤

在本教程中,在 AKS 群集中升级了 Kubernetes。 你已了解如何执行以下操作:

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

有关 AKS 的详细信息,请参阅 AKS 概述