Help us understand the problem. What is going on with this article?

Kubernetes: ConfigMap / Secret の内容を一度に環境変数として読み込む (envFrom)

More than 1 year has passed since last update.

kubernetes v1.6.0 で追加された ConfigMap / Secret の内容を一度に Pod への環境変数として読み込むという機能 (envFrom) が便利だったのでご紹介します。

v1.6 以前の指定方法

v1.6 以前は ConfigMap / Secret のキーを環境変数として読み込む場合、以下のようにひとつづつキーを読み込まなければならず、キーが多い場合に冗長な記述となっていました。

kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    env:
    # 一つづつ環境変数に読み込まなければいけなかった
    - name: USERNAME
      valueFrom:
        configMapKeyRef:
          name: myconfig # ConfigMap の name
          key: USERNAME  # ConfigMap のキー名
    - name: PASSWORD
      valueFrom:
        configMapKeyRef:
          name: myconfig
          key: PASSWORD
    # 環境変数の数だけ繰り返し

v1.6 で追加された envFrom

v1.6.0 で下記のように envFrom という項目で ConfigMap または Secret の内容を一度に同名または prefix 付きの環境変数として読み込むことができようになりました。

以下では簡略のため Pod を例にしていますが Deployment や ReplicaSet でも同じ指定ができます。

apiVersion: v1
kind: Pod
metadata:
  name: envfrom-test
spec:
  containers:
  - name: nginx
    image: nginx:1.11
    envFrom:  # env ではなく envFrom
    - configMapRef:
        name: envfrom-test # ConfigMap の name を指定。すべてのキーが環境変数として展開される
      prefix: MY_PREFIX_     # 名前衝突しないように prefix を指定することもできる
    # Secret の場合は secretRef で Secret の name を指定

ConfigMap はキー名が環境変数として使われること以外、今までと変わりません。

kind: ConfigMap
apiVersion: v1
metadata:
  name: envfrom-test
data:
  # キー名が環境変数名として展開される
  URL: myurl
  USERNAME: myuser
  PASSWORD: mypassword

上記の例でデプロイした Pod の環境変数を kubectl exec を使って見てみます。指定した prefix + ConfigMap のキー名で環境変数に展開されていることがわかります。

$ kubectl exec envfrom-test env | grep MY_PREFIX
# ConfigMap に入っている 3つのキーが環境変数として自動的に設定されている
MY_PREFIX_PASSWORD=mypassword
MY_PREFIX_URL=myurl
MY_PREFIX_USERNAME=myuser

参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away