Kustomizeを使ってkubernetesのmanifestを環境毎に管理する
Kubernetesのyaml管理ツールKustomizeを使ってみたではmanifestのbaseとなる設定を作成しました。
Kustomizeではbaseに対してoverlaysと呼ばれる設定を定義して環境毎に設定を分割して適応します。
overlaysのサンプル
今回は以下のようにディレクトリを切ってoverlaysの設定を管理していきます。
.
├── base
│ ├── configMap.yaml
│ ├── deployment.yaml
│ ├── kustomization.yaml
│ └── service.yaml
└── overlays
├── dev
│ ├── deployment.yaml
│ └── kustomization.yaml
├── prod
│ └── ...
└── test
└── ...
以下は kustomize build base
の結果として出力される Deployment
の設定となります。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: hello
name: the-deployment
spec:
replicas: 3
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
deployment: hello
spec:
containers:
- command:
- /hello
- --port=8080
- --enableRiskyFeature=$(ENABLE_RISKY)
env:
- name: ALT_GREETING
valueFrom:
configMapKeyRef:
key: altGreeting
name: the-map
- name: ENABLE_RISKY
valueFrom:
configMapKeyRef:
key: enableRisky
name: the-map
image: monopole/hello:1
name: the-container
ports:
- containerPort: 8080
overlaysを使う場合、環境毎の設定は各環境名のディレクトリに配置されたkustomization.yamlに記述します。
例えば development.yaml のレプリカ数をoverlaysを使って変更する場合は以下のような設定を行います。環境を分割するついでにnamespaceなどメタデータも各環境に合わせて変更してみます。
- /overlays/dev/kustomization.yaml
bases:
- ../../base
namespace: dev-hello # namespaceを定義
namePrefix: dev- # nameに対してprefixを定義
patches: # overlaysで上書きする設定を記したファイル
- deployment.yaml
- /overlays/dev/development.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: the-deployment
spec:
replicas: 4
実際にこのoverlaysの設定をbaseに適応するためには以下のコマンドを使います。
kustomize build overlays/dev
実行すると以下のようなyamlファイルが生成されます。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: hello
name: dev-the-deployment # prefixにdev-が追加されている
namespace: dev-hello # namespaceが追加されている
spec:
replicas: 4 # レプリカ数が変更されいる
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
deployment: hello
spec:
containers:
- command:
- /hello
- --port=8080
- --enableRiskyFeature=$(ENABLE_RISKY)
env:
- name: ALT_GREETING
valueFrom:
configMapKeyRef:
key: altGreeting
name: dev-the-map
- name: ENABLE_RISKY
valueFrom:
configMapKeyRef:
key: enableRisky
name: dev-the-map
image: monopole/hello:1
name: the-container
ports:
- containerPort: 8080
きちんと overlays/dev
で記述した設定が反映されていることがわかります。
このようにKustomizeを使うと簡単にmanifestファイルを環境分けできる事がわかりました。
まとめ
Kustomizeのbaseとoverlaysを使ってmanifestファイルを環境毎に分割・さらに1つのyamlにパッケージングする事ができました。Kustomizeはとてもシンプルな構成となっていて、実際自分も1時間ほどドキュメントを眺めるだけで簡単に使う事ができました。
KustomizeはKubernetesの初学者が最初にyaml管理目的で採用するツールとしてはとても良いと思います。