ConfigMap

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

概要

ConfigMap は、実行時に構成ファイル、コマンドライン引数、環境変数、ポート番号、およびその他の構成成果物を Pod のコンテナやシステム コンポーネントにバインドします。ConfigMap を使用すると、Pod やコンポーネントから構成を分離できるため、ワークロードの移植性が維持されます。これにより、構成の変更や管理が容易になり、構成データが Pod 仕様に制約されなくなります。

ConfigMap は、機密性が低く、暗号化されていない構成情報を保存して共有するのに便利です。クラスタで機密情報を使用するには、Secret を使用する必要があります。

ConfigMap の作成

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

kubectl create configmap name data

ここで

  • name は、ConfigMap オブジェクトの名前です。
  • data は次のいずれかです。

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

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

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

ファイルから

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

Git に ConfigMap ファイルを保存することをおすすめします。こうすることで、継続的インテグレーションとデリバリー(CI/CD)パイプラインを利用できます。このワークフローの使用の詳細については、Cloud Build を使用した GitOps スタイルの継続的デリバリーをご覧ください。

単一のファイルまたは複数のファイルを渡すことができます。

kubectl create configmap name --from-file path/to/file.properties --from-file path/to/file2.properties

複数のファイルを含むディレクトリを渡すこともできます。

kubectl create configmap name --from-file path/to/directory

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

ディレクトリに基づく ConfigMap の場合は、ディレクトリ内の有効なキーがベース名になっている各ファイルが ConfigMap にパッケージ化されます。シンボリック リンク、デバイス、パイプなどの非正規ファイルは、kubectl によって無視されます。サブディレクトリも無視されます。kubectl create configmap は、サブディレクトリへの再帰適用を行いません。

たとえば、次のコマンドは、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 を作成するには、--from-literal を使用します。

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

kubectl create configmap literal-data --from-literal key1=value1 --from-literal key2=value2

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

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

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

ConfigMap の使用

ワークロードで ConfigMap を使用するには、ConfigMap の値を参照する環境変数を指定するか、ConfigMap を含むボリュームをマウントします。

ConfigMap の使用方法については、ConfigMap を使用するように Pod を構成するをご覧ください。

次のステップ