本文同步刊登於個人技術部落格,有興趣關注更多 Kubernetes、DevOps 相關資源的讀者,請務必追蹤從零開始的軟體工程師之旅,喜歡的話幫我按讚分享、歡迎留言、或是許願想要看的文章。
如果有技術問題也可透過粉絲專頁 討論,技術方面諮詢免錢、需要動手做另計 XD。
這是原文完整版本。好讀版請見 Borg Omega and Kubernetes 前世今生摘要
完整英文原文請見 Borg, Omega, and Kubernetes - Lessons learned from three containermanagement systems over a decade
回顧歷史,第一個容器只提供 root file system (透過 chroot)。
容器提供資源隔離 (resource isolation),Google 得以大幅提升資源使用率 (utilization) 超出當時產業平均值,例如
容器提供的資源管理工具實現此類需求,kernel-level 的資源隔離也確保程序之間不會互相干擾。Google 開發 Borg 中,同時也提交新功能給 Linux 容器,來滿足上述的需求。
然而目前的隔離並不完整,如果 Linux kernel 不管理的資源,容器自然也無法隔離,例如
現代的容器不只提供隔離機制,更提供映像檔 (image),在這個檔案上建構容器的應用。Google 使用 Midas Package Manager (MPM) 來建構並部屬容器映像檔,隔離機制與 MPM package 的關係,可以對比 Docker daemon 與 Docker image registry。這個章節描述的「容器」同時包含兩個概念:隔離、映像檔。
隨著時間證明,容器不只能提供高階的資源使用率,容器化 (containerization) 使資料中心 (data center) 從原本機器導向 (machine-oriented) 變成應用導向 (application-oriented),這個段落提供兩個例子:
建構這層抽象的關鍵是,使用密閉的容器映象檔 (hermetic container image) ,將所有應用有關的依賴 (dependencies) 都打包,整包部屬到容器中。
Google 希望透過推廣開放容器倡議 (Open Container Initiative) 來清楚界定,上述介面與容器的抽象層。
次外,容器提供的隔離與最小依賴,在 Google 證明非常有效,容器是 Google 架構上唯一的可執行單位 (runnable entity),進一步使 Google 只提供少數的作業系統版本給所有機器,只需要少數的維護人員來負責管理版本。
密閉容器映想檔有很多方式達成,
現代的容器映像檔格式,如 Docker 與 ACI,都加強這層抽象、提供更緊密的封裝,移除特定作業系統的依賴性,並要求使用者在分享映象檔內容時,必須明確宣告。
今天只是講古,知道 Kubernetes 的前世今生。文章重點在後面 XD
明日待續:容器作為管理單位 (Container as the unit of management),資料中心的轉型