(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes入門】ConfigMapでPodの環境変数を設定する

スポンサーリンク

はじめに

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で環境変数を設定するハンズオンでした。ご参考になれば幸いです。