皆さんはKustomizeのimages transformerは使っていますか?kustomization.yamlに書く、こういうやつです:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
images:
- name: old-image
newName: new-image
newTag: v1.0.0
kustomization.yamlにこのimages:
というブロックを書くと、deployment.yamlでimage: old-image
と書かれている部分がimage: new-image:v1.0.0
に置き換えられます。これがimages transformerと呼ばれるもので、kustomizeのドキュメントではImageTagTransformer
のところとか、exampleのimages transformer
のところとかに説明が書いてあります。
扨、Kubernetesの大きな強みの一つとして、CustomResourceDefinitionを使用して独自のリソースを作成することができる、というものがあります。世の中にはいろいろなOSS CRDがありますが、今回話題にしたいのはDeploymentなどのようにコンテナイメージを指定するタイプのCustomResourceです。例えば、Argo WorkflowsのWorkflowリソースでは次の様にイメージを指定します:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: batchjob
spec:
entrypoint: main
templates:
- name: main
container:
image: old-image
しかしこの場合、kustomization.yamlでイメージを指定しても、old-image
を置き換えてくれません。
が、置き換えて欲しいですよね?
それ、images transformer configurationを書くことで実現できます。
上書きしたいリソースのkindと、イメージを指定するpathを書いた設定ファイルを用意するだけです。この例の場合、kindはWorkflow
で、pathはspec/templates/container/image
です。リストのインデックスとかは書く必要は無いです。設定ファイルは次の様になります:
images:
- path: spec/templates/container/image
kind: Workflow
これを例えば、images_transformer_configuration.yamlに保存したとすると、kustomization.yamlには次の様な記述を追加します:
configurations:
- images_transformer_configuration.yaml
あとはDeploymentの時と同様にimages:
ブロックを記述するだけです。
今回の例の全体としては次の様になります:
kustomization.yaml:
resources:
- workflow.yaml
configurations:
- images_transformer_configuration.yaml
images:
- name: old-image
newName: new-image
newTag: v1.0.0
workflow.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: batchjob
spec:
entrypoint: main
templates:
- name: main
container:
image: old-image
images_transformer_configuration.yaml:
images:
- path: spec/templates/container/image
kind: Workflow
これらを一つのディレクトリに置き、kustomize build
すると次の出力が得られます:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: batchjob
spec:
entrypoint: main
templates:
- container:
image: new-image:v1.0.0
name: main
以上です。なお、以上のことはkubernetes-sigs/kustomize/examples/transformerconfigs/images に書いてあります。