kustomizeを使った時に、単一のpatchを複数のResrouceに注入する方法 を調べました。patchMultipleObjectsを利用することで実現可能です。
概要
- kustomzieはStrategic Merge PatchとJSONを使ってリソースをカスタマイズします。
- その際に、1つのpatchを複数のリソースに適用することもできます。具体的には
patch
とTarget Selector
を指定する必要があります
Hello World
Deploymentリソースに対して、sidecar containerをinjectしてみます
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy1
spec:
template:
metadata:
labels:
old-label: old-value
spec:
containers:
- name: nginx
image: nginx
args:
- one
- two
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy2
spec:
template:
metadata:
labels:
key: value
spec:
containers:
- name: busybox
image: busybo
patch
sidecar containerをinjectするために、Strategic Merge Patchファイルを宣言します
apiVersion: apps/v1
kind: Deployment
metadata:
name: not-important
spec:
template:
spec:
containers:
- name: istio-proxy
image: docker.io/istio/proxyv2
args:
- proxy
- sideca
kustomization.yaml
patchs
フィールドにpatchを追加することで、Deploymentに対してpatchが適用されます。target:
がTarget Selector
です。今回はkind: Deployment
、つまりDeploymentのResrouce全てにpatchが適用されます。
resources:
- deployments.yaml
patches:
- path: patch.yaml
target:
kind: Deploymen
Target Selectorについて
- Target selectorが複数ある場合は、nameやリソース名、ラベル、annotationでの指定が可能。
labelSelector
とannotationSelector
はlabel seletorのconvension(規約)に従う必要がある。- 複数条件を指定した場合は、ANDで評価されます。(kustomizeは、patchを適用するために、
target
のすべてのフィールドがマッチするターゲットを選択します。) - 以下はDeploymentリソースかつapp=helloのラベルが付与されたリソースに対してinjectする例です。
target:
kind: Deployment
labelSelector: app=hello
以上です。kustomizeを使うことで極力DRYにYAMLをマネジメントしていくぞ!