iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0

沿用 lab 裡的 web,這次把環境名稱放進 ConfigMap,再交給容器使用。這樣切換環境時就不用重新製作 Nginx 映像。

1. 建立 ConfigMap

建立名為 app-config 的設定,並放入 APP_MODE=staging:

kubectl create configmap app-config --from-literal=APP_MODE=staging -n lab
kubectl get configmap app-config -n lab -o yaml

查詢結果的 data 區段應該會看到 APP_MODE: staging。這只是一般設定,如果內容是密碼或金鑰,應該改用 Secret。

2. 把設定交給 Deployment

將 ConfigMap 內的資料注入 web,這會修改 Pod 範本並觸發一次更新。等待部署完成後,再進入容器查看環境變數:

kubectl set env deployment/web --from=configmap/app-config -n lab
kubectl rollout status deployment/web -n lab --timeout=120s
kubectl exec deployment/web -n lab -- printenv APP_MODE

畫面應該會輸出 staging。Nginx 本身不會因為這個變數改變網站內容,我們只是借它示範設定如何進入容器;真正的程式還要自己讀取並使用這個值。

3. 修改 ConfigMap

開啟編輯器,把 APP_MODE 從 staging 改成 testing,儲存後離開:

kubectl edit configmap app-config -n lab

馬上再查一次,容器仍會顯示 staging。因為環境變數是在容器啟動時讀進去的,單獨修改 ConfigMap 不會替現有 Pod 更新內容。

kubectl exec deployment/web -n lab -- printenv APP_MODE

4. 重新啟動取得新設定

讓 Deployment 進行滾動重啟,等新 Pod 就緒後再查看,這次應該會看到 testing:

kubectl rollout restart deployment/web -n lab
kubectl rollout status deployment/web -n lab --timeout=120s
kubectl exec deployment/web -n lab -- printenv APP_MODE

這次看到值改變,代表新 Pod 已讀到新的設定。正式環境修改 ConfigMap 時,也要記錄改了什麼、何時重啟,否則出問題時很難確認各個 Pod 實際拿到哪一版內容。

參考:ConfigMap 的使用與更新


上一篇
Day 12
下一篇
DAY 14
系列文
我的 Pod 又掛了:30 天學會 Kubernetes 共 15 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
eating11111
iT邦新手 4 級 ‧ 2026-09-27 18:08:29

學長可以來我家教我建 ConfigMap 嗎?/images/emoticon/emoticon71.gif

愛瘸瘸 iT邦新手 5 級 ‧ 2026-09-27 20:55:26 檢舉

給我地址,馬上到

我要留言

立即登入留言