ConfigMapの使い方
Kubernetesを使う時、アプリの設定とかをコンテナイメージに埋め込むのではなく実行時に設定したい場合、ConfigMapを使う。
ConfigMapはkey-valueで情報を保持しているんだけど、これがなかなか便利で、ファイルから作る*1とkey: ファイル名
、value: ファイルの内容
みたいに勝手にやってくれる*2。ディレクトリから作る*3と、そのディレクトリに含まれるファイルを全部読み込んで、それぞれkey-valueとして保持してくれたりもする。
説明するより例の方が分かり易いので実際のコマンドで説明。
ConfigMapの定義
$ ls redis-config $ cat redis-config maxmemory 2mb maxmemory-policy allkeys-lru
であった時に、このファイルからConfigMapを作成してみると
$ kubectl create configmap <名前> --from-file=redis-config configmap "<名前>" created $ kubectl get configmap <名前> apiVersion: v1 data: redis-config: |- maxmemory 2mb maxmemory-policy allkeys-lru kind: ConfigMap metadata: creationTimestamp: xxxxxxx name: <名前> namespace: default resourceVersion: "6872" selfLink: /api/v1/namespaces/default/configmaps/<名前> uid: 67b1ce21-125c-11e8-9a96-d4c7541dd274
のようになる。dataのところを見ると、ファイル名がキーになって、対応する内容がファイルの中身になっていることが確認できる。
ConfigMapの利用
ConfigMapに保存してある情報をPodで使う時は、ConfigMapの内容をファイルとして書き込んだvolumeを定義し、それをPodがmountして使う。
例
$ cat redis-pod.yaml apiVersion: v1 kind: Pod metadata: name: redis spec: containers: - name: redis image: kubernetes/redis:v1 env: - name: MASTER value: "true" ports: - containerPort: 6379 volumeMounts: - mountPath: /redis-master-data name: data - mountPath: /redis-master name: config volumes: - name: data emptyDir: {} - name: config configMap: name: example-redis-config items: - key: redis-config path: redis.conf
上記のように、volumeを定義するときに、ConfigMapを選び、keyでデータを、pathでボリューム内に作成するファイルを指定する。ここでは、redis.confというファイル(中身はConfigMap内のredis-configで指定したデータ)があるボリュームが作成される。Podではそれを/redis-master
ディレクトリにマウントしていることから、Pod内ではConfigMapの内容は/redis-master/redis.conf
として参照可能となる。
$ kubectl apply -f redis-pod.yaml pod "redis" created $ kubectl exec -it redis /bin/bash root@redis:/data# ls /redis-master redis.conf root@redis:/data# cat /redis-master/redis.conf maxmemory 2mb maxmemory-policy allkeys-lru
[参考]