使用 Cloud Deploy 将应用部署到 GKE

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

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

  1. 创建两个集群。

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

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

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

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

  6. 在 Google Cloud 控制台中查看这两项发布。

准备工作

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

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

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

    启用 API

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

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

    转到“项目选择器”

  8. 确保您的 Google Cloud 项目已启用结算功能

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

    启用 API

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

    gcloud init
  12. 确保默认 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. 添加 Kubernetes 开发者权限:

      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"
      

      如果您在添加其中任一角色时遇到问题,请与您的项目管理员联系。

    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
      

创建 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 清单,会应用于集群以部署应用。

创建交付流水线和目标

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

  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

与所有版本一样(除非它们包含 --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 浏览器”页面

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

后续步骤