平台管理员通常需要确保群集更新仅在特定日期和时间开始。 例如,选择团队有空进行监控或用户流量最低的时候。
机队管理器提供计划启动门,平台管理员可以使用它来延迟更新运行进度,直到指定的日期和时间。 例如,可以在更新策略的生产阶段之前放置计划的启动门。 此门控可确保生产集群要到预定时间才会开始更新,即使前序阶段提前完成也是如此。
本文介绍如何在更新策略中定义计划启动门,以及这些启动门如何在更新运行的执行过程中完成。
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 集群还配置了 计划维护窗口,这些窗口仍会得到遵守。 在计划的启动门完成和群集自己的计划内维护时段允许之前,群集不会启动升级。
在更新策略中配置阶段和组的计划启动时间
创建 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计划开始的一周中的一天。 Sunday、Monday、Tuesday、Wednesday、Thursday、Friday或SaturdaystartTime计划开始时的当地时间。 24 小时 HH:MM格式(例如,02:00,14:30)utcOffset计划时间的 UTC 偏移量。 +HH:MM或-HH:MM格式,范围从-14:00+14:00使用
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,在预定时间之前手动完成该计划启动门。
使用
az fleet updaterun show命令检索更新运行状态。az fleet updaterun show \ --resource-group $GROUP \ --fleet-name $FLEET \ --name <run-name>在响应中的
statusJSON 对象下,查找你配置了计划启动闸门的阶段或组。 查找匹配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" } } ], ... } ] } }输出内容可能很多,因此很难从中找到你要找的门。 使用 jq 之类的工具可以更轻松地找到处于等待状态的计划启动关卡。 例如,若要获取当前处于等待状态的所有阶段门:
az fleet updaterun show \ --resource-group $GROUP \ --fleet-name $FLEET \ --name <run-name> \ | jq '.status.stages[] | .beforeGates | .[] | select(.status.state == "Pending")'找到要手动完成的关卡后,确定其
gateId。 记下 gateId 的最后一部分(在最后一个斜杠之后)。 例如,对于前面的示例响应中的 挂起 门控,请使用aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e。使用上一步中的门名称,通过
az fleet gate update命令提前完成该门。az fleet gate update \ --resource-group $GROUP \ --fleet-name $FLEET \ --gate-name aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e \ --state Completed
或者,可以列出队列中所有更新运行的所有计划启动门。
az fleet gate list使用命令,按类型和状态筛选入口。az fleet gate list \ --resource-group $GROUP \ --fleet-name $FLEET \ --gate-type ScheduledStart \ --state Pending如前所述,使用
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
清理
更新运行完成后,可能需要清理创建的入口资源。 如果在列出所有待处理的门时看到残留的计划启动门,请按以下步骤将其删除。
注释
无法直接删除入口。 相反,必须删除与入口关联的更新运行。 此操作会自动删除与更新运行关联的 所有 入口。
确定与要删除的入口关联的更新运行。 在入口
target.updateRunProperties.name字段中查找更新运行名称。删除更新运行任务:
az fleet updaterun delete \ --resource-group $GROUP \ --fleet-name $FLEET \ --name <run-name>现在会删除与更新运行关联的所有入口。