×

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

OpenShift Container Platform 资源

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

触发 Kubernetes 资源

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

注释定义如下:

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 Container Platform 尝试使用当前与触发器引用的镜像流标签关联的镜像来更新对象。更新针对指定的 fieldPath 执行。

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

  • CronJobs

  • Deployments

  • StatefulSets

  • DaemonSets

  • Jobs

  • ReplicationControllers

  • Pods

在 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 模板更新会自动导致使用新镜像值进行部署。