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

Azure Kubernetes 服务 (AKS)定期提供新的节点映像,因此请经常升级节点映像以使用最新的 AKS 功能。 Linux 节点映像每周更新,Windows 节点映像每月更新。 AKS 发行说明包括映像升级公告。 这些更新可能需要两周时间才能在所有区域推出。 有关推出状态,请参阅 发布跟踪器 。 还可以使用计划性维护自动执行节点映像升级并安排其计划。 有关详细信息,请参阅 “自动升级节点 OS 映像”。

AKS 建议 节点 OS 自动升级通道,这些通道会在维护时段内自动升级节点映像或应用安全修补程序,而无需更改 Kubernetes 版本。 若要手动升级节点映像,请按照本文中的说明进行操作。 本文介绍了在不升级 Kubernetes 版本的情况下如何升级 AKS 群集节点映像以及如何更新节点池映像。 有关如何升级群集的 Kubernetes 版本的信息,请参阅升级 AKS 群集

Important

2025 年 11 月 30 日开始,Azure Kubernetes 服务(AKS)不再支持或提供 Azure Linux 2.0 安全更新。 Azure Linux 2.0 节点镜像冻结在 202512.06.0 版本。 从 2026 年 3 月 31 日开始,将删除节点映像,并且无法缩放节点池。 迁移到受支持的 Azure Linux 版本,方法是将节点池升级到受支持的 Kubernetes 版本或迁移到 osSku AzureLinux3。 有关详细信息,请参阅 GitHub 退役问题 Azure 更新退役公告。 若要随时了解公告和更新,请按照 AKS 发行说明进行操作。

注释

当有新映像可用时,使用节点自动预配(NAP)的群集会自动更新节点映像。 可以配置维护窗口,以控制 NAP 何时采用新映像,但该窗口不一定会决定现有节点何时会被中断。 NAP 的漂移逻辑、Karpenter 节点中断预算和 Pod 中断预算决定中断发生的方式和时机。 有关详细信息,请参阅 NAP 的节点映像更新

不能将节点映像版本降级(例如,从 AKSUbuntu-2404 降级到 AKSUbuntu-2204,或从 AKSUbuntu-2404-202601.27.0 降级到 AKSUbuntu-2404-202601.13.0)。

Prerequisites

  • 现有的 AKS 群集和节点池。
  • 已安装Azure CLI并登录到Azure帐户。
  • 检索群集凭据并读取和更新 AKS 群集和节点池的权限。
  • Bash Shell。 本文中的命令使用 Bash 环境变量语法。

为资源组、群集和节点池名称设置环境变量,以便在后续命令中使用:

export AKS_RESOURCE_GROUP="<resource-group-name>"
export AKS_CLUSTER="<cluster-name>"
export AKS_NODEPOOL="<node-pool-name>"

连接至你的 AKS 群集

  1. 使用 az aks get-credentials 命令连接到 AKS 群集。

    az aks get-credentials \
        --resource-group $AKS_RESOURCE_GROUP \
        --name $AKS_CLUSTER
    

检查可用节点映像升级

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

    az aks nodepool get-upgrades \
        --nodepool-name $AKS_NODEPOOL \
        --cluster-name $AKS_CLUSTER \
        --resource-group $AKS_RESOURCE_GROUP
    
  2. 在输出中,找到并记下 latestNodeImageVersion 值。 此值是可供节点池使用的最新节点映像版本。

  3. 使用 az aks nodepool show 命令检查当前节点映像版本,并与最新版本进行比较。

    az aks nodepool show \
        --resource-group $AKS_RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER \
        --name $AKS_NODEPOOL \
        --query nodeImageVersion
    
  4. 如果 nodeImageVersion 值与 latestNodeImageVersion 值不同,则可以升级节点映像。

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

  1. 使用带有 az aks upgrade 标志的 --node-image-only 命令升级群集中所有节点池的所有节点映像。

    az aks upgrade \
        --resource-group $AKS_RESOURCE_GROUP \
        --name $AKS_CLUSTER \
        --node-image-only \
        --yes
    
  2. 可以使用 kubectl get nodes 命令检查节点映像的状态。

    注释

    此命令可能略有不同,具体取决于所使用的 shell。 有关 Windows 和 PowerShell 环境的详细信息,请参阅 Kubernetes JSONPath 文档。 此命令将列出每个节点的名称及其标签的值 kubernetes.azure.com/node-image-version ,该值标识节点的当前映像版本。

    kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.kubernetes\.azure\.com\/node-image-version}{"\n"}{end}'
    
  3. 升级完成后,请使用 az aks show 命令来获取更新后的节点池详细信息。 当前节点映像在 nodeImageVersion 属性中显示。

    az aks show \
        --resource-group $AKS_RESOURCE_GROUP \
        --name $AKS_CLUSTER  \
        --query "agentPoolProfiles[].{Name:name, NodeImageVersion:nodeImageVersion}"
    

升级特定节点池

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

    az aks nodepool upgrade \
        --resource-group $AKS_RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER \
        --name $AKS_NODEPOOL \
        --node-image-only
    
  2. 可以使用 kubectl get nodes 命令检查节点映像的状态。

    注释

    此命令可能略有不同,具体取决于所使用的 shell。 有关 Windows 和 PowerShell 环境的详细信息,请参阅 Kubernetes JSONPath 文档。 此命令将列出每个节点的名称及其标签的值 kubernetes.azure.com/node-image-version ,该值标识节点的当前映像版本。

    kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.kubernetes\.azure\.com\/node-image-version}{"\n"}{end}'
    
  3. 升级完成后,请使用 az aks nodepool show 命令来获取更新后的节点池详细信息。 当前节点映像在 nodeImageVersion 属性中显示。

    az aks nodepool show \
        --resource-group $AKS_RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER \
        --name $AKS_NODEPOOL \
        --query nodeImageVersion
    

通过节点激增策略升级节点镜像

此过程升级特定节点池的节点映像,而不是群集中的所有节点池。 默认情况下,AKS 将使用一个额外的节点来配置升级。 若要加快节点映像升级过程,请使用可自定义的节点激增数量来升级节点映像。

  1. 使用带有 --max-surge 标志的 az aks nodepool update 命令,为节点池配置激增节点数。 此设置会保留供后续升级使用。

    注释

    要了解有关各种 --max-surge 设置的权衡的更多信息,请参阅自定义节点突增升级

    az aks nodepool update \
        --resource-group $AKS_RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER \
        --name $AKS_NODEPOOL \
        --max-surge 33%
    
  2. 使用带有 --node-image-only 标志的 az aks nodepool upgrade 命令升级节点映像。

    az aks nodepool upgrade \
        --resource-group $AKS_RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER \
        --name $AKS_NODEPOOL \
        --node-image-only
    
  3. 可以使用 kubectl get nodes 命令检查节点映像的状态。 此命令将列出每个节点的名称及其标签的值 kubernetes.azure.com/node-image-version ,该值标识节点的当前映像版本。

    kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels.kubernetes\.azure\.com\/node-image-version}{"\n"}{end}'
    
  4. 使用 az aks nodepool show 命令获取更新的节点池详细信息。 当前节点映像在 nodeImageVersion 属性中显示。

    az aks nodepool show \
        --resource-group $AKS_RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER \
        --name $AKS_NODEPOOL \
        --query nodeImageVersion