すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ConfigMap の使用

最終更新日:May 06, 2026

開発、ステージング、本番の各環境で同じコンテナイメージを実行する場合、それぞれ異なる構成値が必要になることがよくあります。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: charm
Pod と ConfigMap は、同じクラスターおよび名前空間に存在する必要があります。

ConfigMap データを環境変数として注入

単一のキーの注入

valueFromconfigMapKeyRef を使用して、特定の 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: Never

Pod が完了したら、注入された変数を確認します:

kubectl logs config-pod-1

出力には以下が含まれます:

SPECIAL_LEVEL_KEY=very

すべてのキーの注入

envFromconfigMapRef を使用して、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=charm

ConfigMap の値をコマンドライン引数として使用

コンテナの 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 charm

ConfigMap をボリュームとしてマウント

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 のアップストリームリファレンス。

参考情報