Skip to content
Latchkey

ConfigMap とは?Kubernetes の設定を外部化する

ConfigMap は、非機密の設定を key-value データとして保持し、それを Kubernetes が環境変数または mount されたファイルとして pod に注入します。

設定はコンテナイメージに焼き込むべきではありません - 同じイメージが、異なる設定で dev、staging、prod で動くべきです。ConfigMap は、Kubernetes がその非機密の設定を外部化する方法であり、1つのイメージを deploy 時に環境ごとに設定できるようにします。

何を保存するか

ConfigMap は key-value のペア(および config ファイル全体)の集まりです。非機密のデータ用です - feature flag、URL、チューニング値など。機密データは代わりに Secret に属します。

pod がどう消費するか

  • コンテナに注入される環境変数として。
  • コンテナが読む volume に mount されるファイルとして。
  • その値から供給されるコマンドライン引数として。

なぜ設定を外部化するのか

設定をイメージの外に保つことは、1つの不変イメージが環境間できれいに昇格できることを意味します - ConfigMap を変更し、build し直しはしません。また、環境固有の値を、version が固定された artifact の外に保ちます。

落とし穴: 更新と restart

ConfigMap からの env var の値は pod の起動時に読まれるため、ConfigMap を変更しても、restart するまで実行中の pod は更新されません。mount されたファイルの値はライブで更新できますが、アプリがそれらを読み直す必要があります。

CI/CD における ConfigMap

デリバリー pipeline は、対象環境の ConfigMap を Deployment と並べて apply するか、Helm chart 経由でテンプレート化します。イメージは同じままで、環境間で異なるのは ConfigMap だけです。

重要なポイント

  • ConfigMap は、非機密の設定を env var やファイルとして外部化します。
  • 1つの不変イメージを環境ごとに設定できるようにします。
  • env var の値は pod の起動時に読まれるため、変更を反映するには restart が必要です。

関連ガイド