Kubernetes Learning 第20章:ConfigMapの詳細 〜アプリケーション設定をKubernetesで管理する〜

Kubernetesでアプリケーションを運用していると、「環境ごとに設定ファイルを変えたい」「機密ではない設定値を管理したい」といったケースが出てきます。そんな時に登場するのが ConfigMap(コンフィグマップ) です。

この章では、ConfigMapがどんな役割を果たし、どうやって使うのかを実例を交えて丁寧に解説します。


🧠 ConfigMapとは?

ConfigMapは、設定情報(Key-Value形式)をKubernetesクラスタ内で管理するための仕組みです。設定値をPodのコンテナに「注入」することで、アプリケーションの設定をKubernetes側で制御できます。

✅ どんな情報を入れる?

ConfigMapは、機密性のない設定値(例えば環境名やログレベル、外部APIのURLなど)を格納します。

例:

  • LOG_LEVEL=debug
  • ENV=staging
  • API_URL=https://api.example.com

☝️ パスワードなどの機密情報はConfigMapではなく、Secretを使います。


💡 なぜ使うの?

アプリケーションの設定を application.properties.env に書くと、コンテナイメージの中に組み込まれてしまいますよね。

でもこれでは、「本番用」と「開発用」で設定を切り替えるのが大変です。

ConfigMapを使うことで:

  • コンテナイメージは同じままで、
  • 環境ごとの設定だけ切り替えられる!

つまり、アプリケーションの設定をクラスタ側に委ねることで、柔軟で安全な構成管理が可能になります。


🛠️ ConfigMapの作り方

以下はConfigMapをYAMLで定義する基本的な方法です。

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  LOG_LEVEL: "debug"
  API_URL: "https://api.example.com"

作成コマンド:

kubectl apply -f my-configmap.yaml

🧪 Podでの使い方(例)

作ったConfigMapを、Podの中で使うにはいくつか方法があります。

① 環境変数として渡す

env:
  - name: LOG_LEVEL
    valueFrom:
      configMapKeyRef:
        name: my-config
        key: LOG_LEVEL

この方法だと、アプリケーションが環境変数から設定を読み込むようにしておけばOKです。


② ファイルとしてマウントする

volumeMounts:
  - name: config-volume
    mountPath: /etc/config

volumes:
  - name: config-volume
    configMap:
      name: my-config

このようにマウントすると、ConfigMap内の各キーがファイル名となり、値が中身になります。

# Pod内で確認
cat /etc/config/LOG_LEVEL
# => debug

📘 ConfigMapの操作コマンド

# 作成(直接キー指定)
kubectl create configmap my-config --from-literal=LOG_LEVEL=debug

# ファイルから作成
kubectl create configmap my-config --from-env-file=app.env

# 中身の確認
kubectl get configmap my-config -o yaml

🧩 応用:ConfigMapの更新とロールアウト

ConfigMapを更新しても、それを使っているPodは自動的には再起動されません。そのため、設定を反映させるには以下のような対応が必要です:

  • Deploymentにアノテーションを追加して手動ロールアウト
  • checksum をPod定義に入れて差分を検出して再起動

🎯 まとめ

項目内容
目的非機密の設定値をクラスタ内で管理・注入
使用方法環境変数として / ファイルとしてマウント
メリット設定とコードを分離できる、環境切り替えが簡単
注意点機密情報には使わない(→ Secretへ)、更新時の再起動が必要

mh

Related Posts

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

You Missed

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

  • 投稿者 mh
  • 6月 24, 2025
  • 88 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 101 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 102 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

  • 投稿者 mh
  • 6月 20, 2025
  • 119 views

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 112 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 124 views