環境毎の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マニフェストを管理する方法について紹介しました。
修正箇所が少なくなり、環境差分も一目でわかるようになったので、だいぶ快適に管理できるようになりました。
ただファイル数自体は多くなってしまうので、リソース状況を見て導入検討いただければと思います!