使用部署参数
本页介绍了如何使用 Cloud Deploy 同时将示例应用提交到两个目标(并行部署),同时使用三种不同的方法将不同的参数值传递给每个呈现的清单或服务定义。
在本快速入门中,您将执行以下操作:
创建两个 GKE 集群或两个 Cloud Run 服务。
您也可以使用 GKE Enterprise 集群,但本快速入门仅使用 GKE 和 Cloud Run。
创建 Skaffold 配置以及 Kubernetes 清单或 Cloud Run 服务定义。
两个子目标的清单或服务定义将相同,但在部署时,每个子目标的呈现清单或服务定义中,此快速入门中配置的特定参数的值将不同。
定义 Cloud Deploy 交付流水线和部署目标。
您可以在三个不同的位置定义部署参数:
- 在流水线进程中
- 在子目标上
- 使用命令行创建版本时
通过创建一个版本来实例化您的交付流水线,该版本会自动 同时部署到两个目标
在 Google Cloud 控制台中查看“控制器发布”和子发布。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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-quickstart
Cloud 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
参考文档 来详细了解此文件。创建应用的定义 - 定义 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 manifest, 应用于集群以部署应用
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 服务定义,用于在部署时创建 Cloud Run 服务。
创建交付流水线和目标
您可以在一个文件中或在单独的文件中定义流水线和目标。在本快速入门中,我们将创建一个文件。
创建交付流水线和目标定义:
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" matchTargetLabels: label1: label1 - values: replicaCount: "3" 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-prod2
Cloud 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" matchTargetLabels: label1: label1 - values: minInstances: "3" 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"
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:4a856b6f1c3ce723a456ddc2adfbb794cbfba93f727e2d96fcf6540bd0d6fff4 \
--deploy-parameters="git-sha=f787cac"
与往常一样,当您创建版本时,系统会自动为应用的
流水线中的第一个目标(除非使用
--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
。您的发布会显示在发布下。您可以点击发布以查看其详细信息,包括部署日志。
在版本详情下,选择工件标签页。
部署参数 (Deploy parameters) 表列出了您在 以及您为这些参数提供的值:
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_ID
Cloud 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
。
恭喜,您已经完成快速入门!