Kustomizeを使う前後の例を読んで構造を捉える
Kustomizeを使わない例 (before)
code:dir
.
├── development
│ ├── deployment.yaml
│ └── service.yaml
└── production
├── deployment.yaml
└── service.yaml
環境ごとに完全なyamlを書くことになる
development
code:./development/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
ports:
- containerPort: 80
resources:
limits:
cpu: "500m" # 開発環境用のCPU制限(Kustomizeではパッチで上書きしていた)
code:./development/service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 80
prd
code:./production/deployment.yaml
# CPU制限値だけが変更されている。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
ports:
- containerPort: 80
resources:
limits:
cpu: "2000m" # 本番用に高めのCPU制限(Kustomizeではパッチで上書きしていた)
code:./production/service.yaml
# ./development/service.yamlと全く同じ内容
...
運用のコマンド例
code:bash
# 開発環境に適用
kubectl apply -f ~/someApp-no-kustomize/development/
# 本番環境に適用
kubectl apply -f ~/someApp-no-kustomize/production/
Kustomizeを使ったもの
code:dir
.
├── base
│ ├── deployment.yaml
│ ├── kustomization.yaml
│ └── service.yaml
└── overlays
├── development
│ ├── cpu_count.yaml
│ ├── kustomization.yaml
│ └── replica_count.yaml
└── production
├── cpu_count.yaml
├── kustomization.yaml
└── replica_count.yaml
Kustomizeのbase/
kustomization.yamlは、雑に言えば index.tsみたいなやつで、その階層のエントリファイルになるmrsekut.icon
code:./base/kustomization.yaml
# ベース環境の kustomization ファイル。
# Deployment と Service をリソースとして参照。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
code:./base/deployment.yaml
# ベースの Deployment 定義。オーバーレイ側からこの内容がパッチで上書きされる。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1 # デフォルトのレプリカ数(オーバーレイでは未変更)
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx # ベースイメージ(オーバーレイでは未変更)
ports:
- containerPort: 80
code:./base/service.yaml
# Deployment に紐づくシンプルな Service 定義。オーバーレイからの変更はなし。
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 80
Kustomize/overlays/
dev
code:./overlays/development/kustomization.yaml
# development 環境用のオーバーレイ定義。
# base を参照しつつ、cpu_count.yaml でリソース制限を上書き。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base # 相対パスでベースの定義を読み込む
patches:
- path: cpu_count.yaml # 上書き(patch)ファイルの指定
- path: replica_count.yaml
code:./overlays/development/cpu_count.yaml
# ベースの deployment.yaml を部分的に上書き(patch)するファイル。
# この開発環境用パッチでは CPU リソース制限を 500m に設定。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp # 上書き対象のリソース名(必須)
spec:
template:
spec:
containers:
- name: myapp # コンテナ名が一致する箇所に patch を適用
resources:
limits:
cpu: "500m"
code:./overlays/development/replica_count.yaml
# 開発環境ではレプリカ数を 2 に設定(ベースの 1 を上書き)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 2
prd
code:./overlays/production/kustomization.yaml
# production 環境用のオーバーレイ。
# base を継承し、別の CPU 制限値を適用するようにしている。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- path: cpu_count.yaml
- path: replica_count.yaml
code:./overlays/production/cpu_count.yaml
# 本番環境用の patch ファイル。CPU 制限を 2000m に増加させている。
# 開発環境との差分をこのファイルで表現している。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
spec:
containers:
- name: myapp
resources:
limits:
cpu: "2000m"
code:/overlays/production/replica_count.yaml
# 本番環境ではレプリカ数を 5 に設定(開発との差分)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 5
感想
この規模の構成だと、絶対にbeforeの方がシンプルだなという気持ちになる
無駄に複雑になりすぎ、というかymlを採用した理由が全く持って理解できないmrsekut.icon