Kubernetes env vs envFrom Precedence¶
概念概覽
核心行為¶
核心知識¶
核心行為¶
Kubernetes Deployment 中,env(直接指定)的優先順序**高於** envFrom(從 ConfigMap/Secret 批量注入)。當兩者都設定了同名變數時,env 的值會覆蓋 envFrom 的值,且不會有任何 warning。
實際案例¶
ADMIN_ENVIRONMENT 被 envFrom 設定為枚舉值(development),但 Deployment manifest 的 env 區塊另設為 namespace 名稱(matchrpg-dev),結果 Pod 實際讀到的是 namespace 名稱,導致 test commands 過濾邏輯與 rate limiter 行為錯誤。
驗證方法¶
光看 manifest 改對了不夠,必須 kubectl exec 進 Pod 確認實際 env 值:
教訓¶
- 不能只驗 manifest,要驗 live cluster 裡的實際值
- 設計枚舉型環境變數時,要確保沒有其他
env欄位偷偷覆蓋
經驗教訓¶
-
K8s env 覆蓋 envFrom 是靜默行為,沒有警告,必須主動驗證
-
環境相關 bug 往往藏在 infra wiring 階段,server-side code 本身沒有問題
-
驗收標準應包含:manifest 正確 + live cluster env 值吻合
常見陷阱¶
-
以為改了 ConfigMap 就生效,但 Deployment 的 env 欄位靜默覆蓋了它
-
只看 CI 測試通過,沒有 kubectl exec 進 pod 確認實際值
相關概念¶
來源 Sessions¶
| 日期 | Session | 貢獻摘要 |
|---|---|---|
| 2026-03-30 | de4cc14f-f3ed-4243-b84e-6062bb47c079 | 揭露 Deployment 的 explicit env 欄位會靜默覆蓋 envFrom ConfigMap,導致環境變數實際值與設計不符的真實 bug |