【カスタマイズ】

Kustomize とは?

最終更新:
💡 元のファイルを汚さない、Kubernetesの透明シール式カスタマイズ

テンプレート言語を使わずにKubernetesのマニフェスト(YAML)をカスタマイズできるツール。共通の設定(base)にパッチを重ねて環境ごとの差分を管理する。

📌 このページのポイント
Kustomize: Base + Overlay パターン base/ deployment.yaml service.yaml (共通設定 = 変更しない) overlays/dev/ replicas: 1 image: app:dev kustomization.yaml overlays/prod/ replicas: 5 image: app:v2.1 kustomization.yaml kubectl apply -k base + overlay を マージして適用
KustomizeのBase + Overlayパターン
ひよこ ひよこ
Kustomizeってどんな仕組みなの?
ペンギン先生 ペンギン先生
共通のマニフェストを置いた「base」と、「overlays/dev」「overlays/prod」みたいに環境ごとの差分だけを書いた「overlay」を組み合わせるんだ。baseを書き換えずに環境ごとの設定を作れるのがポイントだよ。
ひよこ ひよこ
Helmみたいなテンプレートは使わないの?
ペンギン先生 ペンギン先生
使わないよ。Strategic Merge PatchやJSON Patch(RFC 6902)という形式で「この部分だけ上書き」と指定するんだ。元のファイルがテンプレート構文の入らない素のYAMLのままだから読みやすいんだよ。
ひよこ ひよこ
kubectlに最初から入ってるって本当?
ペンギン先生 ペンギン先生
本当だよ。Kubernetes 1.14からkubectlに組み込まれていて、「kubectl kustomize」で結果を確認し、「kubectl apply -k overlays/prod/」で適用できるんだ。ただkubectlに入っているKustomizeは単体版より古いことがあるから、新しい機能を使いたいときは単体版を使おうね。
ひよこ ひよこ
HelmとKustomizeは結局どう使い分ければいいの?
ペンギン先生 ペンギン先生
Helmはアプリに必要なリソース定義を「チャート」というパッケージにまとめ、values.yamlなどの値を渡してインストールする仕組み、Kustomizeは既存のYAMLにパッチを重ねる仕組みだよ。組み合わせることもできて、Helmの「--post-renderer」でHelmが生成したマニフェストをKustomizeで加工する例がHelmの公式ドキュメントで紹介されているよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Kustomize」って出てきたら「テンプレートなしでKubernetesの設定を環境ごとに変えられるツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Kustomize」 = カスタマイズ
💬 英語のCustomize(カスタマイズする)の頭文字をKubernetesのKにしたつづりだよ

参考資料

← 用語集にもどる