kustomizeでconfigMapGenerator

2022.03.23
2024.03.24
Kubernetes
ConfigMapkustomize

はじめに

kustomizeでconfigMapGeneratorを使って、設定用のファイルからConfigMapを作成してみます。

kustomizeの基礎については下記を参考にしてください。

【Kubernetes】これから始める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

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

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...

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee