自定义 Canary 部署

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

自定义 Canary 部署的运作方式

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

确保您拥有所需的权限。

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

  • 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 将它们结合在一起。

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

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

自定义 Canary 配置元素

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

strategy:
  canary:
    # Custom configuration for each canary phase
    customCanaryDeployment:
      phaseConfigs:
      - phaseId: "PHASE1_NAME"
        percentage: PERCENTAGE1
        profiles: [ "PROFILE_NAME" ]
        verify:
          tasks: [TASKS]
        predeploy:
          tasks: [TASKS]
        postdeploy:
          tasks: [TASKS]
      - 
      - phaseId: "stable"
        percentage: 100
        profiles: [ "LAST_PROFILE_NAME" ]
        verify:
          tasks: [TASKS]
        predeploy:
          tasks: [TASKS]
        postdeploy:
          tasks: [TASKS]

在此 YAML 中

  • PHASE1_NAME

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

  • [ "PROFILE_NAME" ]

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

  • stable

    最终阶段必须命名为 stable

  • PERCENTAGE1

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

  • 您可以通过配置 verify stanza 来启用部署验证。如果您这样做,系统会将 verify 作业添加到阶段。

  • 您可以通过配置 predeploy stanza 来启用预部署钩子。如果您这样做,系统会向阶段添加一个 predeploy 作业。

  • 您可以通过配置 postdeploy stanza 来启用 postdeploy 钩子。如果您这样做,系统会向阶段添加一个 postdeploy 作业。

  • verifypredeploypostdeploy 下的 tasks 属性包含一个或多个要作为相应作业的一部分运行的任务。所有配置的任务将按定义顺序依次运行。

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

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

后续步骤