このページでは、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.properties
と ui.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 を構成するをご覧ください。