部署到 GKE

本页面介绍如何使用 Cloud Build 将应用部署到 Kubernetes。

Cloud Build 提供 gke-deploy 构建器,可让您将容器化应用部署到 GKE 集群。

gke-deploy是 Kubernetes 的命令行界面 kubectl 的封装容器。它通过以下操作采用 Google 推荐的做法将应用部署到 Kubernetes:

  • 更新应用的 Kubernetes 资源文件以使用容器映像的摘要,而非代码。

  • 向 Kubernetes 资源文件添加推荐的标签

  • 检索要部署映像的 GKE 集群的凭据。

  • 等待提交的 Kubernetes 资源文件准备就绪。

如果您想使用 kubectl 直接部署应用且不需要其他功能,Cloud Build 还提供 kubectl构建器,用于将应用部署到 GKE 集群。

准备工作

  • 如果您尚未创建 GKE 集群,请创建一个。

  • 使容器化应用处于源代码形式且 Dockerfile 就绪。您的源代码需要存储在代码库中,例如 Cloud Source Repositories、GitHub 或 Bitbucket

  • 您至少需要一个 Kubernetes 资源文件来描述用于运行应用的 Kubernetes 资源。如果您没有 Kubernetes 资源文件,请按以下步骤为应用生成一个:

    1. 在 Google Cloud Console 中打开 Kubernetes Engine 簇页面
    2. 在 Kubernetes Engine 集群页面上,点击部署
    3. 选择您的容器,然后点击继续。此时系统会显示“配置”部分。
    4. 在配置 YAML 下,点击查看 YAML 以获取示例 Kubernetes 资源文件。

必需的 IAM 权限

将 Google Kubernetes Engine Developer 角色添加到您的账号:

  1. 打开 Cloud Build 的“设置”页面:

    打开 Cloud Build 的“设置”页面

    您将会看到服务账号权限页面:

    “服务账号权限”页面的屏幕截图

  2. Kubernetes Engine Developer 角色的状态设置为已启用

部署预先构建的容器映像

如需使用 gke-deploy 部署特定版本的应用,请执行以下操作:

  1. 请确保您的 Kubernetes 资源文件引用了正确的容器图片标记或摘要。

  2. 在您的构建配置文件中添加 gke-deploy 步骤:

    YAML

    steps:
    ...
    # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=kubernetes-resource-file
      - --location=location
      - --cluster=cluster
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=kubernetes-resource-file",
            "--location=location",
            "--cluster=cluster"
          ]
        }
      ]
    }
    

    其中:

    • kubernetes-resource-file 是 Kubernetes 资源文件的文件路径或包含 Kubernetes 资源文件的目录路径。
    • cluster 是应用将部署到的 GKE 集群的名称。
    • location 是集群所在的地区/区域。

    如需详细了解可用标志,请参阅 gke-deploy run 标志

  3. 开始构建:

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    其中:

构建和部署新容器映像

如需构建新容器映像并部署新容器映像,请执行以下操作:

  1. 使用 --image 特性借助新容器映像更新您的 Kubernetes 资源文件:

    YAML

    steps:
      # build the container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["build", "-t", "gcr.io/project-id/image:tag", "."]
      # push container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["push", "gcr.io/project-id/image:tag"]
      # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=kubernetes-resource-file
      - --image=gcr.io/project-id/image:tag
      - --location=location
      - --cluster=cluster
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "build",
            "-t",
            "gcr.io/project-id/image:tag",
            "."
          ]
        },
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "push",
            "gcr.io/project-id/image:tag"
          ]
        },
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=kubernetes-resource-file",
            "--image=gcr.io/project-id/image:tag",
            "--location=location",
            "--cluster=cluster"
          ]
        }
      ]
    }
    

    其中:

    • project-id 是项目的 ID。
    • image 是所需的容器映像名称,通常为应用名称。
    • tag 是容器映像的标记。
      • 如果每次提交都构建新的容器映像,最好使用提交短 SHA 作为标记。Cloud Build 以默认替代变量 $SHORT_SHA 提供它。
    • kubernetes-resource-file 是 Kubernetes 资源文件的文件路径或包含 Kubernetes 资源文件的目录路径。
    • cluster 是应用将部署到的 GKE 集群的名称。
    • location 是集群将部署到的地区/区域。
  2. 开始构建:

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    其中:

自动部署

通过在 Cloud Build 中创建触发器,您可以自动将应用部署到 GKE。您可以配置触发器,以在您对代码进行更改时构建和部署映像。

如需创建构建触发器:

  1. 打开 Google Cloud 控制台中的触发器页面:

    打开“触发器”页面

  2. 从页面顶部的项目选择器下拉菜单中选择您的项目。

  3. 点击打开

  4. 点击创建触发器

    创建触发器页面上,输入以下设置:

    1. 输入触发器的名称。

    2. 选择用于启动触发器的代码库事件。

    3. 选择包含源代码和构建配置文件的代码库。

    4. 指定用于启动触发器的分支名称或标记名称的正则表达式。

    5. 为您的触发器选择配置

      如果选择 Cloud Build 配置文件,您可以通过提供变量名称以及要与该变量相关联的值来指定替代变量。在以下示例中,用户定义的替代变量 _CLOUDSDK_CONTAINER_CLUSTER 指定要部署到的集群,用户定义的替代变量 _CLOUDSDK_COMPUTE_ZONE 指定其位置。如果要部署到其他集群,您可以使用同一构建配置,只需要更改替代变量的值:

      YAML

      steps:
      ...
      # deploy container image to GKE
      - name: "gcr.io/cloud-builders/gke-deploy"
        args:
        - run
        - --filename=kubernetes-resource-file
        - --image=gcr.io/project-id/image:tag
        - --location=${_CLOUDSDK_COMPUTE_ZONE}
        - --cluster=${_CLOUDSDK_CONTAINER_CLUSTER}
      

      JSON

      {
        "steps": [
          {
            "name": "gcr.io/cloud-builders/gke-deploy",
            "args": [
              "run",
              "--filename=kubernetes-resource-file",
              "--image=gcr.io/project-id/image:tag",
              "--location=${_CLOUDSDK_COMPUTE_ZONE}",
              "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}"
            ]
          }
        ]
      }
      

      其中:

      • kubernetes-resource-file 是 Kubernetes 配置文件的文件路径或包含 Kubernetes 资源文件的目录路径。
      • project-id 是项目的 ID。
      • image 是所需的容器映像名称,通常为应用名称。
      • tag 是容器映像的标记。

      如需详细了解如何定义构建配置文件的替代变量,请参阅使用用户定义的替代变量

  5. 点击创建以保存您的构建触发器。

当您将代码推送到代码库时,Cloud Build 会自动触发构建。如需详细了解构建触发器,请参阅创建和管理构建触发器

后续步骤