使用部署参数
本页面介绍如何使用 Cloud Deploy 同时将示例应用 交付给两个 目标(并行 部署),同时使用三种不同的方法将不同的参数值 传递给每个渲染的清单或服务定义。
在本快速入门中,您将执行以下操作:
创建两个 GKE 集群或两个 Cloud Run 服务。
您也可以使用 GKE 附加集群,但本快速入门仅使用 GKE 和 Cloud Run。
创建 Skaffold 配置以及 Kubernetes 清单或 Cloud Run 服务定义。
这两个 子目标的清单或服务定义将相同,但在部署时 ,每个子目标的渲染清单或服务定义对于本快速入门中配置的特定参数将具有 不同的值。
定义 Cloud Deploy 交付流水线和部署目标。
在三个不同的 位置定义部署参数:
- 在流水线进展中
- 在子目标上
- 在创建版本时,在命令行中
通过创建一个自动并行部署到这两个目标的版本来实例化交付流水线。
在控制台中查看“控制器发布”和子发布。 Google Cloud
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud的新用户, 请创建一个账号,以评估我们的产品在 实际场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init - 确保 默认 Compute Engine 服务账号 具有足够的权限。
服务帐号可能已经拥有必要的权限。针对默认服务账号停用自动角色授予的项目包含这些步骤。
- 首先,添加
clouddeploy.jobRunner角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" - 为您的特定运行时添加开发者角色。
- 对于 GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer" - 对于 Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer" -
添加
iam.serviceAccountUser角色,该角色可提供用于部署到运行时的actAs权限:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
- 首先,添加
如果您已安装 CLI,请确保您运行的是最新版本:
gcloud components update
创建运行时环境
如果您要部署到 Cloud Run,则可以跳过此命令。
对于 GKE,请创建两个集群:deploy-params-cluster-prod1 和 deploy-params-cluster-prod2,并使用默认设置。集群的 Kubernetes API 端点必须可通过公共互联网访问。
默认情况下,GKE 集群可从外部访问。
gcloud container clusters create-auto deploy-params-cluster-prod1 \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto deploy-params-cluster-prod2 \
--project=PROJECT_ID \
--region=us-west1
准备 Skaffold 配置和清单
Cloud Deploy 使用 Skaffold 提供 要部署的内容的详细信息,以及如何为您的单独 目标正确部署这些内容。
在本快速入门中,您将创建一个 skaffold.yaml 文件,以标识要用于部署示例应用的 Kubernetes 清单或 Cloud Run 服务定义。
打开一个终端窗口。
创建一个新目录并导航到该目录。
GKE
mkdir deploy-params-gke-quickstart cd deploy-params-gke-quickstartCloud Run
mkdir deploy-params-run-quickstart cd deploy-params-run-quickstart创建一个名为
skaffold.yaml且包含以下内容的文件:GKE
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - kubernetes.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}此文件是最小 Skaffold 配置。在本快速入门中,您将创建该文件。但对于简单的非生产应用,您也可以让 Cloud Deploy 为您创建一个。
如需详细了解此文件,请参阅
skaffold.yaml参考文档 。为您的应用创建定义 - Cloud Run 的服务定义或 GKE 的 Kubernetes 清单。
GKE
创建一个名为
kubernetes.yaml的文件,其中包含以下内容:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 1 # from-param: ${replicaCount} selector: matchLabels: app: my-app template: metadata: labels: app: my-app annotations: commit: defaultShaValue # from-param: ${git-sha} spec: containers: - name: nginx image: my-app-image env: - name: envvar1 value: default1 # from-param: ${application_env1} - name: envvar2 value: default2 # from-param: ${application_env2}此文件是一个 Kubernetes 清单,它应用于集群以 部署应用。要部署的容器映像在此处设置为 占位符
my-app-image,当您 创建版本时,该占位符将替换为特定映像。Cloud Run
创建一个名为
service.yaml的文件,其中包含以下内容:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-parallel-run-service spec: autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances} selector: matchLabels: app: my-app template: metadata: annotations: commit: defaultShaValue # from-param: ${git-sha} spec: containers: - image: my-app-image env: - name: envvar1 value: defaultValue1 # from-param: ${application_env1} - name: envvar2 value: defaultValue2 # from-param: ${application_env2}此文件是一个基本的 Cloud Run 服务定义,用于部署应用。要部署的容器映像 在此处设置为占位符
my-app-image,当您 创建版本时,该占位符将替换为特定映像。
创建交付流水线和目标
您可以在一个文件中或在单独的文件中定义流水线和目标。在本快速入门中,我们将创建一个文件。
创建交付流水线和目标定义:
GKE
在
deploy-params-gke-quickstart目录中,创建一个新文件:clouddeploy.yaml,其中包含以下内容:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-params-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: params-prod-multi deployParameters: - values: replicaCount: "2" # Apply the deploy parameter replicaCount: "2" to the target with this label matchTargetLabels: label1: label1 - values: replicaCount: "3" # Apply the deploy parameter replicaCount: "3" to the target with this label matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-multi description: production clusters multiTarget: targetIds: [params-prod-a, params-prod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-a labels: label1: label1 description: production cluster 1 deployParameters: application_env1: "sampleValue1" gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-params-cluster-prod1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-b labels: label2: label2 description: production cluster 2 deployParameters: application_env2: "sampleValue2" gke: cluster: projects/PROJECT_ID/locations/us-west1/clusters/deploy-params-cluster-prod2Cloud Run
在
deploy-params-run-quickstart目录中,创建一个新文件:clouddeploy.yaml,其中包含以下内容:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-params-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: params-prod-multi deployParameters: - values: minInstances: "2" # Apply the deploy parameter minInstances: "2" to the target with this label matchTargetLabels: label1: label1 - values: minInstances: "3" # Apply the deploy parameter minInstances: "3" to the target with this label matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-multi description: production clusters multiTarget: targetIds: [params-prod-a, params-prod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-a labels: label1: label1 description: production cluster 1 deployParameters: application_env1: "sampleValue1" run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-b labels: label2: label2 description: production cluster 2 deployParameters: application_env2: "sampleValue2" run: location: projects/PROJECT_ID/locations/us-west1在 Cloud Deploy 服务中注册流水线和目标:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID现在,您已经有了一个流水线,其中包含一个由两个 GKE 或 Cloud Run 目标组成的多目标,可以部署应用了。
确认您的流水线和目标:
在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线 页面,以查看可用交付 流水线的列表。
此时将显示您刚刚创建的交付流水线。请注意,即使您在
clouddeploy.yaml文件中配置了三个目标(一个多目标和两个子目标),目标 列中也仅列出了一个目标。
请注意,列出的唯一目标是多目标
params-prod-multi。子目标未显示。
创建版本
版本是表示要部署的更改的中央 Cloud Deploy 资源。交付流水线定义该版本的生命周期。如需详细了解该生命周期,请参阅 Cloud Deploy 服务架构 。
GKE
从 deploy-gke-parallel-quickstart 目录运行以下命令,以创建表示要部署的容器映像的 release 资源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-params-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
--deploy-parameters="git-sha=f787cac"
请注意
--images= 标志,
您可以使用该标志将
清单
中的占位符 (my-app-image) 替换为特定的 SHA 限定映像。Google 建议您以这种方式将清单模板化,并在创建版本时使用 SHA 限定的映像名称。
Cloud Run
从 deploy-run-parallel-quickstart 目录运行以下命令,以创建表示要部署的容器映像的 release 资源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-params-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a \
--deploy-parameters="git-sha=f787cac"
请注意
--images= 标志,
您可以使用该标志将
服务定义
中的占位符 (my-app-image) 替换为特定的 SHA 限定映像。Google 建议您
以这种方式将服务和作业定义模板化,并在创建版本时使用
SHA 限定的映像名称。
与以往一样,当您创建版本时,系统会自动为流水线中的
第一个目标创建发布(除非使用
--to-target=指定了特定目标)。在本快速入门中,此目标是一个多目标,因此
rollout是两个
子目标的“控制器发布”,并且交付流水线中没有后续目标。
这意味着,在创建发布后,您的应用将部署到所有位置。
在 Google Cloud 控制台中查看结果
现在,您已经创建了版本,并且创建了控制器发布和子发布,这些子发布现在已部署(或正在部署)到各自的 GKE 集群或 Cloud Run 服务。
在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线 页面,以查看您的 my-parallel-demo-app-1 交付流水线。
点击交付流水线的名称“my-parallel-demo-app-1”。
流水线可视化图表将显示应用部署状态。由于流水线中只有一个阶段,因此直观显示仅显示一个节点。

您的版本列在版本 标签页中交付流水线详细信息 下。
点击版本名称
test-release-001。您的发布会显示在发布下。您可以点击发布以查看其详细信息,包括部署日志。

在版本详细信息下,选择工件标签页。
部署参数 表列出了您在清单中配置的所有参数以及您为这些参数提供的值:
GKE

Cloud Run

除了参数和值之外,该表还显示了每个参数适用的目标。
在 版本检查器 列中,点击任一目标的 查看工件 。
点击显示差异 ,然后为一个目标选择
params-prod-a,为另一个目标选择params-prod-b。系统会显示一个差异,比较这两个目标的渲染清单,包括您指定的值:
GKE

Cloud Run

清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
删除 GKE 集群或 Cloud Run 服务:
GKE
gcloud container clusters delete deploy-params-cluster-prod1 --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete deploy-params-cluster-prod2 --region=us-west1 --project=PROJECT_IDCloud Run
gcloud run services delete my-parallel-run-service --region=us-central1 --project=PROJECT_ID \ && gcloud run services delete my-parallel-run-service --region=us-west1 --project=PROJECT_ID删除交付流水线、多目标、子目标、版本和发布:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID删除 Cloud Deploy 创建的 Cloud Storage 存储分区。
一个以
_clouddeploy结尾,另一个是[region].deploy-artifacts.[project].appspot.com。
恭喜,您已经完成快速入门!