|

2024-12-23

アプリ

KustomizeでKubernetesマニフェストをいい感じに管理する

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マニフェストを管理する方法について紹介しました。

修正箇所が少なくなり、環境差分も一目でわかるようになったので、だいぶ快適に管理できるようになりました。

ただファイル数自体は多くなってしまうので、リソース状況を見て導入検討いただければと思います!

 


この記事の著者

プロフィール画像

金谷 洋佑

朝日放送グループホールディングス株式会社 DX・メディアデザイン局 R&Dチーム

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