为 Azure Kubernetes Fleet Manager 更新策略添加审批

适用于: ✔️车队经理 ✔️中心群集的车队经理

在更新运行中的多个群集时,平台管理员通常会执行更新前和更新后检查。 这些检查可确保群集已准备好更新,或者更新不会对群集作产生负面影响。

Fleet Manager 提供审批关卡,允许平台管理员手动或通过自动化执行所有必要检查,以便更新运行继续。 例如,更新运行过程中,在测试阶段和生产阶段之间设置审批门,这意味着可以在测试群集上进行健康状况检查,以确保可以安全地进入生产阶段。

本文介绍如何在更新运行和策略中定义审批,以及如何在更新运行执行期间批准它们。

先决条件

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

  • 必须具有包含一个或多个成员群集的舰队资源。 如果没有,请按照快速入门创建舰队资源,并将 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 2.70.0 或更高版本。 若要安装或升级,请参阅安装 Azure CLI

  • 还需要 fleet Azure CLI 扩展 1.6.0 或更高版本,可以通过运行以下命令进行安装:

    az extension add --name fleet
    

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

    az extension update --name fleet
    

在更新策略中设置审批流程

可以在创建更新策略时配置审批,也可以在使用 阶段 作为更新序列类型创建更新运行时配置审批。

注释

审批不能与 逐一 更新序列一起使用。

审批可以放置在更新策略中的任何更新阶段或更新组中,并且可以位于执行阶段或组 之前之后 。 下面是有关如何使用此功能的一些示例:

  • 生产阶段开始前的审批意味着生产阶段更新会在获得审批之后才开始。 审批确认可以是手动的,也可以通过自动化进行。
  • 每个组获得审批后,意味着可以对这些组中的群集进行运行状况检查。 审批会等待,直到用户确认应用程序在更新的群集上正常运行。

在更新策略中配置阶段和组审批

  1. 在 Azure 门户中,导航到 Azure Kubernetes 舰队管理器资源。

  2. 在服务菜单中的“设置”下,选择“多群集更新”“策略”>,然后选择“创建”

  3. 输入策略的名称,然后在 “更新序列 ”下选择“ 创建阶段”。

  4. 输入 阶段名称 ,然后选择 “设置阶段审批”。

    用于在策略中配置审批的 Azure 门户窗格的屏幕截图。将显示“创建阶段”窗格。

  5. 在右侧的边栏中,选择是否想要 阶段之前和/或 阶段之后 的批准。

  6. 输入 审批名称 。 当更新运行正在执行时,会显示此名称,可帮助为审批者提供上下文。

  7. 在审批边栏中选择“ 保存 ”。

    用于在策略中配置审批的 Azure 门户窗格的屏幕截图。将显示用于输入审批名称的边栏。

  8. 还可以在单个群组上配置审批。 为此,在 更新组 下,选择要添加审批的组,然后选择 设置组审批

  9. 如前面所述的阶段所述,使用审批边栏配置审批前后及其名称。

  10. 在审批边栏中选择“ 保存 ”。

  11. 选择 创建

  1. 创建 JSON 文件以定义更新运行的阶段和组。 下面是一个示例文件,该文件定义所有位置中的审批入口(example-stages.json):

    { 
        "stages": [ 
           { 
             "name": "stage-1", 
             "beforeGates": [ 
               { 
                 "displayName": "stage before gate", 
                 "type": "Approval" 
               } 
             ], 
             "afterGates": [ 
               { 
                 "displayName": "stage after gate", 
                 "type": "Approval" 
               } 
             ], 
             "groups": [ 
               { 
                 "name": "group-1", 
                 "beforeGates": [ 
                   { 
                     "displayName": "group before gate", 
                     "type": "Approval" 
                   } 
                 ], 
                 "afterGates": [ 
                   { 
                     "displayName": "group after gate", 
                     "type": "Approval" 
                   } 
                 ] 
               } 
             ] 
           } 
        ] 
    } 
    
  2. 使用 az fleet updatestrategy create 命令新建更新策略,并将 --stages 标志设置为 JSON 文件的名称。

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

有关详细信息,请阅读 有关创建更新策略的指南

更新运行中定义组和阶段时,还可以配置审批。

了解审批状态

审批表示为控制更新运行流的 入口 。 门的状态表示它是否获得批准。 更新运行本身也会维持网关的状态。 下面是更新过程中可以看到的所有门状态的列表:

  • 未启动:在更新运行到达入口之前,将显示为 NotStarted
  • 挂起:当关卡正在等待批准时,它处于状态 Pending
  • 已跳过:如果一个组或阶段被跳过,则该组或阶段中的所有门都会自动移动到 Skipped 状态。
  • 完成:一旦一个关卡被批准,它将显示为

在更新运行期间授予审批

启动包含审批的策略的更新运行后,更新运行将继续执行,直到达到其中一个配置的审批。 此时,更新将不会继续,直到获得你的批准才能继续。

注释

更新组并行执行。 因此,一个组的批准仅影响该组,而不会影响任何其他组。 如果要阻止多个组,请对每个组使用单个阶段审批或一个组审批。

  1. 在 Azure 门户中,导航到 Azure Kubernetes 舰队管理器资源。

  2. 在服务菜单中的 “设置”下,选择 “多群集更新”。

  3. 等待审批的更新运行在表格的状态栏中显示等待审批

    用于多群集更新的 Azure 门户窗格的屏幕截图。显示更新运行的表,其中包括一些待审批的项。

  4. 选择要授予审批的更新运行中的待审批

  5. 在右侧边栏中,观察待审批的详细信息。

  6. 选择您要批准的项目。

  7. 选择批准

    待审批的 Azure 门户窗格的屏幕截图。

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

    az fleet updaterun show \ 
     --resource-group $GROUP \ 
     --fleet-name $FLEET \ 
     --name <run-name> 
    
  2. status 响应中的 JSON 对象下,查找已配置审批的阶段或组。 查找匹配 beforeGatesafterGates JSON 对象。 在以下示例中:

    • displayName Do not start during business hours! 的 beforeGate 处于 挂起状态。 它正在等待审批。
    • 具有 displayName Run health checks 的 afterGate 处于 状态 NotStarted。 由于更新过程尚未达到这一阶段,所以没有链接 gateId
    { 
      "status": { 
        "stages": [ 
          { 
            beforeGates": [ 
              { 
                "displayName": "Do not start during business hours!", 
                "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" 
                } 
              } 
            ], 
            "afterGates": [ 
              { 
                "displayName": "Run health checks", 
                "gateId": null, 
                "status": { 
                  "completedTime": null, 
                  "error": null, 
                  "startTime": null, 
                  "state": "NotStarted" 
                } 
              } 
            ], 
    
            ...      
          }
        ]
      }
    }
    
  3. 输出可能很大,使得很难找到要授予的许可。 使用 jq 之类的工具可以更轻松地在更新运行响应中查找 beforeGateafterGate 。 例如,若要检索等待审批的所有阶段门,请使用以下命令:

    az fleet updaterun show \ 
     --resource-group $GROUP \ 
     --fleet-name $FLEET \ 
     --name <run-name> \ 
    | jq '.status.stages[] | .beforeGates + .afterGates | .[] | select(.status.state == "Pending")'
    
  4. 找到想要批准的门后,请确定其 gateId。 记录下 gateId 的最后一部分(位于最后一个斜杠之后)。 例如,对于前面的示例响应中的悬而未决的批准,请使用 aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e4e。

  5. 使用 az fleet gate approve 命令授予审批。 使用在上一步中检索到的标识符作为 –name 的参数。

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

或者,可以列出车队中所有更新运行的所有入口。

注释

列表响应可能很大,因为可以返回多个审批。 可能更难找到您想要批准的大门。

  1. 使用 az fleet gate list 命令,筛选 处于挂起 状态的门。

    az fleet gate list \ 
     --resource-group $GROUP \ 
     --fleet-name $FLEET \ 
     --state Pending 
    
  2. 如前面步骤 5 中所述,使用 az fleet gate approve 命令授予批准。 这一次,请使用从 list 命令返回的名称作为 –name 的参数。

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

清理

更新运行完成后,可能需要清理已创建的入口资源。 或者,如果在列出所有挂起的入口时看到剩余审批,则可以使用这些步骤来删除它们。

注释

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

  1. 在 Azure 门户中,导航到 Azure Kubernetes 舰队管理器资源。

  2. 在服务菜单中的 “设置”下,选择 “多群集更新”。

  3. 选择与要删除的入口关联的更新运行。

  4. 选择 删除

  5. 在右侧边栏中,确认显示正确的更新运行,然后选择“ 删除”。

  6. 在弹出窗口中,选择“ 删除”。

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

  2. 删除更新运行任务:

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

后续步骤