跳轉到

Kubernetes env vs envFrom Precedence

概念概覽

核心行為

核心知識

核心行為

Kubernetes Deployment 中,env(直接指定)的優先順序**高於** envFrom(從 ConfigMap/Secret 批量注入)。當兩者都設定了同名變數時,env 的值會覆蓋 envFrom 的值,且不會有任何 warning

實際案例

ADMIN_ENVIRONMENTenvFrom 設定為枚舉值(development),但 Deployment manifest 的 env 區塊另設為 namespace 名稱(matchrpg-dev),結果 Pod 實際讀到的是 namespace 名稱,導致 test commands 過濾邏輯與 rate limiter 行為錯誤。

驗證方法

光看 manifest 改對了不夠,必須 kubectl exec 進 Pod 確認實際 env 值:

kubectl exec -it <pod> -- env | grep ADMIN_ENVIRONMENT

教訓

  • 不能只驗 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 |


本概念頁面由 Semi-Brain Wiki 系統自動維護

最後更新: 2026-03-30