LoginSignup
70
44

More than 5 years have passed since last update.

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

Posted at

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

参考

70
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
44