☸️ Kubernetes ConfigMap: 設定とコードを完全に分離する方法

こんにちは!今日は、Kubernetes運用の核となる要素の一つであるConfigMap(コンフィグマップ)について深く掘り下げていきます。アプリケーションをデプロイする際、環境によって異なる設定値をどのようにスマートに管理できるでしょうか?早速始めましょう!🚀


1. ConfigMapとは何ですか?🤔

ConfigMapは、機密性のないデータをキーと値のペアで保存するために使用されるKubernetes APIリソースです。

アプリケーションのソースコード内にデータベース接続情報やAPIエンドポイントのような設定値をハードコーディングすると、環境が変わるたびにイメージを再ビルドする必要があるという煩わしさがあります。ConfigMapを使用すると、設定情報をコンテナイメージから分離することで、この問題を解決できます。

💡 主要な要約:

>

分離: コードと設定を分離し、移植性を高めます。

>

柔軟性: アプリケーションを再コンパイルすることなく設定を変更できます。

用途: 環境変数、コマンドライン引数、またはボリューム内の設定ファイルとして使用されます。


2. ConfigMapの作成 🛠️

ConfigMapを作成する方法は大きく分けて2つあります。kubectlコマンドを直接使用する方法と、YAMLファイルを定義する方法です。

A. kubectlコマンドで作成 (命令型)

ファイル、ディレクトリ、または特定の値をコマンド1行で直接ConfigMapとして作成できます。

# リテラル値から作成
kubectl create configmap my-config --from-literal=ui_color="blue" --from-literal=log_level="info"

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

B. YAMLファイルで定義 (宣言型)

最も推奨される方法です。バージョン管理が容易で明確です。

apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data:
  # プロパティスタイルのキー; 各キーは単純な値にマッピングされます
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"
  
  # ファイルスタイルのキー
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5

3. ConfigMapをコンテナに接続する 🔗

作成したConfigMapを実際のPod内のコンテナに適用する方法は、大きく分けて3つあります。

① 環境変数として注入する

コンテナの環境変数として特定のキーの値を取得します。

apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        # 'player_initial_lives'というキーの値を'INITIAL_LIVES'環境変数に割り当てる
        - name: INITIAL_LIVES
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: player_initial_lives

② ConfigMapのすべてのデータを環境変数として注入

envFromを使用すると、ConfigMap内のすべてのデータを一度に取得できます。

spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      envFrom:
        - configMapRef:
            name: game-demo

③ ボリュームとしてマウントする

設定ファイル自体を特定のパスにファイル形式で埋め込む方法です。大規模な設定ファイル(nginx.confなど)を扱う際に便利です。

apiVersion: v1
kind: Pod
metadata:
  name: configmap-volume-pod
spec:
  containers:
    - name: test-container
      image: nginx
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: game-demo

4. 注意事項 ⚠️

  • サイズ制限: ConfigMapは1MiBを超えることはできません。大容量データの場合は、他のストレージを検討する必要があります。
  • セキュリティ: ConfigMapは平文で保存されます。パスワードやAPIキーなどの機密情報は、必ずSecretリソースを使用してください。
  • 更新: ボリュームとしてマウントされたConfigMapは、値が変更されるとコンテナ内部のファイルも自動的に更新されますが、環境変数として注入された値はPodを再起動しないと反映されません。

まとめ 🎁

ConfigMapは、クラウドネイティブアプリケーションを構築する上で不可欠なツールです。環境ごとの設定を柔軟に管理し、より安全で効率的なデプロイパイプラインを構築しましょう!


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です