更新 Kubernetes Manifests

本文档将会介绍如何在 Patch(Manifest) 阶段更新 Kubernetes 资源对象。将会包含以下几个操作说明:

  • 指定更新的 manifest
  • 指定更新内容
  • (可选)在更新内容里覆盖制品
  • (可选)覆盖特定的选项

指定更新的资源

  1. 在阶段下拉列表中选择「Patch(Manifest)」。

  1. 指定更新的 Kubernetes 资源,需要配置如下字段:
  • 云账号:管理 Kubernetes 资源的云账号
  • Namespace:资源所在的命名空间
  • 资源类型(如 Deployment、Service 等)
  • 名称:资源名称

指定更新的内容

更新内容与Deploy(Manifest)类似。与部署阶段不同的是,更新阶段的内容只需填写更新的资源清单即可,不必提供所有资源的清单。根据不同需求,Patch 内容有两种提供方式:

  • 静态:直接在阶段配置中填写
  • 动态:运行时绑定制品

指定静态内容

您可以在阶段配置中直接输入 YAML 配置。例如给 manifest 添加新标签:

metadata:
  labels:
    foo: bar

动态绑定

Deploy(Manifest)类似,您可以引用外部的 manifest 作为制品,制品必须是包含 patch 内容的文本文件。

假设您在部署流程中声明了 Patch(Manifest) 阶段需要引用的制品,那么在 Patch(Manifest) 阶段可以通过如下配置引用:

覆盖制品

当对 Kubernetes 资源对象使用 strategic 或 merge strategy 方式进行 Patch 操作时, Patch(Manifest) 阶段可以像部署阶段一样配置覆盖制品。

例如,假设部署流程中有如下 manifest 内容的更新阶段:

spec:
  template:
    spec:
      containers:
        - name: my-container
          image: lhkprod-docker.pkg.coding.net/cd-demo/release/nginx

假设您更新了 Docker 镜像 tag(my-image:2.0),并上传镜像至 Docker 仓库触发部署流程执行,Spinnaker 将会使用新版本的 Docker 镜像覆盖掉旧版本:

#...rest of manifest
containers:
  - name: my-container
    image: lhkprod-docker.pkg.coding.net/cd-demo/release/nginx:2.0

指定更新选项

  • 记录更新注解

默认是 true。此选项勾选后,Kubernetes 将会使用注解 kubernetes.io/change-cause 将更新的操作与内容记录至被更新的资源中。

  • 策略合并

strategic:默认选项。它是自定义版本的 JSON 合并更新,允许 Kubernetes 对象基于结构标签替换或者合并。当您需要在 pod spec 列表中添加注解、标签或容器而不是替换时非常有用。

json:使用标准的 RFC 6902 JSON patch 更新 manifest。

merge:使用 RFC 7386 JSON Merge Patch 更新 manifest。

上一篇人工确认
文档是否对您有用?
感谢反馈有用
感谢反馈没用