0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu で Kubernetes 三昧その9(ConfigMaps)

Last updated at Posted at 2025-06-27

Ubuntu で Kubernetes 三昧その 8(Statefulset)の続きです。

この記事では、Kubernetesにおける重要な設定管理機能である ConfigMap の役割を学び、それを Deployment から環境変数として利用する方法をステップバイステップで解説します。

このチュートリアルで学ぶこと

namespace を作成して作業環境を分離する方法
ConfigMap を使って設定データをキーと値のペアで管理する方法
Deployment で作成するPodから ConfigMap の値を環境変数として参照する方法

Step 1: namespace の作成 - 作業場所の準備

まずはじめに、今回の作業専用の場所として dev という名前の namespace(ネームスペース)を作成します。namespace を使うことで、他のリソースと区別することができ、管理がしやすくなります。


# 'dev' という名前の namespace を作成します
kubectl create ns dev

実行結果:

namespace/dev created

Step 2: ConfigMap の作成 - 設定データの定義

次に、Podに渡したい設定データを ConfigMap として作成します。ConfigMap は、設定情報をKubernetesクラスタ内で独立して管理するためのオブジェクトです。

今回は、username というキーに mike という値を持つ nginxconfigmap という名前の ConfigMap を作成します。

map.yaml ファイルの準備:

# --- は、1つのファイルに複数のYAML定義を書く際の区切りです
---
# オブジェクトの種類を指定します
kind: ConfigMap 
# APIのバージョンを指定します
apiVersion: v1 
# オブジェクトのメタデータ(名前など)を定義します
metadata:
  # このConfigMapを作成するnamespaceを指定します
  namespace: dev
  # ConfigMapの名前を定義します
  name: nginxconfigmap
# 保持したいデータをキー(key)と値(value)のペアで定義します
data:
  username: mike
---

kubectl apply で ConfigMap をクラスタに適用:

kubectl apply -f map.yaml

実行結果:

configmap/nginxconfigmap created

作成された ConfigMap の確認:
dev ネームスペースに nginxconfigmap が作成されたことを確認しましょう。

kubectl get cm -n dev

実行結果:

NAME               DATA   AGE
kube-root-ca.crt   1      8m56s
nginxconfigmap     1      75s

DATA が 1 となっており、1つのデータが格納されていることがわかります。

Step 3: Deployment から ConfigMap を参照する

最後に、nginx のコンテナを起動する Deployment を作成し、先ほど作成した ConfigMap の値をコンテナの環境変数として渡します。

nginx.yaml ファイルの準備:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: dev
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginxdeployment
  # 同じPodを2つ起動する設定
  replicas: 2
  template:
    metadata:
      labels:
        app: nginxdeployment
    spec:
      containers:
      - name: nginxdeployment
        image: nginx:latest
        # ↓↓↓↓ ここが今回のポイントです ↓↓↓↓
        # コンテナ内で使用する環境変数(env)を定義します
        env:
          # 環境変数名を 'nginxconfig' に設定します
          - name: nginxconfig
            # 環境変数の値を、直接書くのではなくConfigMapから取得します
            valueFrom:
              configMapKeyRef:
                # 使用するConfigMapの名前を指定します
                name: nginxconfigmap
                # ConfigMapの中から、どのキーの値を使うかを指定します
                key: username
        # コンテナがリッスンするポート番号
        ports:
        - containerPort: 80
---

この設定により、起動するnginxdeploymentコンテナの中には、nginxconfigという名前の環境変数が作られ、その値はnginxconfigmapのusernameキーの値、つまりmikeが設定されます。

Deployment の作成:
(もし古いDeploymentが残っている場合は、一度削除してから作成します)


kubectl delete deploy nginx-deployment -n dev
kubectl apply -f nginx.yaml 

実行結果:

deployment.apps/nginx-deployment deleted
deployment.apps/nginx-deployment created

Deployment と Pod の状態確認:
replicas: 2 の設定通り、2つのPodが Running 状態になっていることを確認します。

# Deploymentの状態を確認
kubectl get deploy -n dev

# Podの状態を確認
kubectl get pod -n dev

実行結果:

# Deploymentの実行結果
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           9s

Podの実行結果

NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-659c68c8d8-n9wpw   1/1     Running   0          17s
nginx-deployment-659c68c8d8-nh4d8   1/1     Running   0          17s

これで、設定データをコードやイメージから分離し、ConfigMap を使って動的にコンテナへ注入する一連の流れが完了しました。

さらに学習を進めるために

作成したPodの中に入り、printenv コマンドで nginxconfig 環境変数が正しく設定されているか確認してみましょう。

ConfigMap の値を mike から jane に変更し、Deployment のPodを再起動すると、環境変数の値が新しいものに変わることを確認してみましょう。

参考:

Ubuntu で Kubernetes 三昧その10(Secrets)に続く。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?