自动升级 Azure Kubernetes 服务 (AKS) 群集

AKS 群集生命周期的一部分涉及到定期升级到最新的 Kubernetes 版本。 请务必应用最新的安全版本或升级以获取最新功能。 在了解自动升级之前,请确保了解 AKS 群集升级基础知识

注意

任何升级操作,无论是手动执行还是自动执行,都会升级节点映像版本(如果该版本还不是最新版本)。 最新版本取决于完整的 AKS 版本,可通过访问 AKS 发布跟踪器 来确定。

自动升级首先升级控制平面,然后逐个升级代理池。

为何使用群集自动升级

群集自动升级提供了一种“一次设置,终生无忧”的机制,可产生有形的时间和运营成本优势。 无需停止工作负载、重新部署工作负载或创建新的 AKS 群集。 通过启用自动升级,可以确保群集是最新的,不会错过 AKS 和上游 Kubernetes 的最新功能或修补程序。

AKS 执行严格的可支持性版本控制窗口。 使用正确选择的自动升级通道,可以避免群集陷入不受支持的版本。 有关 AKS 支持窗口的详细信息,请参阅别名次要版本

客户发起的自动升级与 AKS 发起的自动升级的对比

可以使用以下指南指定群集自动升级细节。 升级按指定频率进行。建议你进行升级,以便继续使用受支持的 Kubernetes 版本。

AKS 还会为不支持的群集启动自动升级。 当 n-3 版本的群集(n 是支持的最新 AKS GA 次要版本)即将降至 n-4 时,AKS 会自动将群集升级到 n-2 以符合 AKS 支持策略。 默认情况下,会自动将平台支持的群集升级到受支持的版本。 在自动升级操作期间,停止的节点池将被升级。 启动节点池时,升级即应用于各节点。 若要最大程度地减少中断,请设置维护时段

群集自动升级限制

如果使用群集自动升级,则不能再先升级控制平面,再升级单个节点池。 群集自动升级始终将控制平面和节点池一起升级。 不能只升级控制平面。 az aks upgrade --control-plane-only运行命令将引发以下错误:

NotAllAgentPoolOrchestratorVersionSpecifiedAndUnchanged: Using managed cluster api, all Agent pools' OrchestratorVersion must be all specified or all unspecified. If all specified, they must be stay unchanged or the same with control plane.

如果使用 node-image 群集自动升级通道或 NodeImage 节点映像自动升级通道(旧版或不使用),则默认情况下会禁用 Linux 无人参与升级

群集自动升级通道

自动完成的升级在功能上与手动升级相同。 所选的自动升级通道确定升级的时间。 对自动升级进行更改时,请留出 24 小时以使更改生效。 自动升级群集遵循与手动升级群集相同的过程。 有关详细信息,请参阅升级 AKS 群集

有以下升级通道可用:

通道 操作 示例
none 禁用自动升级功能,并保持集群的 Kubernetes 版本不变。 如果保持不变,则为默认设置。
patch 当有最新的受支持补丁版本可用时,将群集自动升级到该版本,同时使次要版本保持不变。 例如,如果群集运行版本 1.17.7,而版本 1.17.9、1.18.4、1.18.6 和 1.19.1 可用,则群集将升级到 1.17.9。
stable 自动将群集升级到次要版本 N-1 的最新受支持补丁发行版,其中 N 是最新的受支持次要版本。 例如,如果群集运行版本 1.17.7,而版本 1.17.9、1.18.4、1.18.6 和 1.19.1 可用,则群集将升级到 1.18.6。
rapid 自动将群集升级到最新受支持次要版本的最新受支持补丁发行版。 如果群集的 Kubernetes 版本是一个 N-2 次要版本,其中 N 是最新的受支持次要版本,则群集将首先升级到 N-1 次要版本的最新受支持补丁版本。 例如,如果群集运行版本 1.17.7,而版本 1.17.9、1.18.4、1.18.6 和 1.19.1 可用,则群集将先升级到 1.18.6,然后升级到 1.19.1。
node-image(旧版) 自动将节点映像升级到可用的最新版本。 Microsoft经常为映像节点(每周)提供修补程序和新映像,但除非执行节点映像升级,否则正在运行的节点不会获得新映像。 当有新版本可用时,打开节点映像通道会自动更新节点映像。 如果使用此通道,默认情况下将禁用 Linux [无人参与升级]。 只要次要 Kubernetes 版本仍然受支持,节点映像升级就会适用于已弃用的补丁版本。 不再建议使用此通道,未来将弃用此通道。 有关可以自动升级节点映像的选项,请参阅NodeImage节点映像自动升级中的通道。

注意

使用群集自动升级时,请记住以下信息:

  • 群集自动升级仅更新 KUBERnetes 的 GA 版本,并且不会更新到预览版本。

  • 使用 AKS 可以在不指定确切修补程序版本的情况下创建群集。 在不指定修补程序的情况下创建群集时,群集将运行次要版本的最新 GA 修补程序。 若要了解详细信息,请参阅 AKS 支持窗口

  • 自动升级要求群集的 Kubernetes 版本位于 AKS 支持窗口中,即使使用 node-image 通道也是如此。

  • 如果使用的是预览 API 11-02-preview 或更高版本,并且选择 node-image 群集自动 升级通道,则节点映像自动升级通道 会自动设置为 NodeImage

  • 每个群集只能与单个自动升级通道相关联。 原因是您指定的通道决定位于群集上运行的 Kubernetes 版本。

  • 如果群集没有自动升级通道,并且启用了 Long-Term 支持(LTS),则群集默认使用patch自动升级通道。

使用群集自动升级功能创建新的 AKS 群集。

使用 az aks create 命令和 auto-upgrade-channel 参数创建新群集时设置自动升级通道。

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroup$RANDOM_SUFFIX"
export AKS_CLUSTER_NAME="myAKSCluster"
az aks create --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER_NAME --auto-upgrade-channel stable --generate-ssh-keys

使用群集自动升级功能对现有 AKS 群集进行升级

使用具有参数的 az aks update 命令 auto-upgrade-channel 在现有群集上设置自动升级通道。

az aks update --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER_NAME --auto-upgrade-channel stable

结果:

{
  "id": "/subscriptions/aaaa6a6a-bb7b-cc8c-dd9d-eeeeee0e0e0e/resourceGroups/myResourceGroupabc123/providers/Microsoft.ContainerService/managedClusters/myAKSCluster",
  "properties": {
    "autoUpgradeChannel": "stable",
    "provisioningState": "Succeeded"
  }
}

将自动升级与计划内维护配合使用

如果使用计划内维护和群集自动升级,升级将在指定的维护时段内启动。

注意

为确保正常运行,请使用 4 小时或更长时间的维护时段。

有关如何使用计划内维护设置维护时段的详细信息,请参阅使用计划内维护为 Azure Kubernetes 服务 (AKS) 群集安排维护时段

群集自动升级的最佳做法

使用以下最佳做法来帮助在使用自动升级时最大程度地提高成功率:

  • 若要确保群集始终处于受支持的版本,例如在 N-2 规则中,请选择 stablerapid 通道。
  • 如果你想尽快获得最新补丁,请使用 patch 通道。 如果你希望代理池始终运行最新的节点映像,那么 node-image 通道非常适合。
  • 若要在使用其他群集升级通道时自动升级节点映像,请考虑使用 节点映像自动升级NodeImage 通道。
  • 遵循操作员最佳做法
  • 遵循 PodDisruptionBudget (PDB) 最佳做法
  • 有关升级的故障排除信息,请参阅 AKS 故障排除文档