Kustomize にて特定のリソースの一部分に変数を埋め込みたいときに、 かつては vars を使用していたが、kustomize v3.9 あたりからdeprecatedになり replacements を使用するよう警告が出るようになった。
vars とは結構書き方が変わるので使い方をメモする。
公式ドキュメント
https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/replacements/
試してみる
apiVersion: apps/v1
kind: Deployment
metadata:
name: myhello
spec:
selector:
matchLabels:
name: myhello
replicas: 1
template:
metadata:
labels:
name: myhello
spec:
containers:
- name: myhello
image: myhelloimage:0.0.1
env:
- name: MY_KEY
value: SHOULD_BE_REPLACEDapiVersion: v1
kind: ConfigMap
metadata:
name: application-cm
data:
MY_VALUE: hogeapiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
replacements:
- source:
kind: ConfigMap
name: application-cm
fieldPath: data.SECRET
targets:
- select:
kind: Deployment
name: myhello
fieldPaths:
- spec.template.spec.containers.[name=myhello].env.[name=MY_KEY].value
resources:
- deployment.yaml
- configmap.yamlkustomize build すると期待通り、envの値が無事書き換わる。
apiVersion: v1
data:
MY_VALUE: hoge
kind: ConfigMap
metadata:
name: application-cm
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myhello
spec:
replicas: 1
selector:
matchLabels:
name: myhello
template:
metadata:
labels:
name: myhello
spec:
containers:
- env:
- name: MY_KEY
value: hoge
image: myhelloimage:0.0.1
name: myhello一部のリソースだけ適用しない
すべてのDeploymentリソースに適用する、ただし特定のリソースにだけ適用したくないといった指定もすることができる。
targets.reject に除外したい条件を書く。
replacements:
- source:
kind: ConfigMap
name: application-cm
fieldPath: data.SECRET
targets:
- select:
kind: Deployment
reject:
- kind: Deployment
name: newworld
fieldPaths:
- spec.template.spec.containers.[name=myhello].env.[name=MY_KEY].value