将 Connect 网关与 Cloud Build 集成

此基本教程介绍如何将 Cloud Build 与 Connect 网关集成,从而为在多个不同环境中运行的 GKE 集群创建 CI/CD 流水线。

本教程假定您熟悉 Connect 网关指南前面的部分,并且熟悉 Cloud Build。以下说明使用需要一些次要脚本的 cloud-sdk 构建器映像(如下所示)。

准备工作

  • 确保您已安装以下命令行工具:

    如果您使用 Cloud Shell 作为与 Google Cloud 交互的 Shell 环境,则系统会为您安装这些工具。

  • 确保您已初始化用于您项目的 gcloud CLI。

  • 确保按照设置指南中的说明为项目启用 Connect 网关和其他必需的 API。

1. 向 Cloud Build 服务账号授予 IAM 角色

默认情况下,Cloud Build 使用 Google Cloud 服务账号运行所有必需的工作,地址格式为 MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com。您可以在 Google Cloud 控制台中的 Cloud Build - 设置下找到项目的这一服务账号电子邮件地址。

Cloud Build 设置页面的屏幕截图

按照网关设置指南中的授予 IAM 权限中的说明操作,向此账号授予所需的项目角色。

2. 为 Cloud Build 服务账号指定 RBAC 政策

按照网关设置指南中的配置 RBAC 政策中的说明操作,为 Cloud Build 服务账号授予您要使用的所有集群的适当权限。

我们强烈建议您使用 Policy Controller 在多个集群上部署和维护 RBAC 政策。

3. 创建 Cloud Build 流水线

Cloud Build 工作流需要 cloudbuild.yaml 文件来配置流水线。下面是一个简单的示例,将静态清单部署到两个不同的集群(一个 GKE 集群在 Google Cloud 上,一个在 VMware 上)。如需详细了解如何配置 Cloud Build 流水线,请参阅 Cloud Build 文档

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to cluster on Google Cloud
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-gke-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml

您可以将任何工作流放入 myapp.yaml 中以配置集群。示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

将配置推送到 Git 代码库后,Cloud Build 工作流会将所需应用部署到指定的集群。您还可以设置 Cloud Build 来检测关联的 Git 代码库中的更改,以触发自动应用更新或安装。

高级用法

由于我们的示例使用标准的 Cloud Build 概念,因此您可以进一步调整和自定义,以满足您的特定 CI/CD 需求。特别是,如果您想要从头开始构建映像并将其部署到流水线,则可以使用 gke-deploy 构建器的准备模式。例如,以下 Cloud Build 配置:

  1. 从 Git 代码库根目录中的 Dockerfile 构建 Docker 映像,并使用 Git SHA 进行标记。
  2. 将带有标记的映像推送到项目的 Container Registry
  3. 设置正确的映像标记,将输出清单放入 output/expanded 中,以在 manifest 目录中准备 Kubernetes 清单。
  4. 使用 Connect 网关在本地部署到 GKE 集群。
steps:
- name: 'gcr.io/cloud-builders/docker'
  id: "Build Container"
  args: ['build', '--tag=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
  id: "Push to GCR"
  args: ['push', 'gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA']
- name: "gcr.io/cloud-builders/gke-deploy"
  id: "Prepare Manifests"
  args:
  - prepare
  - --filename=manifests/
  - --image=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: "Deploy to cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded

请注意,在此示例中,我们必须创建一个映像拉取密钥,以授权本地 GKE 集群从 Container Registry 中拉取映像。

如需获得有关 Cloud Build 用法的更多提示,请参阅 Cloud Build 文档