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

升级 Azure 操作员 Nexus Kubernetes 群集

本文提供有关如何升级操作员 Nexus Kubernetes 群集以获取最新功能和安全更新的说明。 Kubernetes 群集生命周期的一部分涉及对最新的 Kubernetes 版本执行定期升级。 必须应用最新的安全版本,或者通过升级来获取最新功能。 本文介绍如何为 Kubernetes 群集检查、配置和应用升级。

限制

  • 群集升级过程是一种横向扩展方法,这意味着至少添加了一个额外的节点(或最大激增配置的节点数)。 如果容量不足,升级将无法成功。
  • 当新的 Kubernetes 版本可用时,租户群集不会进行自动升级。 当群集中的所有网络功能都准备好支持新的 Kubernetes 版本时,用户应启动升级。 有关详细信息,请参阅 升级群集
  • 操作员 Nexus 提供群集范围的升级,确保所有节点池的一致性。 不支持升级单个节点池。 此外,当新版本可用时,节点映像会作为群集升级的一部分进行升级。
  • 对代理节点进行的自定义将在群集升级期间丢失。 建议将这些自定义 DaemonSet 设置放在其中,而不是手动更改节点配置,以便在升级后保留它们。
  • 在群集升级过程中,对核心加载项配置的修改将还原到默认加载项配置。 避免自定义加载项配置(例如 Calico 等),以防止潜在的升级失败。 如果加载项配置还原遇到问题,可能会导致升级失败。
  • 升级操作员 Nexus Kubernetes 群集时,无法跳过 Kubernetes 次要版本。 必须按主版本号按顺序执行所有升级。 例如,允许 1.14.x ->1.15.x1.15.x ->1.16.x 之间的升级,但不允许 1.14.x ->1.16.x 的升级。 如果版本落后于多个主要版本,则应执行多个顺序升级。
  • 必须在创建群集期间设置最大激增值。 创建群集后,无法更改最大激增值。 有关详细信息,请参阅 upgradeSettings创建 Azure 操作员 Nexus Kubernetes 群集”。

先决条件

  • 部署在 Azure 订阅中的资源组中的 Azure 操作员 Nexus Kubernetes 群集。
  • 如果使用 Azure CLI,本文要求运行最新的 Azure CLI 版本。 如果需要进行安装或升级,请参阅安装 Azure CLI
  • 了解版本捆绑概念。 有关详细信息,请参阅 Nexus Kubernetes 版本捆绑包

检查是否有可用的升级

使用以下步骤检查哪些 Kubernetes 版本可用于群集:

使用 Azure CLI

以下 Azure CLI 命令返回群集的可用升级:

az networkcloud kubernetescluster show --name <NexusK8sClusterName> --resource-group <ResourceGroup> --output json --query availableUpgrades

示例输出:

[
  {
    "availabilityLifecycle": "GenerallyAvailable",
    "version": "v1.25.4-4"
  },
  {
    "availabilityLifecycle": "GenerallyAvailable",
    "version": "v1.25.6-1"
  },
  {
    "availabilityLifecycle": "GenerallyAvailable",
    "version": "v1.26.3-1"
  }
]

使用 Azure 门户

  1. 登录 Azure 门户
  2. 导航到操作员 Nexus Kubernetes 群集。
  3. 在“概述”下,选择“可用升级选项卡。

Screenshot of available upgrades.

选择要升级到的版本

可用的升级输出指示有多个版本可供选择进行升级。 在此特定方案中,当前群集在版本 v1.25.4-3. 上运行,因此,可用的升级选项包括 v1.25.4-4 和最新的修补程序版本 v1.25.6-1. 。此外,还提供了新的次要版本。

你可以灵活地升级到任何可用版本。 但是,建议的操作过程是执行升级到最新可用 major-minor-patch-versionbundle 版本。

注意

版本的输入格式为 major.minor.patchmajor.minor.patch-versionbundle。 版本输入必须是可用的升级版本之一。 例如,如果群集的当前版本为 1.1.1-1,则有效版本输入为 1.1.1-21.1.1-x。 虽然 1.1.1 是有效的格式,但它不会触发任何更新,因为当前版本已经 1.1.1。 若要启动更新,可以使用版本捆绑包指定完整版本,例如 1.1.1-2。 但是,并且1.2.x是一个有效的输入,1.1.2并将使用可用于1.1.2或的1.2.x最新版本捆绑包。

升级群集

在群集升级过程中,操作员 Nexus 执行以下操作:

  • 将具有指定 Kubernetes 版本的新控制平面节点添加到群集。
  • 添加新节点后,封锁并清空其中一个旧的控制平面节点,确保其上运行的工作负荷正常移动到其他正常的控制平面节点。
  • 清空旧控制平面节点后,会将其删除,并将新的控制平面节点添加到群集。
  • 此过程重复,直到群集中的所有控制平面节点都已升级。
  • 对于群集中的每个代理池,请使用指定的 Kubernetes 版本添加新的工作器节点(或配置为最大激增配置的节点数)。 同时升级多个代理池。
  • 封锁并清空 其中一个旧的工作器节点,以最大程度地减少对正在运行的应用程序的中断。 如果使用最大激增,它会 在指定的缓冲区节点数的同时封锁和清空 尽可能多的工作节点。
  • 清空旧工作器节点后,会将其删除,并将包含新 Kubernetes 版本的新工作器节点添加到群集(或最大激增配置的节点数)
  • 此过程将重复,直到群集中的所有工作器节点都已升级。

重要

确保PodDisruptionBudgets任何 (PDB) 允许一次移动至少一个 pod 副本 (replica),否则排水/逐出操作将失败。 如果清空操作失败,升级操作也会失败,以确保应用程序不会中断。 请更正导致操作停止的原因(即不正确的 PDB、缺少配额等),然后重新尝试该操作。

  1. 使用 networkcloud kubernetescluster update 命令升级群集。
az networkcloud kubernetescluster update --name myNexusK8sCluster --resource-group myResourceGroup --kubernetes-version v1.26.3
  1. 使用 show 命令确认升级成功。
az networkcloud kubernetescluster show --name myNexusK8sCluster --resource-group myResourceGroup --output json --query kubernetesVersion

以下示例输出显示群集现在运行 v1.26.3

"v1.26.3"
  1. 确保群集正常运行。
az networkcloud kubernetescluster show --name myNexusK8sCluster --resource-group myResourceGroup --output table

以下示例输出显示群集正常:

Name                 ResourceGroup          ProvisioningState    DetailedStatus    DetailedStatusMessage             Location
------------------   ---------------------  -------------------  ----------------  --------------------------------  --------------
myNexusK8sCluster    myResourceGroup        Succeeded            Available         Cluster is operational and ready  southcentralus

自定义节点激增升级

默认情况下,运算符 Nexus 将升级配置为使用一个额外的工作器节点激增。 最大激增设置的默认值为一个,操作员 Nexus 可以通过在现有应用程序的封锁/排空前创建额外的节点来替换旧版节点来最大程度地减少工作负荷中断。 可以为每个节点池自定义最大激增值,从而在升级速度与升级中断之间进行权衡。 增加最大激增值后,升级过程会更快完成。 如果为最大激增设置较大的值,可能会在升级过程中遇到中断。

例如,最大激增值为 100% 时,可以让升级过程尽可能快(将节点计数加倍),但也会导致节点池中的所有节点同时被耗尽。 对于测试环境,可能希望使用类似的较高的值。 对于生产节点池,建议将 max_surge 设置为 33%。

API 接受整数值和最大激增百分比值。 整数值(例如 5)指示要激增五个额外的节点。 值为 50% 指示激增值为池中当前节点计数的一半。 最大激增百分比值的最小值可以为 1%,最大值可以为 100%。 百分比值将向上舍入到最近的节点计数。 如果最大激增值高于要升级的所需节点数,则要升级的节点数将用于最大激增值。

在升级期间,最大激增值最小可以为 1,最大为节点池中的节点数。 可以设置较大的值,但用于最大激增的最大节点数不会高于升级时池中的节点数。

重要

标准 Kubernetes 工作负荷在从正在拆毁的节点中清空时,会本机循环到新节点。 请记住,操作员 Nexus Kubernetes 服务无法为非标准 Kubernetes 行为做出工作负载承诺。

后续步骤