部署到 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 控制台中打开 Kubernetes Engine 集群页面
    2. 在 Kubernetes Engine 集群页面上,点击部署
    3. 选择您的容器,然后点击继续。此时系统会显示“配置”部分。
    4. 在配置 YAML 下,点击查看 YAML 以获取示例 Kubernetes 资源文件。

必需的 IAM 权限

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

  1. 在 Google Cloud 控制台中,前往 Cloud Build 权限页面:

    前往权限

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

部署预构建的容器映像

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

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

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

    YAML

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

    JSON

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

    其中:

    • KUBERNETES_RESOURCE_FILE 是 Kubernetes 资源文件的路径或包含 Kubernetes 资源文件的目录路径。
    • CLUSTER_LOCATION 是集群所在的区域。
    • CLUSTER 是应用将部署到的 GKE 集群的名称。

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

  3. 开始构建:

    gcloud builds submit --region=LOCATION --project=PROJECT --config BUILD_CONFIG
    

    其中:

    • LOCATION支持的 build 位置之一。
    • PROJECT 是项目的 ID。
    • BUILD_CONFIG 是构建配置文件的名称。

构建和部署新容器映像

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

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

    YAML

    steps:
      # build the container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["build", "-t", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG", "."]
      # push container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["push", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG"]
      # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=KUBERNETES_RESOURCE_FILE
      - --image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG
      - --location=CLUSTER_LOCATION
      - --cluster=CLUSTER
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "build",
            "-t",
            "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG",
            "."
          ]
        },
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "push",
            "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG"
          ]
        },
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=KUBERNETES_RESOURCE_FILE",
            "--image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG",
            "--location=CLUSTER_LOCATION",
            "--cluster=CLUSTER"
          ]
        }
      ]
    }
    

    其中:

    • LOCATION支持的 build 位置之一。
    • PROJECT 是项目的 ID。
    • IMAGE_NAME 是您希望为容器映像指定的名称,通常为应用名称。
    • TAG 是容器映像的标记。
      • 如果每次提交都构建新的容器映像,最好使用提交短 SHA 作为标记。Cloud Build 以默认替代变量 $SHORT_SHA 提供它。
    • KUBERNETES_RESOURCE_FILE 是 Kubernetes 资源文件的路径或包含 Kubernetes 资源文件的目录路径。
    • CLUSTER 是应用将部署到的 GKE 集群的名称。
    • CLUSTER_LOCATION 是集群将部署到的区域。
  2. 开始构建:

    gcloud builds submit --region=LOCATION --project=PROJECT --config BUILD_CONFIG
    

    其中:

    • LOCATION支持的 build 区域之一。
    • PROJECT 是项目的 ID。
    • BUILD_CONFIG 是构建配置文件的名称。

自动部署

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

如需创建构建触发器:

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

    打开“触发器”页面

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

  3. 点击打开

  4. 点击创建触发器

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

    1. 输入触发器的名称。

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

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

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

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

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

      YAML

      steps:
      ...
      # deploy container image to GKE
      - name: "gcr.io/cloud-builders/gke-deploy"
        args:
        - run
        - --filename=KUBERNETES_RESOURCE_FILE
        - --image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME: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=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG",
              "--location=${_CLOUDSDK_COMPUTE_ZONE}",
              "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}"
            ]
          }
        ]
      }
      

      其中:

      • KUBERNETES_RESOURCE_FILE 是 Kubernetes 配置文件的路径或包含 Kubernetes 资源文件的目录路径。
      • PROJECT 是项目的 ID。
      • IMAGE_NAME 是您希望为容器映像指定的名称,通常为应用名称。
      • TAG 是容器映像的标记。

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

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

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

后续步骤