Kubernetes 演進史(上):Borg、編排之戰與 Docker
2014 年 6 月 6 日,一份包含 250 個檔案、47,501 行程式碼的首筆 commit 被正式推上 GitHub。四天之後,Google 雲端副總裁 Eric Brewer 站在 DockerCon 2014 的主題演講舞台上,向全世界公開介紹了名為 Kubernetes 的開源專案。
十年之後,它成為公認的「雲端作業系統」。根據官方 DevStats 十週年統計,專案累積超過 88,000 名貢獻者、來自 8,000 多家企業,CNCF(雲端原生運算基金會)生態系更壯大至約兩百個專案與數百萬名雲原生工程師。
上篇聚焦於 Kubernetes 如何走到這個位置:Google 為何願意把 Borg 的經驗做成開源專案、它如何在三年內擊敗 Mesos 與 Swarm,以及它與 Docker 從互相拉抬到分道揚鑣的過程。
一、2013 年夏天:一個被內部拒絕的提案
故事從一位產品經理的焦慮開始。
2013 年夏天,時任 Google 產品經理、後來名列 Kubernetes 共同創辦人的 Craig McLuckie 在起源回顧中提到,他當時注意到一個棘手現象:Google Compute Engine(GCE)的客戶「租了大量 CPU,實際用到的卻很少」,主因在於他們在雲端上運作的是傳統虛擬機(VM)。
當時 Google 內部早已全面採用容器技術,深知容器具備「可擴充、高可攜性、極致利用硬體」的特性。但對外市場上,業界欠缺一套成熟的大規模容器管理平台。
這項焦慮的深層背景是雲端市場的嚴峻失衡。AWS 比 Google 早數年佈局,全球企業工作負載正加速湧入。Google 若僅靠價格戰或模仿功能難以翻盤;但若能將「容器比虛擬機更能榨乾硬體」建立為產業新標準,Google 就能以自身最擅長的大規模基礎設施營運能力,發動一場關鍵打擊。
換言之,Kubernetes 從誕生首日就是一件商業戰略武器。
然而,Google 內部那套歷經十年淬鍊的管理系統名叫 Borg,是公司內部最核心的技術資產。Borg 自 2000 年代中期起投入生產環境,在多個動輒上萬台機器的叢集上管理數十萬個工作任務,並透過長時間混合部署不同優先等級的任務,將資料中心資源使用率推升至業界罕見水準。
當 McLuckie 首次在內部提案將這套體系做成外部開源版本時,遭遇了極為直白的反對:
「所以讓我確認一下。你想把 Borg 排程器做成對外版本——我們最重要的競爭優勢之一,一個我們連對外都不談的東西。然後,你還想把它開源?」
這份提案在初期確實遭到否決。轉機最終發生在一次日常接駁車的通勤路上:McLuckie 成功說服了副總裁 Eric Brewer(CAP 定理的提出者),隨後獲技術基礎設施最高主管 Urs Hölzle 批准放行。
二、Project Seven of Nine:命名、致敬與架構傳承
專案最初的內部代號為 Project Seven of Nine,取自科幻影集《星際爭霸戰》(Star Trek)的角色「九之七」。劇中的博格(Borg)是會同化其他種族的集體意識,九之七原是被同化的人類,後來脫離集體、成為主角群的夥伴。
Google 的內部系統正好也叫 Borg,Kubernetes 就是那個走出 Google、對外界友善的 Borg。
這份致敬也體現在產品視覺上:Kubernetes 的 Logo 是一個七根輻條的舵輪,名稱則取自希臘文 κυβερνήτης(舵手),社群簡稱為 K8s。
Heritage from Borg and Omega to Kubernetes
+-------------------------+ +-------------------------+
| Borg (2000s) | | Omega (Research) |
| Scale proof of concept | | Shared state store |
| Monolithic controller | | Decentralized control |
+-------------------------+ +-------------------------+
| |
v v
+------------------------------------------------------+
| Kubernetes (Clean-room rewrite in Go) |
| Declarative API + Independent reconciliation loops |
+------------------------------------------------------+
這裡必須釐清一項流傳甚廣的常見誤解:Kubernetes 並非 Borg 的 Go 語言重寫版本。
開源首日釋出的 47,501 行程式碼,來自一份全新撰寫的獨立程式碼庫,沒有任何一行 Borg 原始程式碼被直接搬移。正如 Google 團隊在 ACM 論文《Borg, Omega, and Kubernetes》中所總結,專案真正繼承的是十五年的架構經驗教訓:
- Borg 驗證了大規模容器編排的可行性,但也暴露出集中單體排程器的擴充瓶頸;
- 後繼研究計畫 Omega 則驗證了「共享狀態儲存搭配多控制器」的彈性架構。
這兩者的實踐總結,共同奠定了 Kubernetes「宣告式 API 與調和迴圈(Reconciliation Loop)」的核心基石:使用者只需宣告系統的「期望狀態(Desired State)」,後端多個獨立控制器便會持續監聽,自主將叢集的「實際狀態(Actual State)」調和至期望狀態。
這套架構由共同創辦人 Joe Beda、Brendan Burns、Craig McLuckie 與 Google 核心工程團隊合力催生,為後續的開源擴充奠定了標準。
⭐️三、把 Borg 的經驗送出去,Google 能得到什麼?
一開始的反對意見很合理:Borg 是 Google 最重要的競爭優勢之一,為什麼要把它的設計思想交給所有人,包括對手?
答案取決於 Google 想在哪個戰場競爭。
原本的戰場,Google 只能追著跑。 2013 年的雲端競爭停在「租虛擬機」這一層。AWS 已領先多年,客戶的系統建立在 EC2、ELB 等 AWS 專屬服務上,搬家成本極高。在這一層比價格、比功能,客戶綁得越深,領先者就越穩。
Kubernetes 在雲端上方加了一層不屬於任何雲的抽象。 應用改跑在 K8s 上之後,客戶面對的是 K8s API,底下是哪一家雲變得次要:
- 應用可以在 AWS、Google Cloud 與自家機房之間搬移,AWS 的鎖定效果隨之鬆動;
- 雲端廠商退化為「代管 K8s 的地方」,底層算力逐漸成為可互相替換的商品。
新的這一層,由最懂它的人定義。 K8s 的設計繼承自 Borg 與 Omega,最知道怎麼把它跑好的正是 Google。容器能把機器塞得更滿,而大規模基礎設施的營運效率本來就是 Google 的本業;戰場移到這裡,前面提到的「榨乾硬體」優勢才發揮得出來。
時間上 Google 也搶先一步:GKE(Google 的 Kubernetes 託管服務)在 2015 年正式上線,AWS 的 EKS 要到 2017 年底才發表。
開源則是這套策略成立的前提。 如果 K8s 是 Google 專屬產品,客戶只是從 AWS 鎖定換成 Google 鎖定,沒有人會買單;唯有開源,AWS 以外的廠商才願意一起推動。
時機也不等人。2013 至 2014 年間,Docker 以現象級的速度席捲開發者社群;Brendan Burns 事後回顧,Docker 的爆紅讓團隊堅信「一套開源的容器編排系統必然會在市場上出現」。
這個標準若不由 Google 定義,就會由 Docker 公司或 Apache Mesos 陣營建立。Google 樂見 Docker 定義單機容器格式,但多機編排與叢集管理的定義權必須握在自己手上。
事後來看,這一招確實改寫了遊戲規則:K8s 成為業界標準,AWS 最終也推出 EKS 全面接納。但 Google Cloud 並未因此翻身,AWS 至今仍居雲端市場龍頭。Google 換到的,是擺脫結構性劣勢,以及標準制定者的影響力。
四、編排之戰(2014–2017):陣營對決與勝負關鍵
Kubernetes 開源之際,分散式系統領域已有強勁的競爭陣營。
Orchestration War: Competing Paradigms (2014–2017)
+------------------------------------------------------+
| Apache Mesos + DC/OS (Mesosphere) |
| Veteran enterprise player; massive scale at Twitter |
+------------------------------------------------------+
+------------------------------------------------------+
| Docker Swarm (Docker Inc.) |
| Zero-config developer UX built into Docker engine |
+------------------------------------------------------+
+------------------------------------------------------+
| HashiCorp Nomad (HashiCorp) |
| Pragmatic single binary; supports VMs and batch jobs |
+------------------------------------------------------+
當時的競爭對手各具鮮明優勢:
- Apache Mesos:資歷最深的學院派強者,經 Twitter(數萬節點規模)、蘋果 Siri 與 Uber 大規模驗證。商業公司 Mesosphere 圍繞其打造「資料中心作業系統(DC/OS)」,一度被視為產業標準。
- Docker Swarm:把開發者體驗做到極致的產品。2016 年 7 月隨 Docker 1.12 直接內建於 Docker Engine,開發者只需一行指令即可建立叢集,門檻極低。
- HashiCorp Nomad:最務實的輕量級選擇。以單一二進位執行檔運作,除了容器也能排程虛擬機與批次運算,主打低維運負擔。
然而,這場原本預期漫長的比拚,卻在短短三年內分出勝負。Kubernetes 的勝出,繫於三個關鍵優勢:
1. 中立治理打破競爭防線
2015 年 7 月 21 日,Kubernetes 1.0 正式發布,Google 同步宣布將專案捐贈給 Linux 基金會旗下新成立的 CNCF。
Red Hat、IBM、Intel、VMware、Docker 與 CoreOS 均列名創始會員。這一步化解了業界疑慮——專案歸基金會所有,企業投入 K8s 等於建設業界共有的資產,Google 無法獨佔。相較之下,Swarm 與 Mesos 始終無法擺脫單一商業公司的利益綁定。
2. 宣告式 API 與極致擴充能力
Kubernetes 將宣告式模型與自癒控制器作為核心。2017 年(Kubernetes 1.7)引入 CRD(自訂資源定義),徹底打開了擴充大門。第三方開發者不僅能使用平台,更能直接在 K8s 上擴充功能。
早期容器被視為只適合無狀態應用,在容器中管理資料庫需要複雜的人工作業。Helm 成為標準套件管理工具;CoreOS 提出的 Operator 模式,更將資料庫容錯轉移等維運知識寫成程式碼,補齊了企業核心應用的關鍵拼圖。
API Extensibility: Turning Users into Builders
+-------------------------------------------------+
| Kubernetes Declarative Control Plane |
+-------------------------------------------------+
| |
v v
+------------------------+ +---------------------+
| Helm (Package Manager) | | Operator SDK & CRDs |
| Standard app packaging | | Standard automation |
+------------------------+ +---------------------+
3. 生態聯盟對決單兵作戰
2017 年成為整個產業的轉折年:
- 2017 年 10 月(DockerCon Europe):Docker 宣布原生支援 Kubernetes,與 Swarm 並列;
- 2017 年 11 月(AWS re:Invent):雲端霸主 AWS 發表 Amazon EKS,最後一家大型雲廠商也加入 K8s 陣營;
- 2017 年 12 月(KubeCon Austin):微軟、Oracle、VMware 等大廠相繼宣布支援 Kubernetes。
至 2017 年底,容器編排戰爭已無懸念。早期安裝繁瑣的門檻,隨官方安裝工具 kubeadm 的普及大幅降低,大規模節點排程的成熟度也贏得跨廠商信任。
五、輸家的黃昏:三種截然不同的退場軌跡
戰局落幕後,三位競爭對手走向了完全不同的結局:
| 陣營 | 初始核心優勢 | 應對策略 | 最終格局 |
|---|---|---|---|
| Mesosphere (Mesos) | 早期超大規模驗證、學院派架構 | 改名 D2iQ,轉型 K8s 發行商 | 轉型過慢,2023 年資產出售予 Nutanix |
| Docker Swarm | 極致單機體驗、內建零設定 | 官方轉為支援 K8s,Swarm 退居備用 | 仍在維護,但遭 Compose 與輕量 K8s 上下擠壓 |
| HashiCorp Nomad | 單一執行檔、極簡維運負擔 | 避開正面衝突,專注工具鏈利基 | 保持精簡,2025 年隨母公司併入 IBM |
Mesosphere:轉身過慢的產業先驅
曾估值逼近十億美元的 Mesosphere,於 2019 年更名為 D2iQ,試圖轉型為 Kubernetes 發行商。然而市場先行優勢已失,2023 年平台資產出售予 Nutanix。
Docker Swarm:被邊緣化的內建工具
Swarm 至今仍在,只是退居幕後。它的賣點是「比 K8s 簡單」,但這個優勢遭到上下兩端擠壓:單機與本地開發,Docker Compose 一個 YAML 檔就夠用;需要叢集時,k3s、kind 等輕量版 K8s,甚至 Docker Desktop 內建的 K8s 也已經夠簡單,學到的技能還能直接帶進正式環境。
對已經會 K8s 的工程師來說,再學一套 Swarm 略顯多餘。
HashiCorp Nomad:堅守利基的倖存者
Nomad 把自己定位成「免除 K8s 龐大複雜度」的務實方案,並與 Terraform、Vault 等生態工具鏈緊密綁定。Nomad 證明了在標準化戰場落敗後,主動維持精準利基亦能長久生存。
六、Kubernetes 與 Docker:從互相拉抬到分道揚鑣
2013 年 3 月,Docker 在 PyCon 的閃電演講震撼了整個軟體界。接下來兩年是 Docker 的全盛時期:2015 年估值突破十億美元,「Docker」幾乎成了容器的代名詞。
沒有 Docker 點燃的容器革命,就沒有 Kubernetes 誕生的市場土壤。雙方在初期互為放大器:Docker 打造了絕佳的開發者打包體驗,Kubernetes 則提供規模化維運的管理方案。
The Architectural Decoupling Timeline
2015-07: Kubernetes 1.0 released with CNCF donation
|
2016-12: CRI in K8s 1.5; containerd donation announced
|
2020-12: Dockershim deprecation announced in K8s 1.20
|
2022-05: Dockershim completely removed in K8s 1.24
v
+------------------------------------------------------+
| Kubelet -> CRI -> containerd / CRI-O -> OCI Runtime |
+------------------------------------------------------+
Kubernetes 確立主導地位後,兩者開始解耦。早期 Kubelet 直接呼叫 Docker 常駐程式,靠內建的轉接層 dockershim 維持相容。
2016 年 Kubernetes 1.5 引入 CRI(容器執行時期介面),同月 Docker 宣布把核心元件 containerd 拆出、捐給 CNCF;2020 年 1.20 宣布棄用 dockershim,2022 年 1.24 正式移除。從此 Kubernetes 節點透過 CRI 直接與 containerd 或 CRI-O 通訊,不再需要 Docker 引擎。
NOTE
Docker 公司的核心困境在於商業模式的錯配:它最擅長的開發者體驗極難變現,打算收費的企業級平台層,又被 Kubernetes 這個開源公共財取代。
2019 年 11 月,Docker 將企業業務出售給 Mirantis,重新聚焦於 Docker Hub 與 Docker Desktop。
但若斷言「Docker 徹底落敗」亦非全貌。Docker 輸掉的是成為雲端作業系統的野心,卻牢牢佔據了全世界開發者的日常工作起點。由 Docker 早期主導並捐出的 OCI(開放容器標準) 映像檔格式沿用至今,終端機裡的 docker build 依舊是業界日常。
七、上篇小結
回頭看,Kubernetes 勝出的前提是 Google 願意放手:把專案交給中立基金會,換來整個產業一起推動。
但放手也意味著失去絕對控制權。一個由全球企業共同組成、沒有單一老闆的基金會,究竟該如何治理這套即將承載全世界運算的基礎設施?各大公有雲廠商又將如何展開收編?
這些關於中立王國的治理試驗、複雜度引發的批評聲浪,以及在 AI 浪潮下的全新角色,將在下篇深入探討。