每個應用都需要組態,而最簡單的做法就是把組態存在原始碼裡。這種做法的副作用是組態與程式碼同生共死,也就是「不可變伺服器」(Immutable Server)概念所描述的情況。

但我們仍需要「不重建應用映像檔就能調整組態」的彈性。事實上,這種重建既耗時,又與持續交付(continuous delivery)的精神相違——在持續交付中,應用只被建立一次,然後原封不動地流經部署管線的各個階段,直到抵達正式環境。

在這種情境下,我們該如何讓同一個應用適應開發、整合、正式等不同環境的設定?答案是使用外部組態資料,讓資料本身隨環境而異。以下各章的模式,全都在談如何用外部組態為各種環境客製與調整應用:

  • 環境變數組態(EnvVar Configuration):用環境變數儲存組態資料。
  • 組態資源(Configuration Resource):用 ConfigMap、Secret 這類 Kubernetes 資源儲存組態資訊。
  • 不可變組態(Immutable Configuration):把大型組態集合放進容器、於執行期連結到應用,藉此為組態帶來不可變性。
  • 組態範本(Configuration Template):適用於「多個環境各需一份大型組態檔、彼此卻只有些微差異」的場合。