由于 NodePoolMcVersionIncompatible 错误,无法升级 AKS 群集

本文讨论如何解决“NodePoolMcVersionIncompatible - 节点池版本 1.x.y 和控制平面版本 1.a.b 不兼容”错误,在 Microsoft Azure Kubernetes 服务(AKS)群集中升级节点池时发生。

先决条件

症状

升级 AKS 群集中的节点池时,会收到以下错误消息之一:

BadRequest - NodePoolMcVersionIncompatible

错误:节点池版本 1.x.y 和控制平面版本 1.a.b 不兼容。 节点池的次要版本与控制平面的版本相比,不得低于2个版本。 节点池的次要版本为 x,控制平面为 a。 有关详细信息,请查看 https://aka.ms/version-skew-policy

资源 ID:/subscriptions/<subscription_id>/resourcegroups/<aks_cluster_resource_group>/providers/Microsoft.ContainerService/managedClusters/<aks_cluster_name>。

BadRequest - NodePoolMcVersionIncompatible

错误:节点池版本 1.x.y 和控制平面版本 1.a.b 不兼容。 节点池版本 x 的次要版本大于控制平面版本 a。 有关详细信息,请查看 https://aka.ms/version-skew-policy

资源 ID:/subscriptions/<subscription_id>/resourcegroups/<aks_cluster_resource_group>/providers/Microsoft.ContainerService/managedClusters/<aks_cluster_name>。

原因

如果尝试升级 AKS 控制平面版本后面的两个版本以上的节点池,或者尝试添加的版本比控制平面版本更高的节点池,则会出现这些问题。

升级节点池时,必须满足以下条件:

  • 节点池的版本不能高于控制<主版本>.<次版本>.<补丁版本>

  • 节点池版本必须位于控制平面版本的两个 次要 版本中。

有关详细信息,请参阅 用于升级的 AKS 验证规则

解决方案 1:确保节点池版本在控制平面版本的两个次要版本中

  1. 通过在 Azure CLI 中运行 az aks get-upgrades 命令来获取控制平面版本

    下面是命令的示例用法。 MasterVersion 输出列包含控制平面版本。

    az aks get-upgrades --resource-group aksrg --name testcluster1 --output table  
    
    Name     ResourceGroup    MasterVersion    Upgrades
    -------  ---------------  ---------------  -----------------------
    default  aksrg            1.23.12          1.23.15, 1.24.6, 1.24.9
    
  2. 通过运行 az aks nodepool upgrade Azure CLI 命令升级节点池,并提供一个 Kubernetes 版本,该版本位于控制平面版本的两个次要版本中。

    例如,如果控制平面版本为 1.23.12,则可以将节点池的 Kubernetes 版本指定为 1.23.81.23.12

    下面是命令的示例用法:

    az aks nodepool upgrade \
        --resource-group aksrg \
        --cluster-name testcluster1 \
        --name mynodepool \
        --kubernetes-version 1.23.8 \
        --no-wait
    

解决方案 2:确保节点池版本不大于控制平面版本

  1. 通过在 Azure CLI 中运行 az aks get-upgrades 命令来获取控制平面版本

    下面是命令的示例用法。 MasterVersion 输出列包含控制平面版本。

    az aks get-upgrades --resource-group aksrg --name testcluster1 --output table  
    
    Name     ResourceGroup    MasterVersion    Upgrades
    -------  ---------------  ---------------  -----------------------
    default  aksrg            1.23.12          1.23.15, 1.24.6, 1.24.9
    
  2. 通过运行 az aks nodepool upgrade Azure CLI 命令升级节点池,并提供小于或等于控制平面版本的 Kubernetes 版本。

    下面是命令的示例用法:

    az aks nodepool upgrade \
        --resource-group aksrg \
        --cluster-name testcluster1 \
        --name mynodepool \
        --kubernetes-version 1.23.12 \
        --no-wait
    

联系我们以获得帮助

如果有疑问,可以询问 Azure 社区支持。 您还可以向Azure反馈社区提交产品反馈。