你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

AKS 支持升级节点上的映像,以便你能够获取最新的操作系统和运行时更新。 AKS 定期提供带有最新更新的新映像,因此,建议定期升级节点的映像以使用最新 AKS 功能。 Linux 节点映像每周更新一次,Windows 节点映像每月更新一次。 虽然客户将通过 AKS 发行说明收到映像升级通知,但在所有区域推出更新可能需要一周时间。 本文介绍了在不升级 Kubernetes 版本的情况下如何升级 AKS 群集节点映像以及如何更新节点池映像。

有关 AKS 提供的最新映像的详细信息,请参阅 AKS 发行说明

有关如何升级群集的 Kubernetes 版本的信息,请参阅升级 AKS 群集

注意

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

检查节点池是否在最新节点映像上

可通过以下命令查看可供节点池使用的最新节点映像版本:

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/nodepool1/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
}

因此,对于 nodepool1,可用的最新节点映像是 AKSUbuntu-1604-2020.10.28。 现在,可以通过运行以下命令将其与节点池所用的当前节点映像版本进行比较:

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 版本。

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

升级节点映像是使用 az aks upgrade 来完成的。 若要升级节点映像,请使用以下命令:

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

在升级过程中,请使用下面的 kubectl 命令来检查节点映像的状态,以获取标签并筛选出当前节点映像信息:

注意

此命令可能略有不同,具体取决于所使用的 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 \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-image-only

在升级过程中,请使用下面的 kubectl 命令来检查节点映像的状态,以获取标签并筛选出当前节点映像信息:

注意

此命令可能略有不同,具体取决于所使用的 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 值来配置要用于升级的节点数,使其更快完成。 要了解有关各种 --max-surge 设置的权衡的更多信息,请参阅--max-surge

以下命令设置用于执行节点映像升级的最大激增值:

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

在升级过程中,请使用下面的 kubectl 命令来检查节点映像的状态,以获取标签并筛选出当前节点映像信息:

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

后续步骤