使用 Cloud Deploy 将应用部署到 GKE

本页面介绍如何使用 Cloud Deploy 将名为 nginx 的示例应用映像交付给两个 Google Kubernetes Engine 集群的序列。

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

  1. 创建两个集群。

  2. 创建 Skaffold 配置和 Kubernetes 清单以指定要部署的(预构建)容器映像。

  3. 定义 Cloud Deploy 交付流水线和部署目标(指向这两个集群)。

  4. 通过创建一个自动部署到第一个目标的版本来实例化交付流水线。

  5. 将版本提升到第二个目标。

  6. 在 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.

    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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • 如果您要使用现有项目来完成本指南,请验证您是否拥有完成本指南所需的权限。如果您创建了新项目,则您已拥有所需的权限。

  • Verify that billing is enabled for your Google Cloud project.

  • Enable the Cloud Deploy, Cloud Build, GKE, 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • Install the 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • 如果您要使用现有项目来完成本指南,请验证您是否拥有完成本指南所需的权限。如果您创建了新项目,则您已拥有所需的权限。

  • Verify that billing is enabled for your Google Cloud project.

  • Enable the Cloud Deploy, Cloud Build, GKE, 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • Install the Google Cloud CLI.

  • 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  • 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  • 所需的角色

    如需获得创建 Cloud Deploy 交付流水线和发布版本所需的权限,请让您的管理员为您授予项目的 Cloud Deploy Job Runner (roles/clouddeploy.jobrunner) IAM 角色。

    为确保 Cloud Deploy 服务账号拥有运行 Cloud Deploy 操作和部署到 Cloud Run 所需的权限,请让管理员向 Cloud Deploy 服务账号授予项目的以下 IAM 角色:

    如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    您的管理员还可以通过自定义角色或其他预定义角色向 Cloud Deploy 服务账号授予所需的权限。

    创建 Google Kubernetes Engine 集群

    使用默认设置创建两个集群 qsdevqsprod。集群的 Kubernetes API 端点必须可通过公共互联网访问。默认情况下,GKE 集群可从外部访问。

    gcloud container clusters create-auto quickstart-cluster-qsdev --project=PROJECT_ID --region=us-central1 && gcloud container clusters create-auto quickstart-cluster-qsprod --project=PROJECT_ID --region=us-central1
    

    准备 Skaffold 配置和 Kubernetes 清单

    Cloud Deploy 使用 Skaffold 提供要部署的内容的详细信息,以及如何为您的单独目标正确部署这些内容。

    在本快速入门中,您将创建一个 skaffold.yaml 文件,以标识要用于部署示例应用的 Kubernetes 清单。

    1. 打开一个终端窗口。

    2. 创建名为 deploy-gke-quickstart 的新目录并导航至该目录。

      mkdir deploy-gke-quickstart
      cd deploy-gke-quickstart
      
    3. 创建名为 skaffold.yaml 且包含以下内容的文件:

      apiVersion: skaffold/v4beta7
      kind: Config
      manifests:
        rawYaml:
        - k8s-*
      deploy:
        kubectl: {}
      

      此文件是一个最低限度的 Skaffold 配置,用于标识您的清单。在本快速入门中,您将创建该文件。不过,您也可以让 Cloud Deploy 为您创建一个,以用于简单的非生产应用。

      如需详细了解此文件,请参阅 skaffold.yaml 参考文档

    4. 创建一个名为 k8s-pod.yaml 的文件,其中包含以下内容:

      apiVersion: v1
      kind: Pod
      metadata:
        name: getting-started
      spec:
        containers:
        - name: nginx
          image: my-app-image
      

      此文件是一个基本的 Kubernetes 清单,应用于集群以部署应用。要部署的容器映像在此处设置为占位符 my-app-image,当您创建发布版本时,该占位符会被替换为特定映像。

    创建交付流水线和目标

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

    1. deploy-gke-quickstart 目录中,创建包含以下内容的新文件 clouddeploy.yaml

      apiVersion: deploy.cloud.google.com/v1
      kind: DeliveryPipeline
      metadata:
        name: my-gke-demo-app-1
      description: main application pipeline
      serialPipeline:
        stages:
        - targetId: qsdev
          profiles: []
        - targetId: qsprod
          profiles: []
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsdev
      description: development cluster
      gke:
        cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsdev
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: qsprod
      description: production cluster
      gke:
        cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
      
    2. 在 Cloud Deploy 服务中注册流水线和目标:

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

      现在,您已经有了包含目标的流水线,可以将应用部署到第一个目标了。

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

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

      打开“交付流水线”页面

      此时将显示您刚刚创建的交付流水线,并且目标列会列出了两个目标。

       Google Cloud 控制台中的交付流水线直观显示

    创建版本

    版本是表示要部署的更改的中央 Cloud Deploy 资源。交付流水线定义该版本的生命周期。请参阅 Cloud Deploy 服务架构,详细了解该生命周期。

    deploy-gke-quickstart 目录运行以下命令,以创建表示要部署的容器映像的 release 资源:

    gcloud deploy releases create test-release-001 \
      --project=PROJECT_ID \
      --region=us-central1 \
      --delivery-pipeline=my-gke-demo-app-1 \
      --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
    

    请注意 --images= 标志,您可以使用该标志将清单中的占位符 (my-app-image) 替换为特定的、经过 SHA 验证的映像。Google 建议您以这种方式将清单模板化,并在创建发布版本时使用 SHA 限定的映像名称。

    与所有版本一样(除非它们包含 --disable-initial-rollout),Cloud Deploy 还会自动创建部署资源。应用会自动部署到进展中的第一个目标。

    提升版本

    1. 交付流水线页面中,点击 my-gke-demo-app-1 流水线。

      打开“交付流水线”页面

      交付流水线详情页面显示交付流水线进展的图形表示。在本示例中,它显示版本已部署到 qsdev 目标。

       Google Cloud 控制台中的交付流水线直观显示

    2. 在交付流水线直观显示中的第一个目标上,点击提升

      此时将显示提升版本对话框。它会显示您要提升到的目标的详细信息。

    3. 点击提升

      该版本现已加入队列以部署到 qsprod。部署完成后,交付流水线直观显示会将它显示为已部署:

       Google Cloud 控制台中的交付流水线直观显示

    在 Google Cloud 控制台中查看结果

    1. 在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线页面,以查看您的 my-gke-demo-app-1 交付流水线。

      打开“交付流水线”页面

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

      流水线直观显示将显示应用在流水线中进展。

       Google Cloud 控制台中的交付流水线直观显示

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

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

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

       Google Cloud 控制台中的发布

    清理

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

    1. 删除 qsdev 集群:

      gcloud container clusters delete quickstart-cluster-qsdev --region=us-central1 --project=PROJECT_ID
      
    2. 删除 qsprod 集群:

      gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
      
    3. 删除交付流水线、目标、版本和发布:

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

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

      打开“Cloud Storage 浏览器”页面

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

    后续步骤