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 第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
  • 111 views

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

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