先改 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

ConfigMap 確實更新了,但 Pod 一個都沒動,AGE 還是老的,沒有滾動更新發生
確認一下 ConfigMap 那邊真的是新的
kubectl get configmap web-content -n ithome-lab -o yaml

是新的,問題不在 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

檔案沒變。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


ok,明天見 :D
