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