×

当镜像流标签更新为指向新的镜像时,OpenShift Dedicated 可以自动采取行动,将新的镜像推出到使用旧镜像的资源。根据引用镜像流标签的资源类型,您可以通过不同的方式配置此行为。

OpenShift Dedicated 资源

OpenShift Dedicated 部署配置和构建配置可以由镜像流标签的更改自动触发。可以使用更新的镜像流标签引用的镜像的新值来运行触发的操作。

触发 Kubernetes 资源

Kubernetes 资源没有触发字段,这与部署和构建配置不同,部署和构建配置在其 API 定义中包含一组用于控制触发器的字段。相反,您可以使用 OpenShift Dedicated 中的注释来请求触发。

注释定义如下:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    image.openshift.io/triggers:
      [
       {
         "from": {
           "kind": "ImageStreamTag", (1)
           "name": "example:latest", (2)
           "namespace": "myapp" (3)
         },
         "fieldPath": "spec.template.spec.containers[?(@.name==\"web\")].image", (4)
         "paused": false (5)
       },
      # ...
      ]
# ...
1 必需:kind 是要从中触发的资源,必须为 ImageStreamTag
2 必需:name 必须是镜像流标签的名称。
3 可选:namespace 默认值为对象的命名空间。
4 必需:fieldPath 是要更改的 JSON 路径。此字段是有限制的,仅接受与容器 ID 或索引精确匹配的 JSON 路径表达式。对于 Pod,JSON 路径为 spec.containers[?(@.name='web')].image
5 可选:paused 指示触发器是否暂停,默认值为 false。将 paused 设置为 true 可暂时禁用此触发器。

当核心 Kubernetes 资源之一同时包含 Pod 模板和此注释时,OpenShift Dedicated 会尝试使用当前与触发器引用的镜像流标签关联的镜像来更新对象。更新针对指定的 fieldPath 执行。

可以同时包含 Pod 模板和注释的核心 Kubernetes 资源示例包括:

  • CronJob

  • Deployment

  • StatefulSet

  • DaemonSet

  • Job

  • ReplicationController

  • Pod

在 Kubernetes 资源上设置镜像触发器

向部署添加镜像触发器时,可以使用 oc set triggers 命令。例如,此过程中的示例命令向名为 example 的部署添加镜像更改触发器,以便当 example:latest 镜像流标签更新时,部署内的 web 容器会使用新的镜像值进行更新。此命令会在部署资源上设置正确的 image.openshift.io/triggers 注释。

步骤
  • 输入 oc set triggers 命令来触发 Kubernetes 资源

    $ oc set triggers deploy/example --from-image=example:latest -c web
    带有触发器注释的示例部署
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        image.openshift.io/triggers: '[{"from":{"kind":"ImageStreamTag","name":"example:latest"},"fieldPath":"spec.template.spec.containers[?(@.name==\"container\")].image"}]'
    # ...

    除非部署已暂停,否则此 Pod 模板更新会自动导致使用新的镜像值进行部署。