使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。
快速入门:同时将应用部署到多个目标

将应用同时部署到多个目标

本页面介绍如何使用 Google Cloud Deploy 同时将示例应用交付到两个目标(并行部署)。

在本快速入门中,您将执行以下操作:

  1. 创建两个 GKE 集群或两个 Cloud Run 服务。

    您也可以并行部署到 Anthos 集群,但本快速入门仅使用 GKE 和 Cloud Run。

  2. 创建 Skaffold 配置以及 Kubernetes 清单或 Cloud Run 服务定义。

  3. 定义 Google Cloud Deploy 交付流水线和部署目标。

    流水线将只有一个目标,但该目标将是一个多目标 - 一个目标,代表多个部署目标。这个多目标将包含两个实际目标,即将您的应用分发到这两个集群或服务。

  4. 通过创建一个版本来实例化您的交付流水线,此版本会自动并行部署到这两个目标。

  5. 在 Google Cloud 控制台中查看“控制器发布”和子发布。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  4. 启用 Google Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API。

    启用 API

  5. 安装 Google Cloud CLI。
  6. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  7. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  8. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  9. 启用 Google Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API。

    启用 API

  10. 安装 Google Cloud CLI。
  11. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  12. 如果您已安装 CLI,请确保您运行的是最新版本:

    gcloud components update
    

  13. 确保默认的 Compute Engine 服务帐号具有足够的权限。

    服务帐号可能已经拥有必要的权限。这些步骤适用于停用默认服务帐号自动授予角色的项目。

    1. 首先添加 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"
      

    2. 为您的特定运行时添加开发者角色。
      • 对于 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"
        

    3. 添加 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
      

创建运行时环境

如果您要部署到 Cloud Run,则可以跳过此命令

对于 GKE,请使用默认设置创建两个集群:quickstart-cluster-qsprod1quickstart-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 清单。

  1. 打开一个终端窗口。

  2. 创建一个新目录并导航到该目录。

    GKE

    mkdir deploy-gke-parallel-quickstart
    cd deploy-gke-parallel-quickstart
    

    Cloud Run

    mkdir deploy-run-parallel-quickstart
    cd deploy-run-parallel-quickstart
    
  3. 创建名为 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 参考文档

  4. 为您的应用创建定义 - 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 服务。

创建交付流水线和目标

您可以在一个文件中或在单独的文件中定义流水线和目标。在本快速入门中,您将创建一个文件。

  1. 创建交付流水线和目标定义:

    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
    
  2. 在 Google Cloud Deploy 服务中注册流水线和目标:

    gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
    

    您现在拥有一个流水线(包含一个由两个 GKE 或 Cloud Run 目标组成的多目标),可以部署应用了。

  3. 确认您的流水线和目标:

    在 Google Cloud 控制台中,导航到 Google Cloud Deploy 交付流水线页面,以查看可用交付流水线的列表。

    打开“交付流水线”页面

    系统会显示您刚刚创建的交付流水线。请注意,即使您在 clouddeploy.yaml 文件中配置了三个目标(一个多目标和两个子目标),Target 列中也有一个目标。

    在 Google Cloud 控制台中直观呈现交付流水线

    请注意,列出的唯一目标为多目标 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 服务中。

  1. 在 Google Cloud 控制台中,前往 Google Cloud Deploy 交付流水线页面,以查看 my- parallel-demo-app-1 交付流水线。

    打开“交付流水线”页面

  2. 点击交付流水线的名称“my- parallel-demo-app-1”。

    流水线可视化会显示应用的部署状态。由于流水线中只有一个阶段,因此该可视化图表仅显示一个节点。

    在 Google Cloud 控制台中直观呈现交付流水线

    您的版本列在版本标签页中交付流水线详细信息下。

  3. 点击版本名称 test-release-001

    您的发布会显示在发布下。您可以点击发布以查看其详细信息,包括部署日志。

    Google Cloud 控制台中的发布作业

清理

为避免因本页中使用的资源导致您的 Google Cloud 帐号产生费用,请按照以下步骤操作。

  1. 删除 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
    
  2. 删除交付流水线、多目标、子目标、发布和发布:

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  3. 删除 Google Cloud Deploy 创建的 Cloud Storage 存储桶。

    一个以 _clouddeploy 结尾,另一个是 [region].deploy-artifacts.[project].appspot.com

    打开“Cloud Storage 浏览器”页面

恭喜,您已经完成快速入门!

后续步骤