【Kubernetes】Kustomizeのプラグインとは

2025.03.29
2025.03.29
Kubernetes
kustomize

はじめに

今回は、Kustomizeのプラグインについてざっと解説して、デモ用のプラグインを実際に動かしてみます。

Kustomizeのプラグインについて

Kustomizeのプラグインは、Kustomizeの機能を拡張するための仕組みです。プラグインを利用することで、標準のKustomizeでは実現できないような処理を組み込むことができます。

しかし、Kustomizeのプラグインは、まだalpha版であり、安定版ではないので、今後の仕様変更に注意が必要です。また、安定版に関する下記のIssueをみると、2025/03/29現在、安定版リリースに向けた動きがここ数年ないのが気になります。

Kustomize Plugin Graduation · Issue #2953 · kubernetes/enhancements

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種類に分けられます。(公式のドキュメントでは、GeneratorTransformerの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.yamlgeneratorstransformersvalidatorsのいずれかから参照するようにします。

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の値を指定します。

annotator.yaml
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を作成します。

service.yaml
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.yamlannotator.yamlを参照しています。

kustomization.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でできることを拡張できるので、必要に応じて利用てみるのも良いかもしれません。

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee