kustomizeでconfigMapGenerator

スポンサーリンク

はじめに

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

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

【Kubernetes】これから始めるkustomize
はじめにこれからkustomizeを使う人向けに、kustomizeとは何か、実際にどう使うのかを解説していきたいと思います。kustomizeとはkustomizeとは、Kubernetesのマニフェスト管理ツールです。開発環境、...

configMapGenerator

configMapGeneratorは、ファイルやキー/バリューを直接指定することでConfigMapを作成することができます。

configMapGenerator
Generate ConfigMap resources.

実際に使ってみる

実際にファイルから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サポートを禁止にしたようです。

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

参考

タイトルとURLをコピーしました