はじめに
Kubernetesではデータベースの接続先やアプリケーションのパラメータをConfigMapとしてPodとは別に管理することができます。
今回はコンテナ内の環境変数をConfigMapオブジェクトから設定する流れについて分かりやすく解説しました。
コマンド実行環境
$ kubectl version Client Version: version.Info{Major:"1", Minor:"15",...
ConfigMapを作成する
以下がConfigMapのマニフェストの例です。
$ cat nginx-cm.yaml apiVersion: v1 kind: ConfigMap metadata: name: nginx-cm data: TESTCM: hoge SAMPLECM: sample
data配下にKey:Value方式で値を設定できます。
今回は「TESTCM」というキーに対して「hoge」という設定値を指定したものと「SAMPLECM」というキーに対して「sample」という設定値を指定しました。
同ファイルはPodやDeploymentと同様に以下のように適用できます。
$ kubectl apply -f nginx-cm.yaml configmap/nginx-cm created
以下コマンドで作成したコンフィグマップが確認できます。
$ kubectl get configmap NAME DATA AGE nginx-cm 2 8s $ kubectl describe configmap nginx-cm Name: nginx-cm Namespace: default ... Data TESTCM: ---- hoge SAMPLECM: ---- sample Events: <none>
PodからConfigMapを読み込む
以下のデプロイメント用のYAMLにてnginx-cmを指定しました。
$ cat nginx-deployment-cmtest.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 env: - name: TESTCM valueFrom: configMapKeyRef: name: nginx-cm key: TESTCM
explainで詳細を確認すれば分かりますがConfigMapの指定方法は多岐に渡ります。
$ kubectl explain deployment.spec.template.spec.containers.env ... FIELDS: name <string> -required- value <string> valueFrom <Object>
今回はdeployment.spec.template.spec.containers.env.valueFrom.configMapKeyRef
でキーペアを指定しています。
yamlを見れば分かりますが、TESTCMのみを指定しているのでSAMPLECMは反映されません。.
Pod内の環境変数を確認する
デプロイメントを起動し
$ kubectl apply -f nginx-deployment-cmtest.yaml deployment.apps/nginx-deployment created
Pod内にログイン
$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-659cc859b9-slqwz 1/1 Running 0 7s $ kubectl exec -it nginx-deployment-659cc859b9-slqwz /bin/bash root@nginx-deployment-659cc859b9-slqwz:/#
Pod内で環境変数を確認すると指定した変数がPod内で有効であることが分かります。
root@nginx-deployment-659cc859b9-slqwz:/# echo $TESTCM hoge root@nginx-deployment-659cc859b9-slqwz:/# echo $SAMPLECM
終わりに
ConfigMapを利用すれば設定情報をアプリケーションから分離することができるので、本番環境用とテスト環境用の変数をPodとは別で持つことができます。
尚、デプロイメント側でConfigMapを読み込んでいるので事前にConfigMapが作成できていない場合は
Error: configmap "nginx-cm" not found
のようになり「CreateContainerConfigError」としてPodが起動できません。
以上、ConfigMapで環境変数を設定するハンズオンでした。ご参考になれば幸いです。