
Kustomizeのimages transformerをCustomResourceでも使う
皆さんは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....