ConfigMap


このページでは、Kubernetes の ConfigMap オブジェクトと Google Kubernetes Engine(GKE)での使用方法について説明します。

概要

ConfigMap は、構成ファイル、コマンドライン引数、環境変数などの非機密構成アーティファクトを、実行時に Pod コンテナやシステム コンポーネントにバインドします。

ConfigMap は、構成を Pod やコンポーネントから分離するため、ワークロードのポータビリティを維持できます。これにより、構成の変更や管理が容易になり、構成データが Pod 仕様に制約されなくなります。

ConfigMap の作成

次のコマンドを使用して、ConfigMap を作成できます。

kubectl create configmap NAME DATA

次のように置き換えます。

  • NAME: ConfigMap オブジェクトの名前。
  • DATA: ConfigMap の構成データ。次のいずれかを使用します。

    • --from-file フラグを使用して指定された、1 つ以上の構成ファイルを含むディレクトリへのパス
    • それぞれが --from-literal フラグを使用して指定された Key-Value ペア

kubectl create の詳細については、リファレンス ドキュメントをご覧ください。

または、YAML マニフェスト ファイルで ConfigMap オブジェクトを定義し、kubectl create -f FILE_NAME を使用してオブジェクトをデプロイする方法でも ConfigMap を作成することもできます。

ファイルから ConfigMap を作成する

1 つ以上のファイルから ConfigMap を作成するには、--from-file を使用します。ファイルに Key-Value ペアが含まれている場合、.properties.txt.env などの平文形式のファイルを指定できます。

ConfigMap ファイルを Git に保存することをおすすめします。これにより、継続的インテグレーションと継続的デリバリー(CI / CD)のパイプラインを利用できます。

単一のファイルまたは複数のファイルを渡すには、次のコマンドを実行します。

kubectl create configmap NAME \
    --from-file FILE_PATH_1 \
    --from-file FILE_PATH_2

次のように置き換えます。

  • NAME: ConfigMap オブジェクトの名前。
  • FILE_PATH_1: ファイルのパス(例: path/to/file.properties)。
  • FILE_PATH_2: 2 番目のファイルのパス(例: path/to/file2.properties)。

複数のファイルを含むディレクトリを渡すには、次のコマンドを実行します。

kubectl create configmap NAME \
    --from-file DIRECTORY

次のように置き換えます。

  • NAME: ConfigMap オブジェクトの名前。
  • DIRECTORY: ディレクトリ パス(例: path/to/directory)。

ConfigMap をファイルに基づいて作成する場合は、キーがデフォルトでファイルパスのベース名に設定され、値がデフォルトでファイルの内容に設定されます。代替キーを指定することもできます。

ディレクトリに基づいて ConfigMap を作成すると、ディレクトリ内の有効なキーがベース名になっている各ファイルが ConfigMap にパッケージ化されます。シンボリック リンク、デバイス、パイプなどの非正規ファイルは、kubectl によって無視されます。また、kubectl create configmap はサブディレクトリに再帰しないため、kubectl はサブディレクトリを無視します。

たとえば、次のコマンドは、game-configs というディレクトリから game-data という名前の ConfigMap を作成します。このディレクトリは game.propertiesui.properties という 2 つの properties ファイルを含みます。

kubectl create configmap game-data \
    --from-file game-configs/

kubectl get configmap game-data -o yaml を実行すると、次の出力が返されます。

apiVersion: v1
data:
  game.properties: |
    enemies=aliens
    lives=3
    ...
  ui.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true
    ...
kind: ConfigMap
metadata:
  creationTimestamp: ...
  name: game-data
  namespace: default
  resourceVersion: ...
  selfLink: /api/v1/namespaces/default/configmaps/game-data
  uid: ...

リテラル値から ConfigMap を作成する

リテラル値から ConfigMap を作成するには、--from-literal を使用します。

たとえば、次のコマンドは、2 つの Key-Value ペアを含む LITERAL_DATA という名前の ConfigMap を作成します。

kubectl create configmap LITERAL_DATA \
    --from-literal key1=VALUE_1 \
    --from-literal key2=VALUE_2

各 Key-Value ペアに対して --from-literal を指定します。

kubectl get configmap literal-data -o yaml を実行すると、次の出力が返されます。

apiVersion: v1
data:
  key1: VALUE_1
  key2: VALUE_2
kind: ConfigMap
metadata:
  creationTimestamp: ...
  name: LITERAL_DATA
  namespace: default
  resourceVersion: ....
  selfLink: /api/v1/namespaces/default/configmaps/literal-data
  uid: ...

ConfigMap を使用する

ワークロードで ConfigMap を使用するには、ConfigMap の値を参照する環境変数を指定するか、ConfigMap を含むボリュームをマウントします。詳細については、ConfigMap を使用するように Pod を構成するをご覧ください。

次のステップ