升级 Azure Kubernetes 服务 (AKS) 节点映像

Azure Kubernetes 服务 (AKS) 会定期提供新的节点映像,因此频繁升级节点映像以使用最新的 AKS 功能是有益的。 Linux 节点映像每周更新,Windows 节点映像每月更新。 映像升级公告包含在 AKS 发行说明中,可能需要长达一周的时间才能在所有区域推出这些更新。 还可以自动执行节点映像升级,并使用计划内维护来安排它。 有关详细信息,请参阅自动升级节点映像

本文介绍了在不升级 Kubernetes 版本的情况下如何升级 AKS 群集节点映像以及如何更新节点池映像。 有关如何升级群集的 Kubernetes 版本的信息,请参阅升级 AKS 群集

注意

AKS 群集必须对节点使用虚拟机规模集。

无法对节点映像版本进行降级(例如,将 AKSUbuntu-2204 降级为 AKSUbuntu-1804,或者将 AKSUbuntu-2204-202308.01.0 降级为 AKSUbuntu-2204-202307.27.0)。

检查可用节点映像升级

使用 az aks nodepool get-upgrades 命令检查可用的节点映像升级。

az aks nodepool get-upgrades \
    --nodepool-name mynodepool \
    --cluster-name myAKSCluster \
    --resource-group myResourceGroup

输出将显示 latestNodeImageVersion,如以下示例所示:

{
  "id": "/subscriptions/XXXX-XXX-XXX-XXX-XXXXX/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/agentPools/mynodepool/upgradeProfiles/default",
  "kubernetesVersion": "1.17.11",
  "latestNodeImageVersion": "AKSUbuntu-1604-2020.10.28",
  "name": "default",
  "osType": "Linux",
  "resourceGroup": "myResourceGroup",
  "type": "Microsoft.ContainerService/managedClusters/agentPools/upgradeProfiles",
  "upgrades": null
}

示例输出将 AKSUbuntu-1604-2020.10.28 显示为 latestNodeImageVersion

使用 az aks nodepool show 命令将最新版本与当前节点映像版本进行比较。

az aks nodepool show \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --query nodeImageVersion

输出应类似于以下示例:

"AKSUbuntu-1604-2020.10.08"

在此示例中,有一个可用的节点映像版本升级,即从版本 AKSUbuntu-1604-2020.10.08 升级到版本 AKSUbuntu-1604-2020.10.28

升级所有节点池中的所有节点映像

使用带有 --node-image-only 标志的 az aks upgrade 命令升级节点映像。

az aks upgrade \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-image-only

可以使用 kubectl get nodes 命令检查节点映像的状态。

注意

此命令可能略有不同,具体取决于所使用的 shell。 有关 Windows 和 PowerShell 环境的详细信息,请参阅 Kubernetes JSONPath 文档

kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.kubernetes\.azure\.com\/node-image-version}{"\n"}{end}'

升级完成后,请使用 az aks show 命令来获取更新后的节点池详细信息。 当前节点映像在 nodeImageVersion 属性中显示。

az aks show \
    --resource-group myResourceGroup \
    --name myAKSCluster

升级特定节点池

若要在不执行 Kubernetes 群集升级的情况下更新节点池的 OS 映像,请使用带有 --node-image-only 标志的 az aks nodepool upgrade 命令。

az aks nodepool upgrade \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-image-only

可以使用 kubectl get nodes 命令检查节点映像的状态。

注意

此命令可能略有不同,具体取决于所使用的 shell。 有关 Windows 和 PowerShell 环境的详细信息,请参阅 Kubernetes JSONPath 文档

kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.kubernetes\.azure\.com\/node-image-version}{"\n"}{end}'

升级完成后,请使用 az aks nodepool show 命令来获取更新后的节点池详细信息。 当前节点映像在 nodeImageVersion 属性中显示。

az aks nodepool show \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool

通过节点激增升级节点映像

要加快节点映像升级过程,可以使用可自定义的节点激增值升级节点映像。 默认情况下,AKS 将使用一个额外的节点来配置升级。

如果要提高升级速度,请使用带有 --max-surge 标志的 az aks nodepool update 命令来配置要用于升级的节点数。 要了解有关各种 --max-surge 设置的权衡的更多信息,请参阅--max-surge

az aks nodepool update \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --max-surge 33% \
    --no-wait

可以使用 kubectl get nodes 命令检查节点映像的状态。

kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.kubernetes\.azure\.com\/node-image-version}{"\n"}{end}'

使用 az aks nodepool show 可获取更新后的节点池详细信息。 当前节点映像在 nodeImageVersion 属性中显示。

az aks nodepool show \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool

后续步骤