【Kubernetes】Kustomizeのプラグインとは
はじめに
今回は、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.yaml
Kustomizeでプラグインを実行
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