【kustomize】ConfigMap作成時にglobでファイル指定
はじめに
kustomizeでファイルからConfigMapを作成するときにglob(*
とか?
とか)を使ってファイルを指定する方法を紹介します。
configMapGenerator
については下記を参考にしてください。
kustomizeでconfigMapGenerator
はじめに kustomizeで`configMapGenerator`を使って、設定用のファイル
globを使ってConfigMap作成する方法
kustomizeでConfigMapを作成する場合にkustomization.yaml
の中でconfigMapGenerator
を使って下記のようにglobでファイルを指定したくなります。
1configMapGenerator:
2- name: some-name
3 files:
4 - configs/*.conf
5 - configs/config.d/*.conf
しかし、これはkustomizeではサポートされていません。一度Pull Requestまでは作成されたようですが、明示的に依存関係を宣言できるようにするためkustomization.yaml
でのglobサポートを禁止にしたみたいです。
Add glob support in configmap generator by Liujingfang1 · Pull Request #207 · kubernetes-sigs/kustomize
Fix #189
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...
では、どうしたらglobを使ってファイル指定ができるかというと、下記のようにkustomize edit add configmap
を使うことでglobを使ってファイルを指定することができます。
1kustomize edit add configmap some-name --from-files=somedir/*.conf
kustomize edit add configmap
はkustomization.yaml
を編集するコマンドなので、globを使って指定したファイルがkustomization.yaml
に追記されることになります。
実践:特定のディレクトリから1つのConfigMap作成
実際にkustomize edit add configmap
でglobを使ってみます。
作成するファイルとディレクトリは下記の通りです。
1.
2├── base
3│ ├── deployment.yaml
4│ └── kustomization.yaml
5└── overlays
6 └── dev
7 ├── common-conf
8 │ ├── config1.properties
9 │ └── config2.properties
10 └── kustomization.yaml
base
base配下のファイルを作成します。
deployment.yaml
は下記の通りです。ConfigMapをvolumeMountsしています。
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配下のファイルを作成します。
common-conf/config1.properties
とcommon-conf/config2.properties
を作成します。内容はなんでも大丈夫です。
1color=red
1color=blue
kustomization.yaml
は下記の通りです。この時点ではconfigMapGenerator
は記入しません。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3namePrefix: dev-
4commonLabels:
5 env: dev
6resources:
7- ./../../base
kustomize edit add configmap
必要なファイルは揃ったので、kustomize edit add configmap
でConfigMapを作成するファイルを指定します。
overlays/devで下記コマンドを実行します。
1kustomize edit add configmap config-file --from-file='common-conf/*'
overlays/dev/kustomization.yaml
を確認すると、下記のようにcommon-conf/
配下のファイルが追記されています。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3namePrefix: dev-
4commonLabels:
5 env: dev
6resources:
7- ./../../base
8configMapGenerator: # 追記されている
9- files:
10 - common-conf/config1.properties
11 - common-conf/config2.properties
12 name: config-file
ビルド
kustomizeを使ってDeploymentとConfigMapを作成します。
1kubectl apply -k overlays/dev
確認
2つのファイルからConfigMapが作成されていることが確認できます。
1❯ kubectl get cm
2NAME DATA AGE
3dev-config-file-864687f65g 2 11m
4
5❯ kubectl describe cm dev-config-file-864687f65g
6Name: dev-config-file-864687f65g
7Namespace: default
8Labels: env=dev
9Annotations: <none>
10
11Data
12====
13config1.properties:
14----
15color=red
16config2.properties:
17----
18color=blue
19
20BinaryData
21====
22
23Events: <none>
volumeMountsしたファイルも確認できます。
1❯ kubectl exec dev-myapp-5559d7f979-kwcxd -c nginx -- ls /etc/config
2config1.properties
3config2.properties
実践:複数のディレクトリから1つのConfigMap作成
次は、複数のディレクトリを指定してみます。
作成するファイルとディレクトリは下記の通りです。
1.
2├── base
3│ ├── deployment.yaml
4│ └── kustomization.yaml
5└── overlays
6 └── dev
7 ├── common-conf
8 │ ├── config1.properties
9 │ └── config2.properties
10 ├── dev-conf
11 │ ├── config3.properties
12 │ └── config4.properties
13 └── kustomization.yaml
base
base配下のファイルを作成します。
deployment.yaml
は下記の通りです。ConfigMapをvolumeMountsしています。
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配下のファイルを作成します。
common-conf配下にconfig1.properties
とconfig2.properties
、dev-conf配下にconfig3.properties
とconfig4.properties
を作成します。内容はなんでも大丈夫です。
1color=red
1color=blue
1color=green
1color=yellow
kustomization.yaml
は下記の通りです。この時点ではconfigMapGenerator
は記入しません。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3namePrefix: dev-
4commonLabels:
5 env: dev
6resources:
7- ./../../base
kustomize edit add configmap
必要なファイルは揃ったので、kustomize edit add configmap
でConfigMapを作成するファイルを指定します。
overlays/devで下記コマンドを実行します。
1kustomize edit add configmap config-file --from-file='common-conf/*'
2kustomize edit add configmap config-file --from-file='dev-conf/*'
overlays/dev/kustomization.yaml
を確認すると、下記のようにcommon-conf/
とdev-conf
配下のファイルが追記されています。
1apiVersion: kustomize.config.k8s.io/v1beta1
2kind: Kustomization
3namePrefix: dev-
4commonLabels:
5 env: dev
6resources:
7- ./../../base
8configMapGenerator: # 追記されている
9- files:
10 - common-conf/config1.properties
11 - common-conf/config2.properties
12 - dev-conf/config3.properties
13 - dev-conf/config4.properties
14 name: config-file
ビルド
kustomizeを使ってDeploymentとConfigMapを作成します。
1kubectl apply -k overlays/dev
確認
4つのファイルからConfigMapが作成されていることが確認できます。
1❯ kubectl get cm
2NAME DATA AGE
3dev-config-file-t4kc6gb797 4 21s
4
5❯ kubectl describe cm dev-config-file-t4kc6gb797
6Name: dev-config-file-t4kc6gb797
7Namespace: default
8Labels: env=dev
9Annotations: <none>
10
11Data
12====
13config3.properties:
14----
15color=green
16config4.properties:
17----
18color=yellow
19config1.properties:
20----
21color=red
22config2.properties:
23----
24color=blue
25
26BinaryData
27====
28
29Events: <none>
volumeMountsしたファイルも確認できます。
1❯ kubectl exec dev-myapp-86d7fbbc4-qkn8t -c nginx -- ls /etc/config
2config1.properties
3config2.properties
4config3.properties
5config4.properties
まとめ
configMapGenerator
ではglobは使えないkustomzie edit add configmap
ではglobが使える
参考
- Add glob support in configmap generator by Liujingfang1 · Pull Request #207 · kubernetes-sigs/kustomize
- configMapGenerator should allow directories as input, like kubectl · Issue #189 · kubernetes-sigs/kustomize
- Podを構成してConfigMapを使用する | Kubernetes
- Kustomize | SIG CLI