Kubernetes Learning 第22章:環境変数との使い分け 〜Kubernetesで設定値をどこに置くか?〜

Kubernetesでアプリケーションを動かすとき、設定値(DBの接続先、APIキー、アプリのモードなど)をどうやって渡すかは重要な設計ポイントです。

特に以下のような手段があります:

  • 環境変数
  • ConfigMap
  • Secret
  • コマンドライン引数
  • マウントされた設定ファイル

この章では 「環境変数 vs ConfigMap / Secret」 に焦点を当てて、それぞれどんなときに使うのが適切なのかを見ていきます。


🧪 そもそも「環境変数」とは?

アプリケーションのプロセスが起動したときに参照できるキーと値のセットです。よく使われる例:

ENV=production
DB_HOST=mysql.local

環境変数はコードの外に設定を分離できるため、12 Factor App の原則にも合致しています。

Kubernetesでは以下のように環境変数を指定できます。

env:
  - name: APP_MODE
    value: "production"

🔄 ConfigMap / Secretを使った環境変数の指定

Kubernetesでは、ConfigMapやSecretの値を「環境変数として注入」できます。

env:
  - name: DB_HOST
    valueFrom:
      configMapKeyRef:
        name: db-config
        key: host

Secretから渡すときも同様です。


🎯 使い分けの基本方針

方法向いているケース具体例
環境変数(直接指定)値が固定で、変更の可能性が低いENV=productionPORT=8080
ConfigMapアプリ設定や接続先など、非機密な設定を外部化DBのホスト名、アプリの表示モード、ログレベルなど
SecretパスワードやAPIキーなど機密情報DBパスワード、トークン、証明書など

🟡 環境変数(直接指定)のメリットと注意点

メリット

  • シンプルで記述が少ない
  • すぐに試したいときに便利

⚠️ 注意点

  • 値の変更にはPodの再デプロイが必要
  • ソース管理に載せると危険(特に機密情報)

🟢 ConfigMap / Secretを経由するメリット

  • 再利用性が高い(複数のPodで共通化できる)
  • 分離性が高い(設定とPod定義を切り離せる)
  • 更新が管理しやすい(kubectlで適用しやすい)

たとえば、以下のような構成がよくあります:

ConfigMap:
  app.env: "staging"
  log.level: "debug"

Secret:
  db.password: "pa$$word123"

これらを必要なコンテナに環境変数として注入すれば、アプリ側の書き方は変わりません。


📝 実運用でのTips

シーンおすすめの方法理由
ステージング環境の切り替えConfigMap頻繁に変更したい非機密な情報だから
データベース接続情報Secret + 環境変数機密なのでSecret、環境変数で渡すとアプリが扱いやすい
一時的なテスト値環境変数(直接指定)手軽で即反映できるため(ただしGitには注意)

🔚 まとめ

比較項目環境変数(直接指定)ConfigMapSecret
安全性
柔軟性
保守性
使いどころ固定値や実験用非機密な外部設定機密情報の安全な管理

📌 最後に

Kubernetesに慣れてくると、設定の「渡し方」「管理方法」は自然と設計に組み込まれていきます。

「環境変数だけで管理する」のは小規模な開発では便利ですが、運用環境では ConfigMapやSecretに切り出すのが一般的です。再利用性とセキュリティが格段に上がるからです。

mh

Related Posts

Kubernetes Learning 第25章:Replica数と冗長性の設計 〜止まらないシステムのために〜

Kubernetes Learning 第24章:Liveness / Readiness Probe 〜Podの健康チェック〜

You Missed

Kubernetes Learning 第25章:Replica数と冗長性の設計 〜止まらないシステムのために〜

  • 投稿者 mh
  • 5月 29, 2025
  • 1 views

Android application development 第29章:キーストアと署名

  • 投稿者 mh
  • 5月 29, 2025
  • 1 views

現場で使えるChrome DevTools実践ガイド 第5章:Consoleパネルの活用

  • 投稿者 mh
  • 5月 28, 2025
  • 5 views

現場で使えるChrome DevTools実践ガイド 第4章:StylesパネルとComputedパネル

  • 投稿者 mh
  • 5月 28, 2025
  • 10 views

Kubernetes Learning 第24章:Liveness / Readiness Probe 〜Podの健康チェック〜

  • 投稿者 mh
  • 5月 28, 2025
  • 10 views

Android application development 第28章:ビルドタイプとプロダクトフレーバー

  • 投稿者 mh
  • 5月 28, 2025
  • 10 views