対象のフィールドの値を null
としてパッチすることでフィールドそのものを削除できます。
kustomize version
{Version:3.5.4 GitCommit:3af514fa9f85430f0c1557c4a0291e62112ab026 BuildDate:2020-01-17T14:23:25+00:00 GoOs:darwin GoArch:amd64}
例えば次のような Pod マニフェストがあるとします。
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: env-config
key: log_level
restartPolicy: Never
このマニフェストの環境変数 LOG_LEVEL
は ConfigMap から値を取得するように設定されていますが、これを直接 INFO
に設定したい。つまり次のように env.value
フィールドを値を INFO
として新たに追加し、既存の env.valueFrom
フィールドを削除したいとします。
--- a/pod.yaml
+++ b/pod.yaml
@@ -9,8 +9,5 @@ spec:
command: [ "/bin/sh", "-c", "env" ]
env:
- name: LOG_LEVEL
- valueFrom:
- configMapKeyRef:
- name: env-config
- key: log_level
+ value: INFO
restartPolicy: Never
ここで次のような $patch :delete
を使用して env.valueFrom
フィールドを削除しようとしますが、
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- pod.yaml
patchesStrategicMerge:
- |-
apiVersion: apps/v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
env:
- name: LOG_LEVEL
value: INFO
valueFrom:
$patch: delete
値は消えてもフィールド自体は残ってしまい、これをそのまま適用しようとしてもバリデーションエラーになります。
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- command:
- /bin/sh
- -c
- env
env:
- name: LOG_LEVEL
value: INFO
valueFrom: {} # <-------- Here
image: k8s.gcr.io/busybox
name: test-container
restartPolicy: Never
ここでは削除したい対象のフィールドの値を null
でパッチすることで、
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- pod.yaml
patchesStrategicMerge:
- |-
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
env:
- name: LOG_LEVEL
value: INFO
valueFrom: null
フィールドそのものも削除できます。
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- command:
- /bin/sh
- -c
- env
env:
- name: LOG_LEVEL
value: INFO
image: k8s.gcr.io/busybox
name: test-container
restartPolicy: Never