第9章 アプリケーションでの設定マップの使用


設定マップを使用すると、設定アーティファクトをイメージコンテンツから切り離し、コンテナー化されたアプリケーションを移植可能な状態に保つことができます。

以下のセクションでは、設定マップ を定義し、それらを作成および使用する方法を説明します。また、Pod で ConfigMap オブジェクトを使用するユースケースについて説明します。

9.1. 設定マップについて

以下のセクションを参照すると、config map を使用して、アプリケーションコードとは別に設定値を Pod に提供する方法を確認できます。

多くのアプリケーションには、設定ファイル、コマンドライン引数、および環境変数の組み合わせを使用した設定が必要です。OpenShift Container Platform では、これらの設定アーティファクトは、コンテナー化されたアプリケーションを移植可能な状態に保つためにイメージコンテンツから切り離されます。

ConfigMap オブジェクトは、コンテナーを OpenShift Container Platform に依存させないようにする一方で、コンテナーに設定データを注入するメカニズムを提供します。設定マップは、個々のプロパティーなどの粒度の細かい情報や、設定ファイル全体または JSON Blob などの粒度の粗い情報を保存するために使用できます。

ConfigMap オブジェクトは、Pod で使用したり、コントローラーなどのシステムコンポーネントの設定データを保存するために使用できる設定データのキーと値のペアを保持します。以下に例を示します。

ConfigMap オブジェクト定義

kind: ConfigMap
apiVersion: v1
metadata:
  creationTimestamp: 2016-02-18T19:14:38Z
  name: example-config
  namespace: my-namespace
data:
  example.property.1: hello
  example.property.2: world
  example.property.file: |-
    property.1=value-1
    property.2=value-2
    property.3=value-3
binaryData:
  bar: L3Jvb3QvMTAw

各項目の説明:

data
設定データを指定します。
binaryData.bar
バイナリー Java キーストアファイルなど、UTF8 以外のデータを含むファイルを指定します。Base 64 のファイルデータを入力します。
注記

イメージなどのバイナリーファイルから設定マップを作成する場合に、binaryData フィールドを使用できます。

設定データはさまざまな方法で Pod 内で使用できます。設定マップは以下を実行するために使用できます。

  • コンテナーへの環境変数値の設定
  • コンテナーのコマンドライン引数の設定
  • ボリュームの設定ファイルの設定

ユーザーとシステムコンポーネントの両方が設定データを設定マップに保存できます。

設定マップはシークレットに似ていますが、機密情報を含まない文字列の使用をより効果的にサポートするように設計されています。

9.1.1. 設定マップの制限

設定マップは、コンテンツを Pod で使用される前に作成する必要があります。

コントローラーは、設定データが不足していても、その状況を許容して作成できます。ケースごとに設定マップを使用して設定される個々のコンポーネントを参照してください。

ConfigMap オブジェクトはプロジェクト内にあります。

それらは同じプロジェクトの Pod によってのみ参照されます。

Kubelet は、API サーバーから取得する Pod の設定マップの使用のみをサポートします。

これには、CLI を使用して作成された Pod、またはレプリケーションコントローラーから間接的に作成された Pod が含まれます。これには、OpenShift Container Platform ノードの --manifest-url フラグ、その --config フラグ、またはその REST API を使用して作成された Pod は含まれません (これらは Pod を作成する一般的な方法ではありません)。

9.1.2. 設定マップを使用してコンテナーで環境変数を設定する

config map を使用して、コンテナーで個別の環境変数を設定するために使用したり、有効な環境変数名を生成するすべてのキーを使用してコンテナーで環境変数を設定するために使用したりすることができます。

以下の例の ConfigMap カスタムリソース (CR) には、2 つの環境変数が含まれています。

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm

各項目の説明:

metadata.name
config map の名前を指定します。
metadata.namespace
config map が存在するプロジェクトを指定します。設定マップは同じプロジェクトの Pod によってのみ参照されます。
data
注入する環境変数を指定します。

以下の例の ConfigMap (CR) には、1 つの環境変数が含まれています。

apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO

各項目の説明:

metadata.name
config map の名前を指定します。
metadata.namespace
config map が存在するプロジェクトを指定します。設定マップは同じプロジェクトの Pod によってのみ参照されます。
data
注入する環境変数を指定します。

手順

  • configMapKeyRef セクションを使用して、Pod のこの ConfigMap のキーを使用できます。

    特定の環境変数を注入するように設定されている Pod 仕様のサンプル

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "env" ]
          env:
            - name: SPECIAL_LEVEL_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.how
            - name: SPECIAL_TYPE_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.type
                  optional: true
          envFrom:
            - configMapRef:
                name: env-config
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      restartPolicy: Never

    各項目の説明:

    spec.containers.env
    config map から取得する環境変数を指定します。
    spec.containers.env.name
    キーの値を注入する Pod 環境変数の名前を指定します。
    spec.containers.env.valueFrom.configMapKeyRef.name
    特定の環境変数を取得する config map の名前を指定します。
    spec.containers.env.valueFrom.configMapKeyRef.key
    config map から取得する環境変数を指定します。
    spec.containers.env.valueFrom.configMapKeyRef.optional
    環境変数が省略可能であることを指定します。オプションとして、指定された config map とキーが存在しない場合でも、Pod は起動されます。
    spec.containers.envFrom.configMapRef
    環境変数をすべて取得する config map の名前を指定します。

    この Pod が実行されると、Pod のログには以下の出力が含まれます。

    SPECIAL_LEVEL_KEY=very
    log_level=INFO
    注記

    SPECIAL_TYPE_KEY=charm は出力例にリスト表示されません。optional: true が設定されているためです。

9.1.3. 設定マップを使用したコンテナーコマンドのコマンドライン引数の設定

Config map を使用すると、Kubernetes 置換構文 $(VAR_NAME) を使用して、コンテナー内のコマンドまたは引数の値を設定できます。

例として、以下の設定マップを見てみましょう。

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm

手順

  • コンテナー内のコマンドに値を注入するには、環境変数として使用するキーを使用する必要があります。次に、$(VAR_NAME) 構文を使用してコンテナーのコマンドでそれらを参照することができます。

    特定の環境変数を注入するように設定されている Pod 仕様のサンプル

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
          env:
            - name: SPECIAL_LEVEL_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.how
            - name: SPECIAL_TYPE_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.type
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      restartPolicy: Never

    各項目の説明:

    spec.containers.command
    環境変数として使用するキーで、コンテナー内のコマンドに注入する値を指定します。

    この Pod が実行されると、test-container コンテナーで実行される echo コマンドの出力は以下のようになります。

    very charm

9.1.4. 設定マップの使用によるボリュームへのコンテンツの挿入

config map を使用すると、ボリュームにコンテンツを注入できます。

以下の例の ConfigMap カスタムリソース (CR) には、2 つの環境変数が含まれています。

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm

以下の手順では、config map を使用してボリュームにコンテンツを注入するためのオプションを説明します。

手順

  • config map を使用してコンテンツをボリュームに注入するための最も基本的な方法は、キーがファイル名であり、ファイルの内容がキーの値になっているファイルでボリュームを設定する方法です。

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "cat", "/etc/config/special.how" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      volumes:
        - name: config-volume
          configMap:
            name: special-config
      restartPolicy: Never

    各項目の説明:

    spec.volumes.configMap.name

    キーを含むファイルを指定します。

    この Pod が実行されると、cat コマンドの出力は以下のようになります。

    very
  • 設定マップキーが投影されるボリューム内のパスを制御することもできます。

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "cat", "/etc/config/path/to/special-key" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      volumes:
        - name: config-volume
          configMap:
            name: special-config
            items:
            - key: special.how
              path: path/to/special-key
      restartPolicy: Never

    各項目の説明:

    spec.volumes.configMap.items.path
    config map キーへのパスを指定します。

    この Pod を実行すると、cat コマンドの出力は very です。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る