自定义 Canary 部署

本文档介绍了如何配置和使用自定义 Canary 部署,以使用 Cloud Deploy 将应用部署到所有目标类型

自定义 Canary 部署的运作方式

使用自定义 Canary 部署策略进行部署时,Cloud Deploy 不会修改清单,以便于实现所选的流量平衡配置。相反,您需要负责提供应用于目标运行时环境的清单,以用于每个 Canary 阶段。

确保您拥有所需的权限

除了使用 Cloud Deploy 所需的其他 Identity and Access Management 权限之外,您还需要以下权限才能执行可能需要用于灰度发布的其他操作:

  • clouddeploy.rollouts.advance
  • clouddeploy.rollouts.ignoreJob
  • clouddeploy.rollouts.cancel
  • clouddeploy.rollouts.retryJob
  • clouddeploy.jobRuns.get
  • clouddeploy.jobRuns.list
  • clouddeploy.jobRuns.terminate

如需详细了解哪些可用角色包含这些权限,请参阅 IAM 角色和权限

准备好您的 skaffold.yaml

skaffold.yaml 文件定义了清单的呈现和部署方式。 对于自定义 Canary 部署,您负责定义与每个 Canary 阶段关联的配置文件,以便实现所选的流量平衡配置。这些配置文件会映射到交付流水线策略配置中的阶段。

以下是自定义 Canary 使用的 skaffold.yaml 配置示例:

apiVersion: skaffold/v4beta7
kind: Config
profiles:
- name: canary-25
  manifests:
    rawYaml:
    - canary-25-resources.yaml
- name: canary-50
  manifests:
    rawYaml:
    - canary-50-resources.yaml
- name: stable
  manifests:
    rawYaml:
    - stable-resources.yaml

配置自定义 Canary

借助自定义 Canary 配置,您可以在交付流水线定义中指定以下内容:

  • 发布阶段名称

    在全自动 Canary 版本中,Cloud Deploy 会为您命名阶段(例如 canary-25canary-75stable)。不过,借助自定义 Canary,您可以为每个阶段指定任意名称,只要该名称在相应 Canary 阶段的所有阶段中是唯一的,并且符合资源 ID 限制即可。但最终 (100%) 阶段名称必须为 stable

  • 各阶段的目标百分比

    分别指定每个阶段的百分比。

  • 要用于阶段的 Skaffold 配置文件

    您可以为每个阶段使用单独的 Skaffold 配置文件,也可以使用同一配置文件,或者使用任意组合。每个配置文件都可以使用不同的 Cloud Run 服务定义。您还可以为给定阶段使用多个配置文件。Cloud Deploy 将它们结合在一起。

  • 相应阶段是否存在验证作业

    请注意,如果您要启用验证,还需要配置 skaffold.yaml 以进行验证。

  • 阶段是否有部署前作业或部署后作业

    如果您要启用部署前作业或部署后作业,则需要为这些作业配置 skaffold.yaml

自定义 Canary 配置元素

以下 YAML 展示了完全自定义 Canary 部署的各个阶段的配置:

strategy:
  canary:
    # Custom configuration for each canary phase
    customCanaryDeployment:
      phaseConfigs:
      - phaseId: "PHASE1_NAME"
        percentage: PERCENTAGE1
        profiles: [ "PROFILE_NAME" ]
        verify: true | false
        predeploy:
          actions: "PREDEPLOY_ACTION"
        postdeploy:
          actions: "POSTDEPLOY_ACTION"
      - 
      - phaseId: "stable"
        percentage: 100
        profiles: [ "LAST_PROFILE_NAME" ]
        verify: true|false
        predeploy:
          actions: "PREDEPLOY_ACTION"
        postdeploy:
          actions: "POSTDEPLOY_ACTION"

在此 YAML 中

  • PHASE1_NAME

    是阶段的名称。每个阶段名称都必须是唯一的。

  • [ "PROFILE_NAME" ]

    是用于阶段的配置文件的名称。您可以为每个阶段使用同一配置文件,也可以为每个阶段使用不同的配置文件,还可以使用任意组合。此外,您还可以指定多个个人资料。Cloud Deploy 会使用您指定的所有配置文件,以及整个阶段使用的配置文件或清单。

  • stable

    最终阶段必须命名为 stable

  • PERCENTAGE1

    是第一阶段的部署百分比。每个阶段都必须具有唯一的百分比值,并且该值必须是整数百分比(例如,不能是 10.5),并且阶段必须按升序排列。

  • verify: true|false

    告知 Cloud Deploy 是否为阶段添加验证作业。请注意,为了让每个阶段都使用验证,Skaffold 会使用为相应阶段的渲染和部署指定的同一配置文件进行验证。

  • PREDEPLOY_ACTION

    与您在 skaffold.yaml 中用于定义要在部署之前运行的自定义操作的 ACTION_NAME 相同。

  • POSTDEPLOY_ACTION

    与您在 skaffold.yaml 中用于定义部署后要运行的自定义操作的 ACTION_NAME 相同。

最后一个阶段的百分比必须为 100。阶段的执行顺序与您在此 customCanaryDeployment stanza 中配置的顺序一致,但如果百分比值不是升序,则用于注册交付流水线的命令会因错误而失败。

请注意,自定义 Canary 的配置不包含 runtimeConfig stanza。如果您添加了 runtimeConfig,则会被视为自定义自动化 Canary

后续步骤