📘 深度概覽
作者背景#
兩位作者都是 Red Hat 的資深工程師,長期站在「把 Java 企業應用搬上雲原生平台」的第一線——這個位置解釋了本書為何格外重視應用本身該如何改寫,而非只談平台怎麼操作。
伊布拉揚(Bilgin Ibryam)是 Apache 軟體基金會的成員與 Apache Camel 的 committer,也是《Camel Design Patterns》的作者,長期在整合(integration)領域工作。這段背景使他熟悉「以模式描述架構決策」這種寫作體例——企業整合模式(EIP)正是同一個傳統。
胡斯(Roland Huß)是 Red Hat 的首席工程師,開源社群中以 Jolokia(JMX-over-HTTP 橋接器)與 fabric8-maven-plugin 等專案為人所知,並長期參與 Knative 的開發。
兩人合寫的角度因此是互補的:一位來自整合與模式語言,一位來自 JVM 執行期與工具鏈。
完整摘要#
本書要解決的問題,可以用一句話概括:Kubernetes 能自動化管理你的應用,但前提是你的應用願意配合。 平台提供了排程、擴縮、自我修復、滾動更新等能力,然而這些能力全都依賴應用遵守某些約定——宣告自己的資源需求、暴露健康檢查端點、對終止訊號做出正確反應。不遵守約定的應用,平台只能盲目對待,於是所有自動化承諾都打了折扣。本書要建立的,就是這套約定的完整清單。
方法論上,作者明確承接建築師亞歷山大(Christopher Alexander)1977 年《A Pattern Language》開創、經 GoF《設計模式》引入軟體界的模式語言傳統:每個模式獨立成章,以「問題 → 解法 → 討論 → 延伸閱讀」的固定結構呈現,並附可執行的範例。這個體例使全書可以跳讀——遇到具體問題時直接翻到對應模式。
全書把模式分成五類。基礎模式描述容器化應用要成為「良好的雲原生公民」必須遵守的根本原則,是其餘一切的前提:可預期的需求(每個容器都應宣告自己的資源輪廓並限縮其中,否則排程器無從決策)、宣告式部署(把滾動更新、藍綠、金絲雀等策略交給平台以宣告方式執行)、健康探針(容器必須實作 liveness 與 readiness API,平台才能觀測它)、受管生命週期(容器需要一條途徑讀取平台發出的事件並做出反應,例如優雅關閉)、自動化配置(親和性、反親和性與汙點如何影響多節點叢集的分派)。
行為模式聚焦 Pod 與管理平台之間的互動,關鍵在於挑對 Pod 管理原語:批次工作(執行到完成的原子單元)、週期性工作(時間事件觸發)、常駐服務(基礎設施導向的 Pod 需要先於應用 Pod 落到特定節點)、單例服務(同時只有一個實例活躍,同時仍維持高可用)、有狀態服務(StatefulSet 提供的身分、儲存與順序保證)、服務發現、自我察覺(Downward API 把中繼資料注入應用)。
結構模式處理 Pod 之內的容器編組——作者以「容器映像檔之於容器,如同類別之於物件」開場,指出容器並非孤立執行,而是活在 Pod 提供的執行期能力之中:初始化容器(把初始化工作與主應用容器的生命週期分開)、邊車(不修改既有容器就擴充它)、轉接器(把異質系統轉成統一對外介面)、大使(以代理解耦外部服務存取)。後三者與 Brendan Burns 的《Designing Distributed Systems》共用同一組命名。
組態模式回答一個持續交付的核心矛盾:應用只應被建置一次,然後原封不動流經各階段直到正式環境;但同一個映像檔又必須適應不同環境的設定。四個模式構成一道從簡到繁的光譜——環境變數組態、組態資源(ConfigMap 與 Secret)、不可變組態(把大型組態集合封進容器以取得不可變性)、組態範本(多環境共用大型組態卻僅有些微差異時)。
進階模式則是把平台本身當成可編程對象:控制器(Kubernetes 自身即建構其上,展示自訂控制器如何擴充平台)、Operator(控制器加上領域特定的自訂資源,把維運知識封裝成自動化)、彈性擴縮(HPA、VPA 與叢集自動擴縮的多維度組合)、映像檔建置器(把建置搬進叢集)。作者在此坦承這一類的穩定度不一——控制器是恆久的,但 Knative 相關的實作在讀者讀到時可能已經改變。
本書的貢獻與定位#
本書填補的空缺是「Kubernetes 文件教你怎麼用 API,但沒人教你該用哪個、為什麼」。與《Kubernetes: Up and Running》這類上手書相比,本書預設讀者已會操作叢集,處理的是設計層次的判斷;與《Designing Distributed Systems》相比,後者更抽象、更短、刻意平台中立,本書則深入 Kubernetes 的具體原語,覆蓋面廣出數倍——兩者的重疊只在結構模式那一小塊。
它的獨特切入角度在於視角的方向:多數 Kubernetes 書籍從平台看應用(這個資源怎麼設定),本書從應用看平台(我的應用要做什麼,才能被平台好好照顧)。這個轉向使它對開發者比對維運者更有價值——書中反覆出現的訊息是,雲原生不是把應用塞進容器,而是重寫應用讓它可被自動化。
主要受眾是已在使用 Kubernetes、要為既有或新建應用做架構決策的開發者與架構師。使用時需留意版本落差:本書第一版出版於 2019 年,書中部分 API 與生態(尤其 Operator 工具鏈、Knative、擴縮機制)此後變動不小,第二版已針對此更新;但基礎、行為與組態三類模式的核心論證,與平台版本的耦合相對輕微,至今仍然適用。
