同时部署到多个目标

使用 Cloud Deploy,您可以部署到配置为表示多个目标的目标,您的应用会并行(并发)部署到这些目标。您确定为流水线阶段的目标称为multi-target,多目标包含的目标称为子目标

您可以将并行部署用于 Cloud Deploy 支持的任何目标类型,包括 Google Kubernetes Engine、Cloud Run 和 GKE Enterprise。

为什么要进行并行部署

例如,您可以使用并行部署将应用部署到多个生产目标。在这种情况下,您无需连续部署到每个目标,因为没有进度(例如,从开发到预演再到生产)。

此并行部署可以是正常交付流水线进度的一部分:
dev -> staging -> prod [prod1, prod2, prod3, prod4, ...]

用于并行部署的 Cloud Deploy 资源

并行部署使用以下 Cloud Deploy 专用资源:

  • 多目标

    多目标是指在目标配置 YAML 的顶层使用 multiTarget 属性配置的目标,并使用 multiTarget.targetIds 引用一个或多个其他目标,而不是引用运行时集群或服务。

  • 子目标

    子目标是指被多目标引用为 multiTarget.targetIds 的任何目标。子级还必须引用受支持的目标类型(Google Kubernetes Engine、GKE Enterprise 或 Cloud Run)。

  • 控制器发布

    控制器发布是指与多目标相对应的发布。

    请参阅限制,详细了解控制器发布可执行及不可执行的操作。

  • 子发布

    请参阅限制,详细了解对子发布可以执行和不可以执行的操作。

设置并行部署

设置并行部署包括定义一个多目标和所需的子目标数量(不超过限制)。目标定义与所有目标相同,但以下情况除外:

  • 多目标包含 multiTarget 属性。
  • 子目标不包含 multiTarget 属性,但需要使用 multiTarget.targetIds 属性从多目标中引用。
  • 您可配置多目标以供审批,但无法配置子目标(子目标不能包含 requireApproval:true)。

多目标和子目标可以包括自定义执行环境配置。如果子目标未指定执行环境,则会继承多目标定义中定义的执行环境或默认值。如需了解详情,请参阅执行环境和并行部署

配置多目标

多目标是指在交付流水线中标识为阶段的单个目标,但指向一个或多个子目标。

多目标配置包含 multiTarget 属性。多目标不能具有 gkerunanthosCluster 属性。无论您要部署到哪个运行时,多目标的配置都是相同的。

在交付流水线 YAML 或单独的 YAML 文件中,创建基本目标定义,包括 multiTarget

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: TARGET_NAME
description: TARGET_DESCRIPTION
multiTarget:
 targetIds: [ CHILD_TARGET1, CHILD_TARGET2, CHILD_TARGETn ]

在此 YAML 中...

  • TARGET_NAME 是此多目标的名称,用于交付流水线定义stages.targetId 属性。

  • CHILD_TARGET1, CHILD_TARGET2,...CHILD_TARGETn 是将此多目标部署到的子级目标的名称。每个名称都对应于子目标定义中的 name 属性。

multiTarget.targetIds 属性的存在会使此目标成为多目标。

配置子目标

对于在多目标配置中被标识为子的每个目标,将另一个目标配置为子目标:

交付流水线 YAML 或单独的 YAML 文件中,创建基本目标定义:

GKE

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
gke:
 cluster: projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME

在此 YAML 中...

  • CHILD_TARGET1 是此子目标的名称。该名称对应于多目标定义multiTarget.targetIds 属性的目标列表中的一个成员。

  • gke.cluster 属性的值是此目标所引用的集群的资源名称,包括项目 ID、区域和集群名称。

此目标的配置与标准 GKE 目标相同。使此成为子目标的唯一之处在于,多目标中的 multiTarget.targetIds 属性会引用它。

Cloud Run

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
run:
 location: projects/PROJECT_ID/locations/REGION

在此 YAML 中...

  • CHILD_TARGET1 是此子目标的名称。该名称对应于多目标定义multiTarget.targetIds 属性的目标列表中的一个成员。

  • run.location 属性的值是此目标所引用的 Cloud Run 服务的资源名称,包括项目 ID 和区域。

此目标的配置与标准 Cloud Run 目标相同。使此成为子目标的唯一之处在于,多目标中的 multiTarget.targetIds 属性会引用它。

GKE Enterprise

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
anthosCluster:
 membership: projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME

在此 YAML 中...

此目标的配置与标准 GKE Enterprise 目标相同。使此成为子目标的唯一之处在于,多目标中的 multiTarget.targetIds 属性会引用它。

创建版本

配置多目标和子目标后,像平常一样创建交付流水线和目标资源,然后创建版本。

交付流水线的生命周期与任何 Cloud Deploy 流水线和目标的生命周期相同,不同之处在于,当进入具有多目标的阶段时,Cloud Deploy 会为多目标创建控制器发布和子发布,以将应用部署到每个子目标。

用于响应 Cloud Deploy 操作的 Pub/Sub 消息,用于区分控制器发布和子发布。

限制

  • 一个多目标最多只能有 50 个子目标。

  • 单个多目标的所有子目标都必须具有相同的目标运行时(例如,所有 GKE 或所有 GKE Enterprise)。

  • 在交付流水线中,一个子目标只能有一个父级多目标。

  • 多目标不能没有子级,也不能将自身或其他多目标作为子目标引用。

  • 您不能在单个交付流水线中多次使用某个子目标,但可以在不同的流水线中重复使用它们。

  • 默认池有并发限制,但专用池没有。

    部署到多目标时,系统会同时部署所有子发布,直到达到 Cloud Build 并发限制。如果子目标的数量超过该限制,则某些目标的部署作业在另一些目标完成之前不会运行,这意味着在本例中,Cloud Deploy 不会同时部署到所有子目标。

    此外,如果目标包含验证作业,则在将应用部署到所有子目标之前,系统可能会启动一个或多个验证作业。

    如果您需要能够同时部署到更多目标,而不是 Cloud Build 文档中指定的限制,则有以下两种选择:

执行环境和并行部署

每个目标都可以配置为使用非默认执行环境。

  • 如果多目标具有非默认执行环境,则所有子目标使用默认执行环境时,都会从多目标继承非默认执行环境

  • 如果多目标使用默认执行环境,则配置有非默认执行环境的任何子目标都将使用该非默认执行环境。

这些规则可让您更轻松地将执行环境从多目标传播到子目标,因此您无需为每个子目标定义或更改执行环境,同时仍然允许您根据需要为一个或多个子目标自定义执行环境。

如需详细了解 Cloud Deploy 中的执行环境,请参阅使用 Google Cloud Deploy 执行环境

回滚并行部署

如果需要从多个并行目标回滚部署,请回滚多目标,如回滚目标中所述。

并行部署的审批

与任何目标一样,您可以将并行部署配置为需要批准。但是,对于并行部署,您只能对多目标配置审批。批准或拒绝会同时影响所有子目标。

在 Google Cloud 控制台中查看并行部署

您可以在 Google Cloud 控制台中查看多目标、子目标、控制器发布和子发布的详细信息。

查看给定交付流水线的目标列表时,“交付流水线详情”中会列出多目标,但不包括子目标。不过,当您查看版本详情时,可以看到控制器发布和子发布。您还可以在“交付流水线详情”页面的发布标签页上查看控制器和子发布。

版本检查器中,您可以查看子发布所呈现的清单并比较差异。

将部署参数传递给目标

您可以通过在清单中添加参数并在交付流水线定义中添加值来区分子目标。您可以根据相应目标的标签匹配,将这些值单独应用到单独的清单。

例如,您可能希望每个子目标具有不同数量的副本。为此,您需要在交付流水线的进度中添加参数和值,以及要针对每个“参数-值”对匹配的子目标的标签。

详细了解部署参数

将并行部署与部署策略结合使用

您可以使用 Canary 部署策略进行并行部署。如需了解详情,请参阅将并行部署与 Canary 部署策略结合使用

后续步骤