Kubernetes環境でアプリケーションをデプロイする際、開発(Dev)、ステージング(Staging)、運用(Production)環境によって設定が異なるのは一般的です。以前は、YAMLファイルをコピーして管理したり、複雑なHelmテンプレートを使用する必要がありました。Kustomizeは、このような不便さを解消するために登場した「テンプレート不要」の設定管理ツールです。🛠️

1. Kustomizeとは何か?
Kustomizeは、Kubernetesオブジェクト構成をユーザー定義(Customize)するためのツールです。2019年のKubernetes 1.14バージョンからkubectlに標準搭載されており、別途インストールすることなくkubectl apply -kコマンドで直接使用できます。
Kustomizeの最大の特徴は、オーバーレイ(Overlay)方式です。元のYAMLファイル(Base)はそのままに、環境ごとに変更する部分だけを別のファイルで定義して上書きする構造を持っています。
2. 主要概念:BaseとOverlays
Kustomizeを理解するためには、BaseとOverlaysの関係を把握することが重要です。🏗️
- Base (基本): すべての環境で共通して使用する標準マニフェストセットです。基本的なDeployment、Service、ConfigMapなどが含まれます。
- Overlays (オーバーレイ): 特定の環境に合わせてBaseを再定義するレイヤーです。例えば、運用環境ではレプリカ(Replicas)数を増やしたり、リソース制限を強化する設定を追加します。
3. 標準ディレクトリ構造
Kustomizeを使用する際は、以下のようなディレクトリ階層構造を推奨します。📂
.
└── deploy/
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
└── overlays/
├── dev/
│ ├── kustomization.yaml
│ └── patch-repl-count.yaml
└── prod/
├── kustomization.yaml
└── resource-limits.yaml
4. 主要機能とコード例 💻
4.1 kustomization.yaml構成要素
このファイルはKustomizeのエンジンとしての役割を果たします。どのリソースを含めるか、どの設定を変更するかを定義します。
# base/kustomization.yaml の例
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
4.2 patches (パッチ適用)
特定のフィールドのみを修正したい場合に使用します。例えば、運用環境でのみレプリカ数を5つに増やす場合などです。
# overlays/prod/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- target:
kind: Deployment
name: my-app
patch: |-
- op: replace
path: /spec/replicas
value: 5
4.3 Generators (ジェネレーター)
ファイルや環境変数リストからConfigMapとSecretを自動的に生成します。ファイルの内容が変更されると、ハッシュ値が自動的に更新され、Podのローリングアップデートを促します。🔄
# kustomization.yaml
configMapGenerator:
- name: app-config
files:
- config.properties
secretGenerator:
- name: db-secret
envs:
- .env.db
4.4 Transformers (トランスフォーマー)
すべてのリソースに共通の属性を一括適用します。
- namePrefix / nameSuffix: リソース名の前後に文字列を追加
- commonLabels: すべてのリソースにラベルを付与
- commonAnnotations: すべてのリソースにアノテーションを付与
- namespace: すべてのリソースのネームスペースを指定
5. Kustomizeの長所と短所 📊
| 区分 | 長所 | 短所 |
| — | — | — |
| 可読性 | 純粋なYAML形式を維持し、読みやすい | 複雑な条件文(if-else)処理が不可能 |
| 学習曲線 | テンプレート構文(Go template)の学習が不要 | ディレクトリ構造が複雑になると追跡が困難 |
| 統合性 | kubectlに内蔵されており、別途ツールが不要 | 環境間の差異が極端な場合、重複コードが発生する可能性あり |
| 運用 | GitOps(ArgoCDなど)との互換性が抜群 | 単純な値の置換以外に動的なロジックの実装が困難 |
—
6. 実行方法
設定が完了したら、次のコマンドで最終的にレンダリングされたYAMLを確認したり、直接デプロイしたりできます。
# レンダリング結果の確認 (ドライラン)
kubectl kustomize ./overlays/prod
# 実際のクラスターにデプロイ
kubectl apply -k ./overlays/prod
Kustomizeは、設定の再利用性を高め、環境ごとの違いを明確に管理できる強力なツールです。特に、テンプレートの複雑さなしにインフラをコードとして管理(IaC)したいチームにとって最適な選択肢です。🚀
コメントを残す