1. 導入
Kubernetesのマニフェスト管理において、環境ごとに少しずつ異なる設定(レプリカ数、環境変数、ConfigMapなど)を管理するのは骨が折れる作業です。Helmは強力ですが、学習コストやテンプレートの複雑さがボトルネックになることもあります。そこで本稿では、Kubernetes標準搭載ツールである「Kustomize」を用い、kubectlコマンド単体でマニフェストの生成と適用を完結させる方法を解説します。この手法は外部依存を最小限に抑えられ、CI/CDパイプラインを劇的にシンプルにできます。
2. 基礎知識
Kustomizeとは、マニフェストをテンプレート化せずに、ベースとなる設定に対して環境ごとの差分(パッチ)を重ね合わせる(オーバーレイ)ツールです。
・Base: 全環境共通のマニフェスト定義。
・Overlay: 環境(dev, stg, prod等)ごとの差分定義。
・kustomization.yaml: リソースの組み合わせやパッチを定義する制御ファイル。
3. 実装/解決策
基本戦略は、`kubectl kustomize`コマンドで生成したYAMLを、パイプラインを通じて`kubectl apply -f -`に流し込むというパイプライン構造です。これにより、一時ファイルを作成することなく、メモリ上で動的にマニフェストを生成・適用できます。
ディレクトリ構成例:
/base/deployment.yaml
/base/kustomization.yaml
/overlays/dev/kustomization.yaml
4. サンプルプログラム
以下のコマンドは、特定の環境ディレクトリを指定してマニフェストを構築し、現在のコンテキストのクラスタへ即座に適用する実用例です。
指定した環境(ここではoverlays/dev)の定義をビルドし、標準出力へ出す
kubectl kustomize ./overlays/dev
ビルド結果をそのままkubectl applyにパイプしてデプロイする(実用コマンド)
kubectl kustomize ./overlays/dev | kubectl apply -f –
応用:差分を確認してから適用する(ドライラン)
kubectl kustomize ./overlays/dev | kubectl diff -f –
応用:特定の名前空間へ強制的に適用する
kubectl kustomize ./overlays/dev | kubectl apply -n my-app-namespace -f –
5. 応用・注意点
注意点1: パイプの失敗に備える
`kubectl kustomize | kubectl apply`のようにパイプを使う場合、前段のコマンドが失敗しても後段のapplyが実行されないよう、bashであれば `set -o pipefail` をスクリプトの先頭に記述することを強く推奨します。
注意点2: 構成の複雑化を避ける
Kustomizeは便利ですが、階層を深くしすぎると「結局、今の環境でどんなパラメータが適用されているか」が見えづらくなります。`kubectl kustomize`コマンドを叩いて、手元で生成されたYAMLを確認する癖をつけましょう。
現場でのTips:
CI/CD環境では `kustomize build` コマンドを使うことも多いですが、`kubectl kustomize` は kubectl のバージョンと密結合しているため、ローカル開発環境とCI間で挙動の差異が発生しにくいのが利点です。まずはこのパイプライン手法でマニフェスト管理を自動化し、徐々に複雑なパッチ適用へ移行するのが最も堅実なアプローチです。

コメント