在 Azure Kubernetes Fleet Manager 更新运行策略中使用计划的启动入口(预览版)

平台管理员通常需要确保群集更新仅在特定日期和时间开始。 例如,选择团队有空进行监控或用户流量最低的时候。

机队管理器提供计划启动门,平台管理员可以使用它来延迟更新运行进度,直到指定的日期和时间。 例如,可以在更新策略的生产阶段之前放置计划的启动门。 此门控可确保生产集群要到预定时间才会开始更新,即使前序阶段提前完成也是如此。

本文介绍如何在更新策略中定义计划启动门,以及这些启动门如何在更新运行的执行过程中完成。

Important

Azure Kubernetes 舰队管理器预览功能可以通过自助服务方式选择性启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 客户支持部门会尽力为 Azure Kubernetes 舰队管理器预览功能提供部分支持。 因此,这些功能并不适合用于生产。

先决条件

  • 请参阅舰队更新的概念概述,其中提供了本指南中引用的更新运行、阶段、组和策略的说明。

  • 必须具有包含一个或多个成员群集的舰队资源。 如果没有机队资源,请按照快速入门创建一个机队资源并将Azure Kubernetes 服务 (AKS)群集加入为成员。

  • 设置以下环境变量:

    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export CLUSTERID=<aks-cluster-resource-id>
    export STRATEGY=<strategy-name>
    
  • 如果按照本文中的Azure CLI说明进行操作,则需要安装最新的Azure CLI。 若要安装或升级,请参阅安装 Azure CLI

  • 还需要fleetAzure CLI扩展。 若要安装它,请运行以下命令:

    az extension add --name fleet
    

    运行 az extension update 命令,更新到最新发布的扩展版本:

    az extension update --name fleet
    

在更新策略中配置计划的启动入口

可以在创建更新策略时,或者在将 阶段 用作更新序列类型来创建更新运行时,配置计划启动门。

配置计划启动门时,请记住以下几点:

  • 不能将计划启动门与 逐个 更新序列一起使用。
  • 若要控制某个阶段中所有组的开始时间,请在阶段级别而非组级别配置计划开始入口。 组级计划的启动门仅影响该特定组。
  • 只能在阶段或组 之前 放置计划的开始门。 与审批门不同, 它们不能 作为后门放置。

下面是有关如何使用此功能的一些示例:

  • 在进入生产阶段之前设置计划启动闸门,可确保更新直到周日晚上 8:00 才开始,从而避免在工作时间内造成潜在中断。
  • 组前计划的启动门允许你错开执行。

注释

如果单个 AKS 集群还配置了 计划维护窗口,这些窗口仍会得到遵守。 在计划的启动门完成和群集自己的计划内维护时段允许之前,群集不会启动升级。

在更新策略中配置阶段和组的计划启动时间

  1. 创建 JSON 文件以定义更新策略的阶段和组。 下面是一个示例文件,用于定义阶段和组上的计划启动门(example-stages.json):

    {
        "stages": [
           {
             "name": "stage-1",
             "beforeGates": [
               {
                 "displayName": "wait until Wednesday 2am",
                 "type": "ScheduledStart",
                 "scheduledStartConfiguration": {
                   "startDay": "Wednesday",
                   "startTime": "02:00",
                   "utcOffset": "+00:00"
                 }
               }
             ],
             "groups": [
               {
                 "name": "group-1",
                 "beforeGates": [
                   {
                     "displayName": "wait until Thursday 10am PST",
                     "type": "ScheduledStart",
                     "scheduledStartConfiguration": {
                       "startDay": "Thursday",
                       "startTime": "10:00",
                       "utcOffset": "-08:00"
                     }
                   }
                 ]
               }
             ]
           }
        ]
    }
    

    对象 scheduledStartConfiguration 需要三个字段:

    领域 Description Format
    startDay 计划开始的一周中的一天。 SundayMondayTuesdayWednesdayThursdayFridaySaturday
    startTime 计划开始时的当地时间。 24 小时HH:MM格式(例如,02:0014:30
    utcOffset 计划时间的 UTC 偏移量。 +HH:MM-HH:MM格式,范围从-14:00+14:00
  2. 使用 az fleet updatestrategy create 命令新建更新策略,并将 --stages 标志设置为 JSON 文件的名称。

    az fleet updatestrategy create \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name $STRATEGY \
     --stages example-stages.json
    

注释

当更新运行过程到达预定的启动时间点时,系统会计算指定日期和时间的下一次发生时间。 例如,如果门控指定为 Wednesday 02:00 UTC,并且更新运行流程在星期一到达该门控,则门控会一直等待到星期三 02:00 UTC。 如果它于周三以03:00 UTC(已经过去)到达大门,它将等到下周三。

了解计划启动门的状态

计划的启动门表示为控制更新运行流的 入口 。 门的状态指示是否已达到计划的时间。 更新运行本身也会维持网关的状态。 以下列出了您在更新运行过程中可以看到的所有门状态:

  • 未启动:在更新运行到达入口之前,它将显示为 NotStarted
  • 待定:当门控正在等待其预定时间时,其状态为 Pending。 该门还具有一个 absoluteStartTime 属性,用于显示完成的确切 UTC 时间。
  • 已跳过:如果跳过组或阶段,该组或阶段中的所有入口将自动移动到 Skipped 状态。
  • 已完成:闸门会在达到预定时间时自动变为 Completed,或者在用户将闸门的状态手动修补为 Completed 时变为 Completed

在更新运行期间手动完成计划启动门

如果您想提前进行更新,可以通过将计划启动门的状态设置为 Completed,在预定时间之前手动完成该计划启动门。

  1. 使用 az fleet updaterun show 命令检索更新运行状态。

    az fleet updaterun show \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name <run-name>
    
  2. 在响应中的 status JSON 对象下,查找你配置了计划启动闸门的阶段或组。 查找匹配 beforeGates 的 JSON 对象。 在下面的示例中,带有 displayNamewait until Wednesday 2am 的 beforeGate 处于 待定 状态——即等待到达预定时间。

    {
      "status": {
        "stages": [
          {
            "beforeGates": [
              {
                "displayName": "wait until Wednesday 2am",
                "gateId": "/subscriptions/<subscription id>/resourceGroups/<resource group>/providers/Microsoft.ContainerService/fleets/<fleet name>/gates/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
                "status": {
                  "completedTime": null,
                  "error": null,
                  "startTime": "2025-08-08T06:20:46.283255+00:00",
                  "state": "Pending"
                }
              }
            ],
            ...
          }
        ]
      }
    }
    
  3. 输出内容可能很多,因此很难从中找到你要找的门。 使用 jq 之类的工具可以更轻松地找到处于等待状态的计划启动关卡。 例如,若要获取当前处于等待状态的所有阶段门:

    az fleet updaterun show \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name <run-name> \
    | jq '.status.stages[] | .beforeGates | .[] | select(.status.state == "Pending")'
    
  4. 找到要手动完成的关卡后,确定其 gateId。 记下 gateId 的最后一部分(在最后一个斜杠之后)。 例如,对于前面的示例响应中的 挂起 门控,请使用 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e

  5. 使用上一步中的门名称,通过 az fleet gate update 命令提前完成该门。

    az fleet gate update \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --gate-name aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e \
     --state Completed
    

或者,可以列出队列中所有更新运行的所有计划启动门。

  1. az fleet gate list使用命令,按类型和状态筛选入口。

    az fleet gate list \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --gate-type ScheduledStart \
     --state Pending
    
  2. 如前所述,使用 az fleet gate update 命令并结合 list 命令返回的 gate 名称,可以提前完成该 gate。

    az fleet gate update \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --gate-name aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e \
     --state Completed
    

清理

更新运行完成后,可能需要清理创建的入口资源。 如果在列出所有待处理的门时看到残留的计划启动门,请按以下步骤将其删除。

注释

无法直接删除入口。 相反,必须删除与入口关联的更新运行。 此操作会自动删除与更新运行关联的 所有 入口。

  1. 确定与要删除的入口关联的更新运行。 在入口 target.updateRunProperties.name 字段中查找更新运行名称。

  2. 删除更新运行任务:

    az fleet updaterun delete \
     --resource-group $GROUP \
     --fleet-name $FLEET \
     --name <run-name>
    
  3. 现在会删除与更新运行关联的所有入口。

后续步骤