跨多个成员群集更新业务流程

管理大量群集的平台管理员通常会在以安全且可预测的方式暂存多个群集的更新(例如升级节点 OS 映像版本、升级 Kubernetes 版本)时遇到问题。 为了解决此难题,Azure Kubernetes 舰队管理器(舰队)允许使用更新运行、阶段、组和策略跨多个群集协调更新。

该图显示了包含两个更新阶段的升级运行,每个更新阶段包含两个更新组,更新组具有两个成员群集。

  • 更新运行:更新运行表示应用于 AKS 群集的集合(包括更新目标和序列)的更新。 更新目标描述了所需的更新(例如,升级到 Kubernetes 版本 1.28.3)。 更新序列描述了将更新应用到多个成员群集的确切顺序,使用阶段和组表示。 如果未指定,则会按顺序更新所有成员群集。 可以停止和启动更新运行。
  • 更新阶段:更新运行分为多个阶段,按顺序逐步应用。 例如,第一个更新阶段可能会更新测试环境成员群集,第二个更新阶段随后将更新生产环境成员群集。 可以指定等待时间,以延迟应用后续更新阶段。
  • 更新组:每个更新阶段都包含一个或多个更新组,这些更新组用于选择要更新的成员群集。 更新组还用于对成员群集更新的应用进行排序。 在更新阶段中,更新将并行应用于所有不同的更新组;在更新组中,成员群集按顺序更新。 舰队的每个成员群集只能是一个更新组的一部分。
  • 更新策略:更新策略描述包含阶段和组的更新序列。 可以在更新运行中重复使用策略,而不是在每个运行中重复定义序列。

目前,群集上支持的更新操作是升级。 有三种类型的升级可供选择:

  • 升级 Kubernetes 控制平面和节点的 Kubernetes 版本(包括升级节点映像)。
  • 仅升级群集控制平面的 Kubernetes 版本
  • 仅升级节点映像。

可以指定要升级到的目标 Kubernetes 版本,但不能将确切的目标节点映像版本指定为最新的可用节点映像版本,具体取决于群集区域(有关详细信息,请查看发布跟踪器)。 系统会根据首选项自动选择目标节点映像版本:

  • Latest:在群集升级开始时,使用群集区域中可用的最新节点映像。 因此,可以使用不同的映像版本,具体取决于群集所在的区域以及其升级实际启动时间。
  • Consistent:在更新运行启动时,它会选取此运行中成员群集区域中最新的常见映像版本,以便跨群集使用相同的一致映像版本。

应选择 Latest 以使用较新的映像版本并最大程度地降低安全风险,并选择 Consistent 以便通过在早期阶段使用这些映像并在后续群集中使用这些映像来提高可靠性。

计划内维护

更新运行遵循在 Azure Kubernetes 服务 (AKS) 群集级别设置的计划内维护时段

在更新运行中(对于逐个阶段类型更新运行),更新运行按以下顺序对群集的升级进行优先级排序:

  1. 维护时段持续开启的成员。
  2. 维护时段在接下来的四小时内开启的成员。
  3. 无维护时段的成员。
  4. 维护时段已关闭的成员。

更新运行状态

更新运行可能会处于以下任一状态:

  • 未启动:更新运行在启动之前的状态。

  • 正在运行:更新运行中至少有一个群集正在进行升级。

  • 待批准

    • 成员群集:成员群集可能由于以下任一原因而处于挂起状态,并显示在消息字段下。
      • 维护时段未开启。 消息指示下次开启时间。
      • 目标 Kubernetes 版本在成员区域中尚不可用。 消息链接到发布跟踪器,以便你可以跨区域检查发布的状态。
      • 目标节点映像版本在成员区域中尚不可用。 消息链接到发布跟踪器,以便你可以跨区域检查发布的状态。
    • :如果组中的所有成员都处于 Pending 状态或未启动,则组处于 Pending 状态。 当成员移动到 Pending 时,更新运行将尝试升级组中的下一个成员。 如果所有成员都处于 Pending 状态,则组将移动到 Pending 状态。 在进入下一阶段之前,所有组都必须处于终端状态。 也就是说,如果某个组处于 Pending 状态,更新运行将等待其完成,然后再转到下一阶段继续执行。
    • 阶段:如果某个阶段下的所有组都处于 Pending 状态或未启动,则该阶段处于 Pending 状态。
    • 运行:如果应当运行的当前阶段处于 Pending 状态,则运行处于 Pending 状态。
  • 已跳过:可以跳过更新运行的所有级别,这可能是系统检测到的,也可能是用户启动的。

    • 成员
      • 你已跳过某个成员或其父级的升级。
      • 成员群集已处于目标 Kubernetes 版本(如果更新运行模式为 FullControlPlaneOnly)。
      • 成员群集已处于目标 Kubernetes 版本,而且所有节点池都处于目标节点映像版本。
      • 为升级运行选择一致性节点映像时,如果找不到其中一个节点池的目标映像版本,则会跳过该群集的升级。 启动更新运行后会添加具有新 VM SKU 的新节点池就是这种情况的一个示例。
      • 系统检测到所有成员群集均为 Skipped
      • 你在组级别启动了跳过。
    • 阶段
      • 系统检测到该阶段的所有组均为 Skipped
      • 你在阶段级别启动了跳过。
    • 运行
      • 系统检测到所有阶段均为 Skipped
  • 已停止:可以停止更新运行的所有级别。 进入已停止状态有两种可能性:

    • 你停止了更新运行,此时更新运行停止跟踪所有操作。 如果更新运行已启动某个操作(例如,正在进行群集升级),则该操作不会针对此单个群集中止。
    • 如果在更新运行期间遭遇失败(例如,其中一个群集上的升级失败),则整个更新运行将进入停止状态,而且不会尝试对更新运行中的任何后续群集执行操作。
  • 已失败:群集升级失败将导致以下操作:

    • 将成员群集上的 MemberUpdateStatus 标记为 Failed
    • 将所有父级(组 -> 阶段 -> 运行)标记为 Failed,并显示摘要错误消息。
    • 停止更新运行继续进行。

后续步骤