開発、ステージング、本番の各環境で同じコンテナイメージを実行する場合、それぞれ異なる構成値が必要になることがよくあります。ConfigMap を使用すると、これらの値をイメージとは別に保存できるため、イメージを再ビルドまたは再デプロイすることなく構成を変更できます。以降のセクションでは、環境変数、コマンドライン引数、ボリュームにマウントされたファイルの 3 つの注入方法について説明します。
前提条件
開始する前に、以下があることを確認してください:
少なくとも 1 つのノードを持つ Container Service for Kubernetes (ACK) クラスター
クラスターに接続するように設定された
kubectl
これらの YAML マニフェストは、ACK コンソール(https://cs.console.alibabacloud.com)から、クラスターに移動 → [ワークロード] > [デプロイメント] → [YAML から作成] の順に操作することで適用することもできます。ConfigMap の作成
以下のすべての例では、2 つのキーと値のペアを持つ special-config という名前の ConfigMap を参照します。
以下のマニフェストを適用して作成します:
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charmPod と ConfigMap は、同じクラスターおよび名前空間に存在する必要があります。
ConfigMap データを環境変数として注入
単一のキーの注入
valueFrom と configMapKeyRef を使用して、特定の ConfigMap キーを環境変数にマッピングします。
apiVersion: v1
kind: Pod
metadata:
name: config-pod-1
spec:
containers:
- name: test-container
image: busybox
command: ["/bin/sh", "-c", "env"]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config # 参照する ConfigMap
key: SPECIAL_LEVEL # ConfigMap 内のキー
restartPolicy: NeverPod が完了したら、注入された変数を確認します:
kubectl logs config-pod-1出力には以下が含まれます:
SPECIAL_LEVEL_KEY=veryすべてのキーの注入
envFrom と configMapRef を使用して、ConfigMap 内のすべてのキーを個別の環境変数としてロードします。各 ConfigMap キーが環境変数名になります。
apiVersion: v1
kind: Pod
metadata:
name: config-pod-2
spec:
containers:
- name: test-container
image: busybox
command: ["/bin/sh", "-c", "env"]
envFrom:
- configMapRef:
name: special-config
restartPolicy: Never確認:
kubectl logs config-pod-2期待される出力には以下が含まれます:
SPECIAL_LEVEL=very
SPECIAL_TYPE=charmConfigMap の値をコマンドライン引数として使用
コンテナの command フィールドで、$(VAR_NAME) 構文を使用して環境変数を参照します。まず、ConfigMap のキーを環境変数として注入し、次にコマンドでそれらを参照します。
apiVersion: v1
kind: Pod
metadata:
name: config-pod-3
spec:
containers:
- name: test-container
image: busybox
command: ["/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)"]
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_LEVEL
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_TYPE
restartPolicy: Never確認:
kubectl logs config-pod-3期待される出力:
very charmConfigMap をボリュームとしてマウント
ConfigMap をボリュームとしてマウントすると、各キーがファイルとして公開されます。キー名がファイル名になり、キーの値がファイルの内容になります。ファイルは mountPath で指定されたディレクトリに表示されます。
apiVersion: v1
kind: Pod
metadata:
name: config-pod-4
spec:
containers:
- name: test-container
image: busybox
command: ["/bin/sh", "-c", "ls /etc/config/"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: special-config
restartPolicy: Never確認:
kubectl logs config-pod-4期待される出力には、ConfigMap のキーごとに 1 つのファイル名がリストされます:
SPECIAL_TYPE
SPECIAL_LEVEL制限事項
同じクラスターと名前空間が必要
Pod は、同じクラスターおよび名前空間にある ConfigMap のみを参照できます。
envFrom での無効なキー名
有効な環境変数名ではないキーは、警告なしにスキップされます。Pod は起動しますが、スキップされたキーは InvalidEnvironmentVariableNames イベントとして記録されます。kubectl get events を実行して確認してください。
Pod の前に ConfigMap が存在する必要がある
Pod が存在しない ConfigMap を参照すると、Pod の起動に失敗します。参照される ConfigMap が存在しない場合でも Pod を起動できるようにするには、参照に optional: true を設定します:
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: SPECIAL_LEVEL
optional: true # special-config が存在しなくても Pod は起動します次のステップ
Pod で ConfigMap を使用するための設定 — 特定のキーをカスタムパスにマウントする方法や、ConfigMap の変更時の自動更新など、より高度なパターンを含む Kubernetes のアップストリームリファレンス。