Borg Omega and Kubernetes Translation 全文翻譯

前言 這是原文完整版本。太長不讀 (TL;DR) 請見Borg Omega and Kubernetes 前世今生摘要 原文:https://storage.googleapis.com/pub-tools-public-publication-data/pdf/44843.pdf 摘要 在 container 技術夯起來前,Google 已經做了 container 十幾年,過程中發展出需三套容器管理系統。雖然每一代系統的開發需求不同,但每一代都深受上一代影響。這篇文章描述 Google 開發這些系統時,學到的經驗。 第一套 container management 系統是 Borg,為了管理 1. 長期執行的服務 2. 批次的短期工作 (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)。 ...

September 12, 2020 · 5 min · 1025 words · chechiachang

Borg Omega and Kubernetes TLDR 摘要翻譯

這是原文翻譯的太長不讀 (TL;DR) 版本。完整翻譯請見Borg Omega and Kubernetes 前世今生浩文完整翻譯 原文:https://storage.googleapis.com/pub-tools-public-publication-data/pdf/44843.pdf 前言 Borg 以前就有應用管理系統,那時還沒有 Linux control group Borg 是第一套統一的 container-management system Borg 仍被大規模的使用,有許多功能而且非常堅固 Omega 繼承 Borg 上成功的設計,並希望改進 Borg 的生態系 Kubernetes 開源 透過 REST API 溝通 client 應用開發導向,著重於開發者的需求,希望能簡單的部署複雜的系統 Container Google 使用 Container 來提昇 utilization 把 batch jobs 跟預留資源的服務 (user-facing app) 放在一起,使用閒置時的資源跑 batch job 現代 container 的定義是 runtime-isolation 與 image Application-oriented infrastructure container 使用久了,不只滿足 utilization 的需求 資料中心從機器導向變成應用導向 Container 封裝環境,把機器與 OS 的依賴抽象化 應用不依賴 部署流程 runtime infrastrcture Container scope 在應用上,專注在應用管理而不是機器管理 Application environment cgroup, chroot, namespace 原本的目的是為了保護應用,不被其他應用影響 混合使用可以在應用與 OS 間產生抽象層,解耦 app 與 OS 提供完全相同的部署環境,避免切換環境(ex. dev, prod)時造成環境差異 進一步把 app 的依賴程式也打包 image container 對 OS 唯一的依賴只剩 Linux kernel system-call interface 大幅增加 app 調度的彈性 然而有些 interface 仍附著 OS 上,ex socket, /prod, ioctl calls 希望透過 Open Container Initiative,清楚定義 interface 與抽象 直接的好處,少數幾種 OS 與 OS Version 就可以跑所有應用,新版本也不影響 Container as the unit of management 資料中心的重心,從管理機器變成管理應用 提供彈性給 infrastructure team 提供統一的架構 收集統一的 metrics Container 統一的介面,讓 management system (ex. k8s) 可以提供 generic APIs REST API, HTTP, /healthz, exec… 統一的 health check 介面,更方便的終止與重啟 一致性 容器提供統一的資訊,ex. status, text message, … 管理平台提供統一設定 (ex. resource limits) ,並進行 logging 與 monitoring 提供更精細的功能 ex. graceful-termination cgroups 提供 app 的資源使用資訊,而不需要知道 app spec,因為 contaier 本身即是 app 提供更簡單,卻更精細且堅固的 logging 與 monitoring 應用導向的 monitoring ,而不是機器導向的 monitoring 可以收集跨 OS 的 app 狀態,進行整合分析,而不會有 OS 不同造成的雜訊 更容易對應用除錯 nested contaiers resource allocation (aka. alloc in Borg, Pod in Kubernetes) Orchestration is the beginning, not the end 原本 Borg 只是要把 workload 分配到共用的機器上,來改善 utilization 結果發現可以做更多事情,來幫助開發與部署 Naming, service discovery Application-aware load balancing Rollout tool Workflow tool Monitoring tool 成功的工具被留下 然而工具都需要各自的 API,副作用是增加部署的複雜度到 Borg 的生態系 Kubernetese 試圖降低複雜度 提供一致的 API ex. ObjectMetadata, Specification, Status Object metadata 是全域共通的 Spec 與 Status 根據 Object 有所不同,但是概念是一致的 Spec 描述 desired state of object Status 提供 read-only 的 current state of object Uniform API 有許多好處 降低學習成本 可以使用 generic 的工具讓所有 workflow 使用 統一使用者的開發流程與開發經驗 Kubernetes 本身模組化,可以使用延伸模組 ex. pod API 讓使用者使用,kubernetes 內部使用,外部自動化工具也使用 使用者可以自己增加 customized API 如何達到 Uniform API decoupling API 切分 API 關注的面向,變成不同 components API. ex. replication controller 確保 desired 數量的 Pod 存在 autoscaler 關注在需求與使用的預測,然後控制 replication controller API higher-level 服務都共用相同的 basic API 切分 API 而外的好處 有關聯但是用途不同的 API 的內容與使用方式十分相似. ex. ReplicationController: 控制長時間運行的 containers 與其複本 DeamonSet: 每個機器上都跑一個 container Job: 一次性執行完畢的 container Common design patterns ex. reconciliation controller loop 在 Borg, Omega, Kubernetes 中大量使用 需求(desired state) 觀察現況(current state) 執行動作,收斂需求與現況(reconcile) loop 由於狀態是基於實際觀測產生,reconciliation loop 非常堅固,可以承受相當的 failure Kubernetes 設計為一連串的為服務系統,以及許多小型的 control loop 對比大型的 centralized orchestration system Things to avoid Google 開發過程中,也發現許多不該做的事情 ...

August 26, 2020 · 3 min · 557 words · chechiachang

2020 IT邦幫忙鐵人賽

2020 IT邦幫忙鐵人賽

September 9, 2019 · 1 min · 151 words · chechiachang