iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
DevOps

新創視角下的 DevOps × AI 探索系列 第 16

Day 16: ConfigMap:管理設定檔

  • 分享至 

  • xImage
  •  

上一篇我們聊到 多環境部署:Dev、Staging、Prod 隔離方式,當我們將系統拆分成多個環境時,最麻煩的事情之一就是「設定檔管理」。
程式碼一份沒錯,但不同環境需要不同的設定,例如 API URL、Log Level、Feature Flags,要怎麼有效管理呢?

在 Kubernetes 中,ConfigMap 就是解決方案之一。今天我們就來看看它的用途、建立方式,並透過實作範例帶你快速上手。

為什麼需要 ConfigMap?

在容器化之前,我們常常把設定直接寫在程式碼裡,或用 .env 檔控制。
但是在 Kubernetes 的世界裡,我們希望「應用程式」與「設定」能完全解耦,讓同一份程式碼可以在不同環境中靈活部署。

  • ConfigMap:適合存放非敏感資訊(像是 API URL、環境名稱)。
  • Secret:適合存放敏感資訊(像是密碼、金鑰、Token)。👉 明天的主題會講到。

這樣一來,程式碼與設定就能完全分離,提高靈活度與安全性。


ConfigMap 的使用場景

  1. 環境參數管理:同一份程式碼,在 Dev / Staging / Prod 使用不同設定。
  2. 動態調整應用行為:例如開關某個功能 Flag,而不用改程式碼。
  3. 集中化配置管理:讓多個 Pod 共用同一份設定,避免重複。

建立 ConfigMap 的方式

1. 使用 YAML 檔

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: "staging"
  API_URL: "https://api.staging.example.com"

套用指令:

kubectl apply -f configmap.yaml

2. 使用 kubectl 指令

kubectl create configmap app-config \
  --from-literal=APP_ENV=staging \
  --from-literal=API_URL=https://api.staging.example.com

3. 從檔案匯入

kubectl create configmap app-config --from-file=config.properties

在 Pod 中使用 ConfigMap

1. 注入環境變數

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
    - name: demo-container
      image: nginx
      envFrom:
        - configMapRef:
            name: app-config
  1. 以 Volume 掛載到容器
apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
    - name: demo-container
      image: nginx
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: app-config

這樣 /etc/config 目錄底下就會出現 ConfigMap 的 key/value 檔案。

實作範例:多環境設定管理

假設我們有一個簡單的 Node.js API,需要依環境切換不同的 API URL。

Step 1:建立三份 ConfigMap

  • configmap-dev.yaml
  • configmap-staging.yaml
  • configmap-prod.yaml

以 Staging 為例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config-staging
data:
  APP_ENV: "staging"
  API_URL: "https://api.staging.example.com"

Step 2:Deployment 使用對應的 ConfigMap

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo-app
  template:
    metadata:
      labels:
        app: demo-app
    spec:
      containers:
        - name: demo-container
          image: node:18
          envFrom:
            - configMapRef:
                name: app-config-staging

Step 3:驗證

進入 Pod 查看環境變數:

kubectl exec -it demo-app-xxxxx -- printenv | grep API_URL

輸出結果應該會是:

API_URL=https://api.staging.example.com

這樣就完成了「不同環境使用不同設定」的部署方式 🎉

最佳實踐

  • 命名規則:依照環境區分,例如 app-config-dev、app-config-prod。
  • 與 Secret 分工:敏感資料放 Secret,其餘放 ConfigMap。
  • 版本控管:透過 GitOps 或 Helm Chart 管理 YAML。
  • 避免過大:ConfigMap 不適合存放大檔案或二進位資料。

總結

  • ConfigMap 是 Kubernetes 管理設定檔的核心工具。
  • 可以讓應用程式與設定完全解耦,提高靈活度。
  • 搭配多環境部署,能讓 CI/CD 更加自動化。

👉 下一篇,我們將探討 Secret:管理敏感資訊,補足 ConfigMap 的不足之處。


上一篇
Day 15: 多環境部署:Dev、Staging、Prod 隔離方式
下一篇
Day 17: Secret:管理敏感資訊
系列文
新創視角下的 DevOps × AI 探索17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言