今まで kustomize を使って Deployment の replicas
を変更するときなどは kustomization.yaml
に patchesStrategicMerge
を設定していた.例えば,1年前に kustomize に入門したときに書いた以下の記事でもそういう手順になっている.
最近 kustomize のドキュメントを読み直していたら replicas
や images
など,簡単に kustomization.yaml
に設定できる機能があることに気付いた💡今まで知らなかった!検証も兼ねて試していく.
kustomize v4.2.0
なお,今回は kustomize v4.2.0 を使う.kubectl kustomize
コマンドだとバンドルされているバージョンが古い可能性があり,正確には kubectl v1.20 までは kustomize v2.0.3 がバンドルされている.詳しくは GitHub に載っている.
$ brew install kustomize $ kustomize version --short {kustomize/v4.2.0 2021-07-01T00:44:28+01:00 }
replicas
と images
を試す
まず,以下のようなディレクトリ構成で base/
と overlays/
を準備する.Namespace + Service + Deployment (nginx) という基本構成で,今回は overlays/dev/
に設定している通り dev 環境を kustomize で作る.
. ├── README.md ├── base │ ├── deployment.yaml │ ├── kustomization.yaml │ ├── namespace.yaml │ └── service.yaml └── overlays └── dev └── kustomization.yaml
以下に base/
の代表的なファイルを載せておく.ポイントは base/deployment.yaml
の replicas: 2
と image: nginx:1.20-alpine
で,今回は kustomize で replicas: 5
と image: nginx:1.21-alpine
に変更していく.
📁 base/kustomization.yaml
resources: - namespace.yaml - deployment.yaml - service.yaml
📁 base/deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.20-alpine
次に overlays/
の dev 環境用の kustomization.yaml
を載せる.ポイントは以下の2点となる.
replicas
: Deployment のレプリカ数をcount
として設定できるimages
: Deployment のイメージ名とタグ名をnewName
とnewTag
として設定できる
📁 overlays/dev/kustomization.yaml
resources: - ../../base namespace: kakakakakku-dev namePrefix: kakakakakku-dev- commonLabels: app: kakakakakku-dev replicas: - name: kakakakakku-dev-nginx count: 5 images: - name: nginx newName: nginx newTag: 1.21-alpine
さっそく kustomize build overlays/dev
コマンドを実行すると,期待通りに replicas: 5
と image: nginx:1.21-alpine
に変更できている💡簡単!これなら patchesStrategicMerge
を使わずに kustomization.yaml
だけでシンプルに設定できる.
apiVersion: v1 kind: Namespace metadata: labels: app: kakakakakku-dev name: kakakakakku-dev --- apiVersion: v1 kind: Service metadata: labels: app: kakakakakku-dev name: kakakakakku-dev-nginx namespace: kakakakakku-dev spec: ports: - name: http port: 80 protocol: TCP targetPort: 8080 selector: app: kakakakakku-dev type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: kakakakakku-dev name: kakakakakku-dev-nginx namespace: kakakakakku-dev spec: replicas: 5 selector: matchLabels: app: kakakakakku-dev template: metadata: labels: app: kakakakakku-dev spec: containers: - image: nginx:1.21-alpine name: nginx
patchesStrategicMerge
と組み合わせる
とは言え replicas
と images
では複雑な設定はできないため,要件によってはやはり patchesStrategicMerge
と組み合わせることになる.例えば nginx に加えて fluentbit をサイドカーとして追加する場合,images
ではイメージの追加には対応していなかったりする.以下のように overlays/dev/kustomization.yaml
に patchesStrategicMerge
を追加した.
📁 overlays/dev/kustomization.yaml
resources: - ../../base namespace: kakakakakku-dev namePrefix: kakakakakku-dev- commonLabels: app: kakakakakku-dev replicas: - name: kakakakakku-dev-nginx count: 5 images: - name: nginx newName: nginx newTag: 1.21-alpine patchesStrategicMerge: - deployment.yaml
そして overlays/dev/deployment.yaml
に追加する fluentbit を差分として設定する.
📁 overlays/dev/deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: template: spec: containers: - name: fluentbit image: fluent/fluent-bit:1.8
もう1度 kustomize build overlays/dev
コマンドを実行すると,今度は fluentbit も追加できている.
apiVersion: v1 kind: Namespace metadata: labels: app: kakakakakku-dev name: kakakakakku-dev --- apiVersion: v1 kind: Service metadata: labels: app: kakakakakku-dev name: kakakakakku-dev-nginx namespace: kakakakakku-dev spec: ports: - name: http port: 80 protocol: TCP targetPort: 8080 selector: app: kakakakakku-dev type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: kakakakakku-dev name: kakakakakku-dev-nginx namespace: kakakakakku-dev spec: replicas: 5 selector: matchLabels: app: kakakakakku-dev template: metadata: labels: app: kakakakakku-dev spec: containers: - image: fluent/fluent-bit:1.8 name: fluentbit - image: nginx:1.21-alpine name: nginx
まとめ
今まで kustomize で知らなかった replicas
と images
を使って,patchesStrategicMerge
を使わずに簡単にマニフェストを変更できた.要件次第では patchesStrategicMerge
と組み合わせることになるだろうけど,基本的な変更なら kustomization.yaml
だけで完結できそう.引き続き kustomize も勉強していくぞ!今回検証に使ったプロジェクトは以下で確認できる.