跳轉到

Kubernetes 與微服務:解構巨型系統的雲端作業系統#

一、Borg:Google 十年的內部答案#

要理解 Kubernetes,得先認識 Borg。2003 年起,Google 內部打造了一個名為 Borg 的叢集管理系統,用來把數萬台伺服器當成一朵「資料中心級的電腦」來調度:任何服務提交時只說「我要 2 個 CPU、4 GB 記憶體、跑 50 個副本」,Borg 負責找機器、啟動、監控、故障轉移。Gmail、MapReduce、BigTable 都跑在 Borg 上。Borg 證明了一個原則:與其管理機器,不如管理「期望狀態」——使用者聲明想要的樣子,系統負責持續收斂。2015 年 Google 發表 Borg 論文,這個內部秘密才公諸於世。

二、2014:Kubernetes 的開源豪賭#

2013-14 年,Docker 引爆容器革命,但 Docker 只解決「打包」,沒解決「成百上千個容器在幾百台機器上如何編排」。Google 看到了機會:內部有 Borg 十年的血統。2014 年 6 月,Google 在 DockerCon 宣布開源 Kubernetes(希臘語「舵手」,故稱 K8s)。主導工程師包括 Joe Beda、Brendan Burns、Craig McLuckie(後來三人創辦 Heptio)。K8s 以 Go 語言重寫了 Borg 的核心思想——宣告式 API 與控制迴圈(reconciliation loop):系統不停比對「現實狀態」與「期望狀態」(存在 etcd 分散式鍵值庫),有偏差就自動修正。

2015 年 7 月,Google 把 Kubernetes 捐給新成立的 CNCF(雲原生計算基金會,Linux 基金會旗下),換取供應商中立的治理地位。這步棋極為高明:標準不是產品,是規則的定義權。2017 年,Docker Swarm 與 Apache Mesos 退出編排競賽,AWS、Azure 相繼推出託管 K8s——Kubernetes 成為雲端的作業系統。

三、CNCF 生態與服務治理#

K8s 的勝利帶動了整個「雲原生」生態:Prometheus(2012,SoundCloud 發起的監控系統,以多維時間序列與 PromQL 取代傳統監控)、Helm(套件管理器,K8s 界的 apt)、Istio(2017,Google/IBM/Lyft 的服務網格 service mesh——以 sidecar 代理 Envoy 攔截服務間流量,把重試、熔斷、灰度發布、mTLS 加密做成基礎設施能力,應用程式零改動)。CNCF 此後吸納上百個專案,「雲原生」從口號變成完整技術棧。微服務要的所有治理能力——服務發現、負載均衡、斷路器(Netflix Hystrix 的經驗被制度化)、配置中心——都以平台原語或網格插件的形式供給。

四、複雜性的詛咒與簡化的反彈#

但 K8s 的勝利伴隨著名副其實的複雜性稅:Pod、ReplicaSet、Deployment、StatefulSet、Ingress、CRD、Operator……概念數量令新手望而生畏,YAML 檔案成為新的技術債溫床。業界產生清晰的反彈:小團隊「硬上 K8s」的失敗案例層出不窮,Heroku 式 PaaS(Render、Fly.io)以「K8s 的體驗,沒有 K8s 的複雜度」重新贏回開發者;而 2014 年 Amazon 推出的 AWS Lambda 開創了無伺服器(serverless)路線——函數即部署單位,按調用毫秒計費,連「伺服器」概念都被藏起。到 2020 年代,業界形成務實光譜:全託管 serverless ←→ 自管 K8s,中間是 Heroku 型 PaaS。選擇本身成為架構決策。

五、範式的本質:宣告一切#

Kubernetes 的深遠貢獻是確立了一個管理學範式:宣告式(declarative)優於命令式(imperative)。你描述「世界應該是什麼樣」,系統負責達成;而不是你逐步下指令。這個思想被 GitOps(把基礎設施狀態存在 Git、機器自動同步)推廣到整個運維領域,也預示了後來 AI 時代的「意圖驅動」思維——告訴系統你要什麼,而不是教它每一步怎麼做。

微服務的組織邏輯同樣深刻:系統架構映照組織架構(Conway 定律),因此自治小隊 + 自治服務的組合讓部署不再需要跨隊協調。當然,微服務的代價清單也在持續增長:分散式事務、可觀測性(分散式追蹤 OpenTelemetry 的興起)、網路故障的常態化、以及「分散式單體」的常見死法。社群的共識回歸務實:Fowler 的「單體先行」(monolith first)——先讓正確的邊界自然浮現,再拆。Kubernetes 是微服務的作業系統,但不是每個系統都需要微服務;這個判斷,正是架構師的核心價值。