kustomizeでconfigMapGenerator
はじめに
kustomizeでconfigMapGenerator
を使って、設定用のファイルからConfigMapを作成してみます。
kustomizeの基礎については下記を参考にしてください。
【Kubernetes】これから始めるkustomize
はじめに これからkustomizeを使う人向けに、**kustomizeとは何か**、**実際
configMapGenerator
configMapGenerator
は、ファイルやキー/バリューを直接指定することでConfigMapを作成することができます。
configMapGenerator
Generate ConfigMap resources.
実際に使ってみる
実際にファイルからConfigMapを作成してみます。
作成するファイルとディレクトリ構造は下記の通りです。
1.
2├── base
3│ ├── deployment.yaml
4│ └── kustomization.yaml
5└── overlays
6 └── dev
7 ├── application.properties # ConfigMapを作成するファイル
8 └── kustomization.yaml
base
まずはbase配下のファイルを作成します。
deployment.yaml
は下記の通りです。ConfigMapをvolumeMoutsしています。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: myapp
5spec:
6 replicas: 1
7 selector:
8 matchLabels:
9 app: myapp
10 template:
11 metadata:
12 labels:
13 app: myapp
14 spec:
15 containers:
16 - name: nginx
17 image: nginx:latest
18 volumeMounts:
19 - name: config-volume
20 mountPath: /etc/config
21 volumes:
22 - name: config-volume
23 configMap:
24 name: config-file
kustomization.yaml
は下記の通りです。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3resources:
4- deployment.yaml
overlays/dev
次にoverlays/dev配下のファイルを作成します。
application.properties
を作成します。
このファイルからConfigMapを作成します。
1ENV=dev
kustomization.yaml
は下記の通りです。configMapGenerator
で作成したapplication.properties
を指定しています。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3namePrefix: dev-
4commonLabels:
5 env: dev
6resources:
7- ./../../base
8configMapGenerator:
9- name: config-file
10 files:
11 - application.properties
ビルドする
kustomizeを使ってDeploymentとConfigMapを作成します。
1kubectl apply -k overlays/dev
ConfigMapを確認
指定したファイル名をキー、ファイルの内容をバリューとしたConfigMapを確認できます。
1❯ kubectl get cm
2NAME DATA AGE
3dev-config-file-5hhggh4mkk 1 18m
4
5❯ kubectl describe cm dev-config-file-5hhggh4mkk
6Name: dev-config-file-5hhggh4mkk
7Namespace: default
8Labels: env=dev
9Annotations: <none>
10
11Data
12====
13application.properties:
14----
15ENV=dev
16
17BinaryData
18====
19
20Events: <none>
またvolumeMountしたパスを確認すると同じ内容のファイルが配置されていることがわかります。
1❯ kubectl exec dev-myapp-b9977b6c8-zvxx2 -c nginx -- ls /etc/config
2application.properties
3
4❯ kubectl exec dev-myapp-b9977b6c8-zvxx2 -c nginx -- cat /etc/config/application.properties
5ENV=dev
globのサポートについて
ファイルの指定にglob(*
とか?
とか)を使いたくなります。
globをサポートする機能は一度Pull Requestまで作成されたようですが、明示的に依存関係を宣言できるようにkustomizationファイルのconfigMapGenerator
でのglobサポートを禁止にしたようです。
Add glob support in configmap generator by Liujingfang1 · Pull Request #207 · kubernetes-sigs/kustomize
Fix #189
代わりにkustomize edit add configmap
でglobが使えるようになっているみたいです。
configMapGenerator should allow directories as input, like kubectl · Issue #189 · kubernetes-sigs/kustomize
Given this dir tree: configs/ ├── config.d/ │ ├── 10-input.conf │ ├── 50-filter.conf │ └── 90-output.conf ├── ssl.conf └── app.conf You can do the following with kubectl: kubectl create configmap m...
参考
- kubernetes-sigs/kustomize: Customization of kubernetes YAML configurations
- Guides | SIG CLI
- configMapGenerator | SIG CLI
- Secrets and ConfigMaps | SIG CLI
- Podを構成してConfigMapを使用する | Kubernetes