Docker, Hyper和GuestOS的終結

jopen 9年前發布 | 12K 次閱讀 Docker


【編者按】CaaS(Container-as-a-Service)的出現,一方面繼承了PaaS的理念,另一方面期望借助 Docker的通用性,使得CaaS已經徹底取代了傳統的PaaS(Heroku,CloudFoundry),成為社區和Startup圈子的關注焦 點。但是CaaS的理念是分離底層IaaS資源,使得用戶專注于應用開發,而GuestOS的存在破壞了這種透明性,Hyper的出現使GuestOS喪 失了在CaaS中的價值, vip賬號共享 而隨著IaaS向CaaS的逐步演進,我們也將目睹未來云計算市場里GuestOS的終結。

以下為原文:

GuestOS是什么

GuestOS這個詞想必對于從事云計算的同學并不陌生。在Docker出現之前,云計算分為經典的三層:

  • SaaS
  • PaaS
  • IaaS

在 IaaS堆棧中,每一個虛擬機(VM)都運行著一個完整的操作系統。為了區別與物理服務器上的OS,大家習慣性的把VM里的OS稱為GuestOS,而把 物理機上的OS稱為HostOS。對于用戶而言,GuestOS是IaaS平臺的標配,用戶需要登錄GuestOS來進行配置,部署代碼,運行應用。

IaaS + PaaS --> CaaS

隨 著Docker的出現,云服務的分類中又涌現了一個新成員:CaaS(Container-as-a-Service)。CaaS一方面繼承了PaaS的 理念,希望通過將應用與底層基礎資源的分離,達到簡化應用開發,減少運維成本,加速業務的效果;另一方面期望借助Docker的通用性,避免PaaS的技 術局限性,更加貼近IaaS的用戶體驗。

從走勢來看,CaaS已經徹底取代了傳統的PaaS(Heroku,CloudFoundry), 成為了社區和Startup圈子的關注點。但無論是Google GKE, AWS ECS, 還是Tutum,GiantSwarm等等,目前CaaS大多是建立在IaaS之上,理由很簡單:

  • Docker是基于Linux Container,正好運行在IaaS提供的VM里;
  • Container的隔離性不夠,導致無法基于容器提供安全的多租戶CaaS服務,只能根據VM對不同用戶做隔離

下面這張圖是一個清晰的架構描述:

Docker, Hyper和GuestOS的終結

在 這個體系下,用戶需要預先在IaaS平臺上創建一組VM,再在VM里部署CaaS的agent;CaaS master通過這些運行在GuestOS里的agent遠程操縱用戶的VM,部署Docker鏡像,啟動Container,監控應用運行狀態并進行相 應相應的管理。

這個架構的好處是簡單易行,不好的地方在于GuestOS的不透明性。前文提過,CaaS的理念是分離底層IaaS資源,使 得用戶專注于應用開發。GuestOS存在破壞了這種透明性,比如必須預建VM集群。換句話說,用戶需要在應用部署前做好各種規劃:集群規模,VM size,GuestOS選擇(CentOS,Ubuntu?),GuestOS內部的配置(磁盤RAID,LVM)等等。大家都知道,現實里計劃總是趕 不上變化,每次新業務需求出現時往往關聯著底層配置的變化。于是,雖然有了CaaS,但運維的同學們仍然需要頻繁的手動調整VM配置,管理 GuestOS。

此外,GuestOS+Container實質上是在IaaS上層建立一個VM資源池,通過master對池中的資源進行 分配調度,最大程度的提高資源池利用率。這有點類似物理機IDC時代,預先購置一堆物理服務器,托管或者自建機房。無論是CaaS還是物理機,由于業務負 載本身的不確定性,資源池里任何時間點必然有一部分VM被閑置浪費掉。

第三,這個架構的另一弊端在于CaaS服務無法借助IaaS的底層功 能。以SDN為例,目前絕大部分的IaaS平臺都提供了非常完整的VPC功能,用戶可以根據自身需求靈活的定義復雜的網絡拓撲和安全策略。當使用CaaS 服務時,如果用戶需要類似的SDN功能,那要么CaaS平臺本身提供,要么借用IaaS服務。但這兩者都存在問題:,

  • CaaS提供:這意味著在IaaS的VPC網絡之內再創建一套VPC網絡,無論是性能,復雜度,可靠性,還是調試難度,可想而知都非常不理想
  • 借用IaaS:用戶可以在 創建VM資源池的同時,使用IaaS的SDN功能,在資源池內部定義VPC網絡,這樣就避免了嵌套CaaS VPC。Again,計劃跟不上變化,當業務變變更時,用戶要隨時調整資源池,這無疑不是PaaS/CaaS追尋的目標。

基于Hyper的CaaS

Hyper是一個基于虛擬化技術(hypervisor)的Docker引擎。它可以使用任意的hypervisor(KVM,Xen,VMWare等等)直接運行Docker鏡像。

[root@user ~:]# docker pull nginx:latest
    [root@user ~:]# hyper run nginx:latest
    [root@user ~:]# docker ps
    [root@user ~:]#
    [root@user ~:]# hyper list
    ......
    Done

值得指出的是,雖然Hyper同樣通過VM來運行Docker應用,但HyperVM里并沒有 GuestOS,相反的,一個HyperVM內部只有一個極簡的HyperKernel, vip賬號共享 以及要運行的Docker鏡像。這種Kernel+Image 的"固態"組合使得HyperVM和Docker容器一樣,實現了Immutable Infrastructure的效果。

從用戶角度來看,一個Immutable的HyperVM對簡化運維有很大的作用:

  • VM配置(磁盤格式化,網卡屬性,進程管理)在運行前指定,用戶無需登錄進行操作
  • 所有配置在VM運行過程中完全固化,不產生變化
  • 當業務應用發生變更時,不用像之前描述的那樣登錄VM手動修改配置,而是借助HyperVM的毫秒級啟動特性,快速創建新HyperVM取代原有VM

這樣"固態而快速“的運維流程大大降低了應用部署,升級,回滾的復雜度,同時消除了生產環境里的手工因素,避免了人為事故的風險。

在另一方面,借助VM天然的隔離性,Hyper能夠完全避免LXC共享內核的安全隱患。結合HyperVM"固態"的特性,這使得我們可以拋棄之前IaaS+VM+Agent+Container的思路重新思考CaaS:

Docker, Hyper和GuestOS的終結

在圖里右側的CaaS里:

  • 用戶只需要準備好Docker鏡像,將定義好的Mesos Marathon模板文件提交給CaaS平臺
  • CaaS平臺分析Marathon文件,創建所需的SDN網絡和存儲卷,并啟動HyperVM運行用戶Docker鏡像
  • 對于新版本鏡像部署,網絡和存儲配置變更的情況,用戶將修改好的Marathon文件再次提交即可

在Hyper的CaaS架構里,

  • HyperVM取代了Container成為CaaS的調度單元,所有HyperVM的配置由CaaS完成,用戶不再需要登錄VM手動操作
  • 用戶不再需要預先創建VM資源池,也不再有VM閑置浪費
  • 由于Hyper底層使用的是虛擬化技術,所以SDN,分布式存儲等等成熟的IaaS技術可以直接在Hyper CaaS里直接使用,既簡化了平臺復雜度,也提高了性能和可靠性

OS的未來

在Hyper CaaS之前,CoreOS和RancherOS是兩個非常流行的Minimalist Linux Distro。雖然它們不是專門為VM設計的,但卻被常常用作GuestOS,在IaaS上運行Docker容器。Hyper的出現使GuestOS喪失 了在CaaS中的價值,而隨著IaaS向CaaS的逐步演進,我們也將目睹未來云計算市場里GuestOS的終結。但這并不意味著CoreOS的終結,恰 恰相反,新一代的極簡OS將回歸它們的本源:運行在Bare metal之上,成為未來CaaS的基石!

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!