Kustomize かすたまいず
Kubernetesマニフェストオーバーレイkubectl環境差分YAML
Kustomizeについて教えて
簡単に言うとこんな感じ!
KubernetesのYAML設定ファイルを「ベース+差分」の形で管理できるツールだよ。「開発環境と本番環境でほぼ同じ設定なのに、レプリカ数だけ違う」ってとき、丸ごとコピーせず”差分だけ”書けばOKなんだ!
Kustomizeとは
Kustomizeは、Kubernetesの設定ファイル(マニフェスト)をテンプレートエンジンを使わずに管理・カスタマイズするためのツールです。2019年にKubernetes本体(kubectl)に組み込まれ、現在は追加インストールなしで利用できます。
Kubernetesではアプリの設定をYAMLファイルで記述しますが、開発・ステージング・本番といった複数の環境で「ほぼ同じだが少し違う」設定が必要になることがよくあります。Kustomizeはベース(共通設定)とオーバーレイ(環境ごとの差分)という考え方で、この問題をシンプルに解決します。
HelmのようにYAMLにテンプレート構文({{ }}など)を埋め込む必要がなく、純粋なYAMLのまま管理できるのが最大の特徴です。コードレビューや差分確認がしやすく、Gitとの相性も抜群です。
Kustomizeの構造と仕組み
Kustomizeは「ベース」と「オーバーレイ」という2層構造で設定を管理します。
| 概念 | 役割 | 例 |
|---|---|---|
| ベース(base) | 全環境共通の設定をまとめたもの | Deployment・Serviceの基本定義 |
| オーバーレイ(overlay) | 環境ごとに上書きする差分設定 | 本番はレプリカ数3、開発は1 |
| kustomization.yaml | 何を読み込み、何を差分適用するかを宣言するファイル | resources・patchesを列挙 |
| パッチ(patch) | ベースの特定フィールドだけを上書きする小さなYAML | replicas: 3 だけを書く |
my-app/
├── base/ ← 共通設定
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
└── overlays/
├── dev/ ← 開発環境の差分
│ ├── patch-replicas.yaml
│ └── kustomization.yaml
└── prod/ ← 本番環境の差分
├── patch-replicas.yaml
└── kustomization.yaml
覚え方:「ベースはレシピ、オーバーレイはトッピング」
ピザのベース生地(共通)に、お好みのトッピング(環境差分)をのせるイメージ。生地を毎回作り直す必要はなく、トッピングだけ変えればよい!
kustomization.yamlの基本構文
# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
# overlays/prod/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
patches:
- patch-replicas.yaml
commonLabels:
env: production
歴史と背景
- 2017年頃 — Kubernetesが普及するにつれ「複数環境の設定管理」が課題に。HelmやJSONnetなどが登場するが、テンプレート構文の複雑さが問題視される
- 2018年 — GoogleエンジニアがKustomizeをオープンソースとして公開。「テンプレートなしで差分管理できる」コンセプトが注目を集める
- 2019年 — Kubernetes v1.14にて
kubectlにKustomizeが統合。kubectl apply -kコマンドで使えるように - 2020年以降 — ArgoCD・Flux(GitOpsツール)がKustomizeをネイティブサポート。GitOpsワークフローの標準的な構成管理ツールとして定着
- 現在 — スタンドアロン版(
kustomizeCLI)とkubectl組み込み版が並行メンテナンス。スタンドアロン版の方が機能追加が速い
KustomizeとHelmの比較
Kubernetesの設定管理ツールとしてよく比較されるのが Helm です。両者は思想が異なり、用途によって使い分けが重要です。
実務での選び方まとめ:
- 自社開発アプリを複数環境(dev/stg/prod)にデプロイしたい → Kustomize
- MySQLやPrometheusなどのOSSを手軽にインストールしたい → Helm
- 両方使いたい → ArgoCDなどのGitOpsツールで組み合わせることも可能
関連する規格・RFC
| 仕様・ドキュメント | 内容 |
|---|---|
| Kustomize公式ドキュメント | 公式の機能説明・チュートリアル |
| Kubernetes SIG-CLI | Kustomizeの開発・管理リポジトリ |
| KEP-0008 | kubectlへのKustomize統合に関するKubernetes Enhancement Proposal |