KustomizeでKubernetesマニフェストをいい感じに管理する
環境毎のKubernetesリソースを簡単管理
Kubernetesではリソースの構成や設定などをYAML形式で記述したマニフェストで管理を行います。
開発環境、本番環境など、環境が複数あると使用するクラスターが一つだけではなく、修正作業時のマニフェストの変更箇所も多くなって、手間や修正ミスのリスクも高まるのが悩ましい点です…
Kustomizeとは
KustomizeはKubernetesのマニフェスト管理ツールです。
各環境で共通となる箇所を定義したマニフェストファイル(base)と、個環境で差分となる箇所だけを定義したマニフェストファイル(overlays)を作成すると、Kustomizeはその情報を用いて、各環境のマニフェストファイルを生成してくれます。
環境差分を外出しする事で、共通箇所の変更の場合は一箇所(base)だけを修正すればOKとなるので、管理がラクになります。
ディレクトリ構成
baseディレクトリとoverlaysディレクトリを作成し、overlaysディレクトリ配下に各環境のディレクトリを作成します。
devとprodの2環境の場合ですと以下のようになります。
├── base
│ ├── deployment.yaml
│ ├── gateway.yaml
│ ├── http-route.yaml
│ ├── kustomization.yaml
│ └── service.yaml
└── overlays
├── dev
│ ├── deployment-patch.yaml
│ ├── gateway-patch.yaml
│ ├── http-route-patch.yaml
│ ├── kustomization.yaml
│ └── service-patch.yaml
└── prod
├── deployment-patch.yaml
├── gateway-patch.yaml
├── http-route-patch.yaml
├── kustomization.yaml
└── service-patch.yaml
またkustomization.yamlファイルを各ディレクトリに配置する必要があります。
kustomization.yamlには、どのファイルを使用してマニフェスト定義を作成するかをkustomizeコマンドに伝える役割があります。
overlays/dev/kustomization.yaml ですと以下のようになります。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namePrefix: dev-
resources:
- ../../base
patches:
- path: deployment-patch.yaml
- path: gateway-patch.yaml
- path: http-route-patch.yaml
- path: service-patch.yaml
ちなみに、kustomization.yamlの配置されたディレクトリ単位で、namePrefixなどを設定する事も可能です。
コマンド
インストール(Homebrewの場合)
brew install kustomize
その他のインストール方法はこちらです。
ビルド(baseとoverlaysの合成結果の確認)
# dev環境のビルド
kustomize build overlays/dev
デプロイ
# dev環境のデプロイ
kubectl apply -k overlays/dev
リソース書き換え(おまけ)
# imageで指定した値の書き換え
kustomize edit set image sample-image=nginx:1
こちらは、CI/CDパイプラインでKustomizeを使ってデプロイをする時にリソース更新が簡単になるので、おすすめのコマンドです。
まとめ
今回はKustomizeというツールを使用して、Kubernetesマニフェストを管理する方法について紹介しました。
修正箇所が少なくなり、環境差分も一目でわかるようになったので、だいぶ快適に管理できるようになりました。
ただファイル数自体は多くなってしまうので、リソース状況を見て導入検討いただければと思います!
AUTHOR

朝日放送テレビ株式会社 技術局 技術開発部
動画・広告配信を主に取り組んでおり、その傍らでシステムのモダナイズの提案・支援や開発も担当。アプリケーションからネットワーク・セキュリティ・インフラまで幅広く励んでます!




