将应用同时部署到多个目标
本页面介绍如何使用 Google Cloud Deploy 同时将示例应用交付到两个目标(并行部署)。
在本快速入门中,您将执行以下操作:
创建两个 GKE 集群或两个 Cloud Run 服务。
您也可以并行部署到 Anthos 集群,但本快速入门仅使用 GKE 和 Cloud Run。
创建 Skaffold 配置以及 Kubernetes 清单或 Cloud Run 服务定义。
定义 Google Cloud Deploy 交付流水线和部署目标。
此流水线将只有一个目标,但该目标将是一个多目标 - 一个目标,代表多个部署目标。这个多目标将包含两个实际目标,即将您的应用分发到这两个集群或服务。
通过创建一个版本来实例化您的交付流水线,此版本会自动并行部署到这两个目标。
在 Google Cloud 控制台中查看“控制器发布”和子发布。
准备工作
- 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Google Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Google Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API。
- 安装 Google Cloud 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,请使用默认设置创建两个集群:quickstart-cluster-qsprod1
和 quickstart-cluster-qsprod2
。集群的 Kubernetes API 端点必须能够通过公共互联网访问。GKE 集群默认可从外部访问。
gcloud container clusters create-auto quickstart-cluster-qsprod1 \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto quickstart-cluster-qsprod2 \
--project=PROJECT_ID \
--region=us-west1
准备 Skaffold 配置和 Kubernetes 清单
Google Cloud Deploy 使用 Skaffold 为要部署的内容提供详细信息,以及如何针对您的单独目标正确部署它。
在本快速入门中,您将创建一个 skaffold.yaml
文件,以标识要用于部署示例应用的 Kubernetes 清单。
打开一个终端窗口。
创建一个新目录并导航到该目录。
GKE
mkdir deploy-gke-parallel-quickstart cd deploy-gke-parallel-quickstart
Cloud Run
mkdir deploy-run-parallel-quickstart cd deploy-run-parallel-quickstart
创建名为
skaffold.yaml
且包含以下内容的文件:GKE
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - k8s-pod.yaml deploy: kubectl: {}
Cloud Run
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}
此文件是一个最小的 Skaffold 配置。在本快速入门中,您将创建该文件。但是,您还可以让 Google Cloud Deploy 为您创建一个简单的非生产应用。
如需详细了解此文件,请参阅
skaffold.yaml
参考文档。为您的应用创建定义 - Cloud Run 的服务定义或 GKE 的 Kubernetes 清单。
GKE
创建一个名为
k8s-pod.yaml
的文件,其中包含以下内容:apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: echoserver image: my-app-image
此文件是一个简单的 Kubernetes 清单,应用于集群以部署应用。
Cloud Run
创建一个名为
service.yaml
的文件,其中包含以下内容:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-parallel-run-service spec: template: spec: containers: - image: my-app-image
此文件是一个简单的 Cloud Run 服务定义,在部署时使用,用于创建 Cloud Run 服务。
创建交付流水线和目标
您可以在一个文件中或在单独的文件中定义流水线和目标。在本快速入门中,您将创建一个文件。
创建交付流水线和目标定义:
GKE
在
deploy-gke-parallel-quickstart
目录中,创建一个包含以下内容的新文件:clouddeploy.yaml
:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-parallel-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsprod-multi profiles: [] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-multi description: production clusters multiTarget: targetIds: [qsprod-a, qsprod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-a description: production cluster 1 gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-b description: production cluster 2 gke: cluster: projects/PROJECT_ID/locations/us-west1/clusters/quickstart-cluster-qsprod2
Cloud Run
在
deploy-run-parallel-quickstart
目录中,创建一个包含以下内容的新文件:clouddeploy.yaml
:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-parallel-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsprod-multi profiles: [] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-multi description: production multiTarget: targetIds: [qsprod-a, qsprod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-a description: production us-central1 run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-b description: production us-west1 run: location: projects/PROJECT_ID/locations/us-west1
在 Google Cloud Deploy 服务中注册流水线和目标:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
您现在拥有一个流水线(包含一个由两个 GKE 或 Cloud Run 目标组成的多目标),可以部署应用了。
确认您的流水线和目标:
在 Google Cloud 控制台中,导航到 Google Cloud Deploy 交付流水线页面,以查看可用交付流水线的列表。
系统会显示您刚刚创建的交付流水线。请注意,即使您在
clouddeploy.yaml
文件中配置了三个目标(一个多目标和两个子目标),Target 列中也有一个目标。请注意,列出的唯一目标为多目标
qsprod-multi
。子目标不会显示。
创建版本
版本是表示要部署的更改的中央 Google Cloud Deploy 资源。交付流水线定义该版本的生命周期。请参阅 Google Cloud Deploy 服务架构,详细了解该生命周期。
GKE
从 deploy-gke-parallel-quickstart
目录运行以下命令,以创建表示要部署的容器映像的 release
资源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-parallel-demo-app-1 \
--images=my-app-image=k8s.gcr.io/echoserver:1.4 \
--to-target=qsprod-multi
Cloud Run
从 deploy-run-parallel-quickstart
目录运行以下命令,以创建表示要部署的容器映像的 release
资源:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-parallel-demo-app-1 \
--images=my-app-image=gcr.io/cloudrun/hello \
--to-target=qsprod-multi
与以往一样,当您创建版本时,系统会自动为流水线中的第一个目标(或者,在本例中为使用 --to-target=
指定的特定目标)创建一个发布。在本快速入门中,此目标为多目标,因此 rollout
是两个子目标的“控制器发布”,并且交付流水线中没有后续目标。这意味着,在创建发布作业后,您的应用会部署到所有位置。
在 Google Cloud 控制台中查看结果
现在,您已经创建了版本,并且创建了控制器发布和子发布,接下来这些子发布现已部署到(或正处于部署过程中)各自的 GKE 集群或 Cloud Run 服务中。
在 Google Cloud 控制台中,前往 Google Cloud Deploy 交付流水线页面,以查看 my- parallel-demo-app-1 交付流水线。
点击交付流水线的名称“my- parallel-demo-app-1”。
流水线可视化会显示应用的部署状态。由于流水线中只有一个阶段,因此该可视化图表仅显示一个节点。
您的版本列在版本标签页中交付流水线详细信息下。
点击版本名称
test-release-001
。您的发布会显示在发布下。您可以点击发布以查看其详细信息,包括部署日志。
清理
为避免因本页中使用的资源导致您的 Google Cloud 帐号产生费用,请按照以下步骤操作。
删除 GKE 集群或 Cloud Run 服务:
GKE
gcloud container clusters delete quickstart-cluster-qsprod1 --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete quickstart-cluster-qsprod2 --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
删除 Google Cloud Deploy 创建的 Cloud Storage 存储桶。
一个以
_clouddeploy
结尾,另一个是[region].deploy-artifacts.[project].appspot.com
。
恭喜,您已经完成快速入门!