iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0

先改 configmap.yaml 裡面的文字,隨便改都可以

data:
  index.html: |
    <html>
      <body>
        <h1>ithome-lab day22</h1>
        <p>updated content</p>
      </body>
    </html>

套用,然後重整頁面

kubectl apply -f manifests/base/configmap.yaml
kubectl get pods -n ithome-lab

https://ithelp.ithome.com.tw/upload/images/20261006/20176154RA55EjM0Q4.png

ConfigMap 確實更新了,但 Pod 一個都沒動,AGE 還是老的,沒有滾動更新發生

確認一下 ConfigMap 那邊真的是新的

kubectl get configmap web-content -n ithome-lab -o yaml

https://ithelp.ithome.com.tw/upload/images/20261006/20176154SlcAODIBKP.png

是新的,問題不在 ConfigMap,在 Pod 沒有跟著換

前面說過 Deployment 是靠比對 template 來決定要不要重建 Pod,而我這次只改了 ConfigMap,Deployment 的 template 一個字都沒動。從 Deployment 的角度看,現在的狀態跟我要的狀態完全一致,那它為什麼要做事

這就是宣告式系統的一個盲點,它只看得到自己負責的那份 spec,看不到 spec 裡面引用的東西變了

再看細一點,同樣是掛成 Volume,掛整個目錄跟用 subPath 掛單一檔案,行為差很多

kubectl exec deploy/web -n ithome-lab -- cat /usr/share/nginx/html/index.html

https://ithelp.ithome.com.tw/upload/images/20261006/20176154NSBI4QQmIq.png

檔案沒變。ConfigMap 掛成整個目錄的時候,kubelet 確實會定期把新內容同步進去;但 Day 11 用的是 subPath 掛單一檔案,subPath 掛進去的內容 kubelet 不會更新,等多久都一樣。容器裡看到的永遠是 Pod 啟動當下那一份

如果是用 Day 12 那種 envFrom 注入環境變數的,環境變數是行程啟動時就固定的,不重啟永遠不會變

所以不管掛成檔案還是環境變數,改完設定都要重啟才算數

kubectl rollout restart deployment/web -n ithome-lab
kubectl rollout status deployment/web -n ithome-lab

https://ithelp.ithome.com.tw/upload/images/20261006/20176154UecDmdFhOz.png

https://ithelp.ithome.com.tw/upload/images/20261006/20176154DhrMgv2LdR.png

ok,明天見 :D


上一篇
Day 21 OOMKilled
下一篇
Day 23 排障回顧
系列文
讓Claude Code當我的 K8s 助教:部署、故障排查與入門可觀測性 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言