在 Cloud Deploy 中管理清单

本页介绍了如何配置 Cloud Deploy 以渲染交付流水线中每个目标的配置。

Cloud Deploy 使用 Skaffold 渲染 Kubernetes 清单。该服务支持渲染原始清单和更高级的清单管理工具,例如 HelmKustomizekpt

渲染过程包含两个阶段:

  1. 清单管理工具会生成清单。

  2. Skaffold 会将清单中的映像引用替换为您要在版本中部署的映像。

本页面包含使用 Helm 和 Kustomize 的配置示例。

使用 Skaffold 生成配置

如果您还没有 Skaffold 配置文件 (skaffold.yaml),则可以使用 Skaffold 根据代码库中的内容为您生成一个。

  1. 使用 Google Cloud CLI 安装 Skaffold:

    gcloud components install skaffold

  2. 在包含清单的代码库中运行 skaffold init

    skaffold init --skip-build

此命令会在代码库中创建一个 skaffold.yaml 文件。该文件引用该代码库中的清单。内容如下所示:

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: sample-app
manifests:
  rawYaml:
    - k8s-manifests/deployment.yaml
    - k8s-manifests/rbac.yaml
    - k8s-manifests/redis.yaml
    - k8s-manifests/service.yaml

渲染原始清单

原始清单是由 Helm 或 Kustomize 等工具管理的清单,因此在融合并部署到集群之前不需要任何预处理。

默认情况下,Cloud Deploy 使用 skaffold render 渲染 Kubernetes 清单,将未标记的映像名称替换为您要部署的容器映像的标记映像名称。然后,当您提升版本时,Cloud Deploy 使用 skaffold apply 应用清单并将映像部署到 Google Kubernetes Engine 集群。

基本配置中的 manifests 节如下所示:

manifests:
  rawYaml:
    - PATH_TO_MANIFEST

如需详细了解可在此处传递的值,请参阅 Skaffold 文档

使用 Helm 进行渲染

您可以使用 Cloud Deploy 来渲染 Helm 图表。为此,请在 Skaffold 配置文件的 deploy 节中添加 Helm 图表详细信息。

每个此类定义如下所示:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  helm:
    releases:
      - name: RELEASE_NAME
        chartPath: PATH_TO_HELM_CHART

其中:

RELEASE_NAME 是此版本的 Helm 图表实例的名称。

PATH_TO_HELM_CHART 是已打包的 Helm 图表或已解压缩的 Helm 图表目录的本地路径。

您可以使用其他 Helm 配置选项,如 Skaffold 文档中所述。

使用 Kustomize 进行渲染

您可以将 Kustomize 与 Cloud Deploy 搭配使用。为此,请从 skaffold.yaml 配置文件配置的 deploy 节中指向 Kustomization 文件。

skaffold.yaml 中的每个相应 profile 下,为您要对其使用 Kustomize 的每个目标添加单独的 Kustomize 配置。

每个此类定义如下所示:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  kustomize:
    paths:
      - PATH_TO_KUSTOMIZE

其中:

PATH_TO_KUSTOMIZE 指向您的 Kustomization 文件。默认值为 ["."]

您可以使用其他 Kustomize 配置选项,如 Skaffold 文档中所述

为每个目标配置不同的清单

通常,每个目标都需要略有不同的配置。例如,您的生产部署中的副本可能多于预演部署中的副本。

您可为每个目标提供不同的清单,方法是以不同 Skaffold 配置文件的形式提供每个变体。

包含原始清单的配置文件

使用原始清单时,您可以将 Cloud Deploy 指向其他文件,具体取决于目标。您可以按如下方式进行配置:

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      rawYaml:
        - prod.yaml
  - name: staging
    manifests:
      rawYaml:
        - staging.yaml

使用 Kustomize 的配置文件

以下是使用 Kustomize 将不同的配置文件用于预演和生产的示例 skaffold.yaml,其中每个配置文件指向不同的 Kustomization:

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      kustomize:
        paths:
          - environments/prod
  - name: staging
    manifests:
      kustomize:
        paths:
          - environments/staging

在交付流水线中引用的配置文件

skaffold.yaml 中定义的这些配置文件在交付流水线配置中针对每个目标引用:

serialPipeline:
  stages:
  - targetId: staging-target
    profiles:
    - staging
  - targetId: prod-target
    profiles:
    - prod

在创建版本时替换特定图片

清单可以使用占位符作为映像名称,您可以在创建版本时进行替换。

下面是一个包含图片占位符的清单示例:

apiVersion: v1
kind: Deployment
metadata:
  name: getting-started
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: my-app-image

创建版本时,您可以使用 --images= 标志来标识要部署的特定映像。例如,以下命令会创建一个版本,并将 SHA 限定的映像名称替换为占位符名称:

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

生成的呈现清单现在引用的是指定图片,而不是 my-app-image

后续步骤