はじめに
kustomizeでconfigMapGenerator
を使って、設定用のファイルからConfigMapを作成してみます。
kustomizeの基礎については下記を参考にしてください。

configMapGenerator
configMapGenerator
は、ファイルやキー/バリューを直接指定することでConfigMapを作成することができます。
実際に使ってみる
実際にファイルからConfigMapを作成してみます。
作成するファイルとディレクトリ構造は下記の通りです。
.
├── base
│ ├── deployment.yaml
│ └── kustomization.yaml
└── overlays
└── dev
├── application.properties # ConfigMapを作成するファイル
└── kustomization.yaml
base
まずはbase配下のファイルを作成します。
deployment.yaml
は下記の通りです。ConfigMapをvolumeMoutsしています。
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: nginx
image: nginx:latest
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: config-file
kustomization.yaml
は下記の通りです。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
overlays/dev
次にoverlays/dev配下のファイルを作成します。
application.properties
を作成します。
このファイルからConfigMapを作成します。
ENV=dev
kustomization.yaml
は下記の通りです。configMapGenerator
で作成したapplication.properties
を指定しています。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namePrefix: dev-
commonLabels:
env: dev
resources:
- ./../../base
configMapGenerator:
- name: config-file
files:
- application.properties
ビルドする
kustomizeを使ってDeploymentとConfigMapを作成します。
kubectl apply -k overlays/dev
ConfigMapを確認
指定したファイル名をキー、ファイルの内容をバリューとしたConfigMapを確認できます。
❯ kubectl get cm
NAME DATA AGE
dev-config-file-5hhggh4mkk 1 18m
❯ kubectl describe cm dev-config-file-5hhggh4mkk
Name: dev-config-file-5hhggh4mkk
Namespace: default
Labels: env=dev
Annotations: <none>
Data
====
application.properties:
----
ENV=dev
BinaryData
====
Events: <none>
またvolumeMountしたパスを確認すると同じ内容のファイルが配置されていることがわかります。
❯ kubectl exec dev-myapp-b9977b6c8-zvxx2 -c nginx -- ls /etc/config
application.properties
❯ kubectl exec dev-myapp-b9977b6c8-zvxx2 -c nginx -- cat /etc/config/application.properties
ENV=dev
globのサポートについて
ファイルの指定にglob(*
とか?
とか)を使いたくなります。
globをサポートする機能は一度Pull Requestまで作成されたようですが、明示的に依存関係を宣言できるようにkustomizationファイルのconfigMapGenerator
でのglobサポートを禁止にしたようです。
代わりにkustomize edit add configmap
でglobが使えるようになっているみたいです。