13.8.2. Kubernetes リソース
API 定義の一部としてトリガーを制御するためのフィールドセットを含む DeploymentConfigs および BuildConfigs とは異なり、Kubernetes リソースにはトリガー用のフィールドがありません。その代わりに、OpenShift Container Platform はアノテーションを使用してユーザーがトリガーを要求できるようにします。アノテーションは以下のように定義されます。
Key: image.openshift.io/triggers Value: array of triggers, where each item has the schema: [ { "from" :{ "kind": "ImageStreamTag", // required, the resource to trigger from, must be ImageStreamTag "name": "example:latest", // required, the name of an ImageStreamTag "namespace": "myapp", // optional, defaults to the namespace of the object }, // required, JSON path to change // Note that this field is limited today, and only accepts a very specific set // of inputs (a JSON path expression that precisely matches a container by ID or index). // For pods this would be "spec.containers[?(@.name='web')].image". "fieldPath": "spec.template.spec.containers[?(@.name='web')].image", // optional, set to true to temporarily disable this trigger. "paused": "false" }, ... ]
OpenShift Container Platform が Pod テンプレート (CronJobs、Deployments、StatefulSets、DaemonSets、Jobs、ReplicaSets、ReplicationControllers、および Pods のみ) とこのアノテーションの両方が指定されたコアの Kubernetes リソースを検出すると、トリガーが参照する ImageStreamTag に関連付けられているイメージを使用してオブジェクトの更新を試行します。この更新は、指定の fieldPath
に対して実行されます。
以下の例では、トリガーは example:latest
イメージストリームタグの更新時に実行されます。実行時に、オブジェクトの Pod テンプレートにある web
コンテナーへのイメージ参照が、新しいイメージの値に更新されます。Pod テンプレートがデプロイメント定義の一部である場合には、Pod テンプレートへの変更はデプロイメントを自動的にトリガーされて、新規イメージがロールアウトされます。
image.openshift.io/triggers=[{"from":{"kind":"ImageStreamTag","name":"example:latest"},"fieldPath":"spec.template.spec.containers[?(@.name='web')].image"}]
イメージトリガーをデプロイメントに追加する時に、oc set triggers
コマンドも使用できます。たとえば、以下のコマンドは example
という名前のデプロイメントにイメージ変更トリガーを追加し、example:latest
イメージストリームタグが更新されるとデプロイメント内の web
コンテナーがイメージの新規の値で更新されます。
$ oc set triggers deploy/example --from-image=example:latest -c web
デプロイメントが一時停止されない限り、この Pod テンプレートの更新により、デプロイメントはイメージの新規の値で自動的に実行されます。