解決方案
在容器成為潮流之前,Google 早已大規模運行 Linux 容器長達十年。其 Borg 系統管理橫跨多個叢集、多達數萬台機器上的數十萬個作業,採用宣告式作業規格語言,並在執行個體死亡時自動重啟與重新排程。
Kubernetes 於 2014 年開源,將 Borg 的經驗帶出 Google:共享的持久化儲存、具版本控制與驗證的領域特定 REST API,以及每個物件上統一的 Spec/Status 結構。其設計目標是讓複雜的分散式系統易於部署與管理,同時保留容器所帶來的資源利用率提升。
由於控制器僅比對期望狀態與觀察到的狀態,並針對差異採取行動,該平台本質上具備自我修復與可擴充性:自動擴縮器只調整期望的副本數,從不觸碰負責調和的機制。這單一抽象成為業界預設。
達成了什麼
宣告期望狀態;由迴圈調和現實
為何奏效
宣告式規格意味著同一份 YAML 可在任何符合規範的叢集上運作,消除了可攜性稅負
統一的物件 API 讓使用者、內部元件與自動化都能驅動同一套系統
控制迴圈讓滾動更新、健康檢查與擴縮成為單一機制的功能,而非各自客製的程式碼
在 CNCF 下開源讓每個廠商享有平等席位,因此雲端巨頭在服務上競爭,而非鎖定客戶
可套用之處
提供宣告式契約而非命令式腳本:使用者表達想要什麼,機制負責如何達成。正是這份契約讓 Kubernetes 成為每個雲端都能採用的抽象。
後續發展
Kubernetes 成為事實上的容器編排標準;每個主要雲端都提供託管版本,CNCF 調查將其列為最廣泛使用的平台之一。Borg 仍是 Google 的內部系統,但其公開後裔標準化了業界部署軟體的方式。
追溯依據
參考來源
- Large-scale cluster management at Google with Borg (abstract) Google Research / EuroSys 2015 · research.google
- Borg, Omega, and Kubernetes ACM Queue · queue.acm.org
- Kubernetes Overview Kubernetes Documentation · kubernetes.io