はじめに
今回は、Kustomizeのプラグインについてざっと解説して、デモ用のプラグインを実際に動かしてみます。
Kustomizeのプラグインについて
Kustomizeのプラグインは、Kustomizeの機能を拡張するための仕組みです。プラグインを利用することで、標準のKustomizeでは実現できないような処理を組み込むことができます。
しかし、Kustomizeのプラグインは、まだalpha版であり、安定版ではないので、今後の仕様変更に注意が必要です。また、安定版に関する下記のIssueをみると、2025/03/29現在、安定版リリースに向けた動きがここ数年ないのが気になります。
Kustomize Plugin Graduation · Issue #2953 · kubernetes/enhancements
Kustomize Plugin Graduation One-line enhancement description (can be used as a release note): Converge Kustomize's various alpha extension mechanisms into a single KRM-driven feature that has an en...
標準機能でもできることはあるので、まずは標準機能で実現できるか確認してから、プラグインの利用を検討することをお勧めします。
Kustomize Built-Ins
Reference docs for Kustomize's built-in transformers and generators
プラグインの種類
Kustomizeのプラグインは、以下の3種類に分けられます。(公式のドキュメントでは、GeneratorとTransformerの2種類のみ言及されていますが、Validatorのプラグインも存在していたため、ここでは3種類に分けています。)
- Generator: マニフェストを生成するためのプラグイン
- Transformer: 既存のマニフェストを変換するためのプラグイン
- Validator: マニフェストの検証を行うためのプラグイン
プラグインの実行形式
Kustomizeのプラグインは、以下の2つの実行形式が推奨されています。
- Containerized KRM Function: コンテナ化されたKRM関数として実行される形式
- Exec KRM Function: KRM関数の実行可能ファイルとして実行される形式
2025/03/29現在、Kustomizeのプラグインでは、KRM(Kubernetes Resource Model)の仕様に従った形式で実行される上記2つが推奨されており、他の形式は非推奨となっています。また、公式ドキュメントとしては、セキュリティの観点から、Containerized KRM Functionの形式がより推奨されています。
プラグインの実行方法
Kustomizeのプラグインは、下記のようなKubernetesのマニフェストと同じような形式で設定されます。
1apiVersion: someteam.example.com/v1
2kind: ChartInflator
3metadata:
4 name: notImportantHere
5 annotations:
6 config.kubernetes.io/function: |
7 container:
8 image: example.docker.com/my-functions/chart-inflator:0.1.6
9spec:
10 chartName: minecraftプラグインの設定はkustomization.yamlのgenerators、transformers、validatorsのいずれかから参照するようにします。
1generators:
2- chartInflator.yaml
3transformers:
4- # transformer.yaml
5validators:
6- # validator.yamlまた、ビルドするときには、オプションが必要になります。
Containerized KRM Functionの場合は、--enable_alpha_pluginsオプションを指定します。
1kustomize build --enable_alpha_plugins .Exec KRM Functionの場合は、--enable_alpha_pluginsと--enable-execオプションを指定します。
1kustomize build --enable_alpha_plugins --enable-exec .デモプラグインで試してみる
実際に、デモ用のプラグインを動かしてみます。
今回は、デモ用のプラグインとして、ドキュメントで紹介されているAnnotationをつけるだけのサンプルプラグインのDockerイメージを用意しました。こちらのDockerイメージを使い、Containerized KRM Functionの形式で動かしてみます。
unknown link必要なファイルの作成
まず、必要なファイルを作成します。
作成するファイルとディレクトリ構成は以下のようになります。
1.
2├── annotator.yaml
3├── kustomization.yaml
4└── service.yamlまずは、プラグインの設定ファイルannotator.yamlを作成します。Dockerイメージを指定しつつ、valueにAnnotationの値を指定します。
1apiVersion: transformers.example.co/v1
2kind: ValueAnnotator
3metadata:
4 name: notImportantHere
5 annotations:
6 config.kubernetes.io/function: |
7 container:
8 image: monda00/kustomize-plugin-demo:1.0.0
9value: 'annotation value'次に、Kubernetesのマニフェストファイルservice.yamlを作成します。ここでは、LoadBalancerタイプのServiceを作成します。
1kind: Service
2apiVersion: v1
3metadata:
4 name: the-service
5spec:
6 type: LoadBalancer
7 ports:
8 - protocol: TCP
9 port: 8666
10 targetPort: 8080最後に、Kustomizeの設定ファイルkustomization.yamlを作成します。作成したservice.yamlとannotator.yamlを参照しています。
1resources:
2- service.yaml
3transformers:
4- annotator.yamlKustomizeでプラグインを実行
kustomizeコマンドを実行して、ビルドします。
1kustomize build --enable-alpha-plugins .ビルドが成功すると、以下のような出力が得られます。
1apiVersion: v1
2kind: Service
3metadata:
4 annotations:
5 custom.io/the-value: annotation value # 追加されたAnnotation
6 name: the-service
7spec:
8 ports:
9 - port: 8666
10 protocol: TCP
11 targetPort: 8080
12 type: LoadBalancerまとめ
Kustomizeのプラグインについて、ざっと解説しました。
まだalpha版で、安定版のリリースが進んでいないのは気になりますが、Kustomizeでできることを拡張できるので、必要に応じて利用てみるのも良いかもしれません。
参考
- Extending Kustomize | SIG CLI
- Kustomize Built-Ins | SIG CLI
- Kustomize Plugin Graduation · Issue #2953 · kubernetes/enhancements
- kustomize/examples/generatorOptions.md at master · kubernetes-sigs/kustomize
- kustomize/examples/transformerconfigs at master · kubernetes-sigs/kustomize
- kustomize/cmd/config/docs/api-conventions/functions-spec.md at master · kubernetes-sigs/kustomize




