本页介绍了如何配置 Cloud Deploy 以渲染交付流水线中每个目标的配置。
Cloud Deploy 使用 Skaffold 渲染 Kubernetes 清单。该服务支持渲染原始清单和更高级的清单管理工具,例如 Helm、Kustomize 和 kpt。
渲染过程包含两个阶段:
清单管理工具会生成清单。
Skaffold 会将清单中的映像引用替换为您要在版本中部署的映像。
本页面包含使用 Helm 和 Kustomize 的配置示例。
使用 Skaffold 生成配置
如果您还没有 Skaffold 配置文件 (skaffold.yaml
),则可以使用 Skaffold 根据代码库中的内容为您生成一个。
使用 Google Cloud CLI 安装 Skaffold:
gcloud components install skaffold
在包含清单的代码库中运行
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
。
后续步骤
- 详细了解 Cloud Deploy 交付流水线配置。
- 试用 Cloud Deploy Skaffold 配置文件演示
- 详细了解 Kustomize。
- 详细了解 Helm。
- 详细了解 Kpt
- 考虑使用 Artifact Registry 来存储 Helm 图表或 Kustomizations 等工件。