本文へスキップ
BecomeCoder

Kubernetesコース · 第5章 設定とストレージ ― 状態をどう持つか · レッスン26

環境変数とボリュームでの注入

ローカル実施

導入

ConfigMap と Secret の値を Pod に渡す方法は、実は大きく2通りあります。環境変数として渡すか、ファイルとしてマウント(配置)するか。それぞれ得意な場面が違うので、両方を対比して押さえましょう。

説明

方法1:環境変数として渡す。 アプリが環境変数から設定を読む作りなら、これが手軽です。キーを1つずつ選ぶ valueFrom と、全部まとめて渡す envFrom があります。

    env:
      - name: API_URL                    # 1つだけ選んで渡す
        valueFrom:
          configMapKeyRef:
            name: app-config
            key: API_URL
    envFrom:
      - configMapRef:                    # ConfigMapの全キーをまとめて渡す
          name: app-config

方法2:ボリュームとしてファイルにマウントする。 ConfigMap/Secret の各キーをファイルとしてコンテナ内のディレクトリに置きます。設定ファイル(config.json や証明書など)を丸ごと読み込むアプリに向いています。

spec:
  containers:
    - name: web
      image: myapp:1.0
      volumeMounts:
        - name: config-vol
          mountPath: /etc/config      # ここにファイルとして現れる
  volumes:
    - name: config-vol
      configMap:
        name: app-config              # 各キーが /etc/config/<キー名> になる

使い分けの目安はこうです。

環境変数で渡すファイルでマウント
向いている値短い単発の値(URL、フラグ)設定ファイル・証明書・大きめの値
起動後の変更反映されない(再起動が必要)マウント元を更新すると反映され得る
読み方process.env 等で1個ずつファイルとして読み込む
graph TB
    CM["ConfigMap / Secret"]
    CM -->|"env / envFrom"| E["環境変数として注入<br/>短い値向き"]
    CM -->|"volumeMounts"| F["ファイルとしてマウント<br/>設定ファイル向き"]
    E --> Pod["Pod"]
    F --> Pod

どちらか一方が正解ではありません。「短い値は環境変数、ファイルはマウント」と覚え、アプリの読み方に合わせて選べば十分です。