iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 2
0
DevOps

Kubernetes X DevOps X 從零開始導入工具 X 需求分析*從底層開始研究到懷疑人生的體悟*系列 第 2

Day 2 - Borg Omega and Kubernetes,Kubernetes 的前日今生,與 Google 十餘年的容器化技術

本文同步刊登於個人技術部落格,有興趣關注更多 Kubernetes、DevOps 相關資源的讀者,請務必追蹤從零開始的軟體工程師之旅,喜歡的話幫我按讚分享、歡迎留言、或是許願想要看的文章。

如果有技術問題也可透過粉絲專頁 討論,技術方面諮詢免錢、需要動手做另計 XD。

曬貓


Borg, Omega and Kubernetes

這是原文完整版本。好讀版請見 Borg Omega and Kubernetes 前世今生摘要

完整英文原文請見 Borg, Omega, and Kubernetes - Lessons learned from three containermanagement systems over a decade


摘要

在 container 技術夯起來前,Google 已經做了 container 十幾年,過程中發展出需三套容器管理系統。雖然每一代系統的開發需求不同,但每一代都深受上一代影響。這篇文章描述 Google 開發這些系統時,學到的經驗。

Borg

第一套 container management 系統是 Borg,為了管理

  • 長期執行的服務
  • 批次的短期工作 (batch job)

原本分別是由 Babysitter 與 Global Work Queue 兩套系統分開管理。後者的架構深刻影響 Borg,但 Global Work Queue 專注於 batch job。

  • 兩套系統都在 Linux control groups 之前。
  • Borg 將上述兩種應用放在共享的機器上,來增加資源的使用率,以節省成本。
  • 這種共享基於支援 container 的 Linux Kernel (Google 也貢獻許多 Linux kernel container 程式碼),提供更好的隔離 (isolation) 給延遲敏感的使用者服務 (latency-sentitive user-facing services),以及消耗大量 cpu 的 batch 程式。

越來越多應用都在 Borg 上開發執行, Google 的應用與 infratructure 團隊開發許多工具與服務,形成 Borg 生態系。這些系統

  • 提供設定 (configure) 與更新 (update) 工作、
  • 預測資源需求、
  • 動態推送設定到執行中的工作、
  • 服務發現 (service discovery) 與
  • 負載均衡 (Load balancing),等等功能。

這些生態系的開發基於 Google 不同團隊的需求,產生一個不同起源 (heterogeneous)、只針對各別需求的 (ad-hoc) 一堆不同系統,Borg 的使用者需要使用不同的程式語言與程序,來與這些系統互動。

Borg 仍然是 Google 主要的容器管理系統,因為他規模 (scale) 巨大,功能多樣,而且極度堅固 (robustness)。

Omega

Omega 是 Borg 的下一代,目的是改善 Borg 生態系的軟體工程。

Omega 承襲許多 Borg 測試成功的模式,但不同於 Borg,Omega 有完整的架構設計,整體更加一致。

  • Omega 將集群狀態 ( cluster state) 存放在
    • 中心化(centralized)、
    • 基於 Paxos 算法、
    • 交易導向 (transaction-oriented) 的儲存系統,
    • 讓集群的控制面板 (control panel) 存取,例如 scheduler。
  • Omega 使用樂觀的併發控制 (optimistic concurrency control) 來處理偶發的衝突,這一層解藕 (decoupling) 的設計,使得原先的 Borgmaster 的功能可以拆分成多個元件,取代原本單一 (monolithic) 集中 (centralized) 的 master,被所有變更請求堵塞。

許多 Omage 成功的創新也會被迭代回去 Borg 中。

Kubernetes

第三套 Google 開發的容器管理系統是 Kubernetes,這時外界工程師也開始對 Linux 容器有興趣,而 Google 同時在開發並推展自己的公有雲架構。Kubernetes 在這樣的背景下構思並開發。

與 Borg 及 Omega 不同,Kubernetes 是開源軟體,不限於 Google 內部開發。

  • Kubernetes 內部有共享的持久層儲存 (persistent store),服務元件持續監測有關物件,與 Omega 類似。
  • 不同的是,Omega 允許信任的控制面板的元件直接存取儲存庫,Kubernetes 則透過 domain-specific 的 REST API 存取,來提供高階 (higher-level) 的 API 版本控制、驗證、語意處理 (semantics)、以及存取政策 (policy),來支援更廣泛的用戶端。
  • 更重要的是 Kubernetes 著重工程師在 cluster 上開發與執行應用的體驗,簡化複雜分散式系統(distributed system) 的管理與部屬 (deploy),同時仍能透過容器來提升資源的使用率。

這篇文章描述 Google 從 Borg 到 Kubernetes 獲得的知識與經驗。


今天只是講古,知道 Kubernetes 的前世今生。文章重點在後面 XD

明日待續:Google 的容器開發經驗,應用導向的架構 (Application-oriented infrastructure)


上一篇
Day 1 - 需不需要 Kubernetes,這是個好問題XD,從需求量化分析,根據數據做科學決策
下一篇
Day 3 - Borg Omega and Kubernetes, Google 十餘年的容器化技術,應用導向的架構 (Application-oriented infrastructure)
系列文
Kubernetes X DevOps X 從零開始導入工具 X 需求分析*從底層開始研究到懷疑人生的體悟*30

尚未有邦友留言

立即登入留言