php Firefox Android shell nginx 开源 Windows java Ubuntu centos google 微软 wordpress Python 程序员 mysql 编程 云计算 linux apache

虛擬化與Docker容器:雲計算舊愛新歡的博弈

Docker容器技術——這個風頭直追OpenStack的雲計算開源項目,關於它的熱議已席卷虛擬化乃至雲計算行業,業內各大廠商(包括亞馬遜、紅帽、IBM和 VMware 等)都加入了容器的行列。這不禁讓人想問:容器技術的崛起是否會帶來虛擬化時代的結束?

容器,並不是一個新技術。容器的Linux版本最早見於內核2.3.x,名不見經傳地發展了幾十年,但在過去的一年裏,Docker帶領容器技術突然躍進了大眾視野。Docker何以突然獲得行業巨頭的青睞?

從技術角度看,傳統容器只解決了容器執行(run)問題,而Docker定義了一套容器構建(build)、分發(ship)和執行(run)的標準化體系,開創了容器雲端開放平臺(Docker Hub Docker Engine)的模式,極大地提高了開發部署效率。

從生態圈的角度看,Docker過去一年之所以開始普及,主要是在雲計算產業迅速發展的環境下,Docker作為虛擬化的補充甚至替代技術而被人們所關註。

那麽,Docker技術與虛擬化技術有何區別?從虛擬化層面來看,傳統虛擬化技術是對硬件資源的虛擬,容器技術則是對進程的虛擬,從而可提供更輕量級的虛擬化,實現進程和資源的隔離。

從架構來看,Docker比虛擬化少了兩層,取消了hypervisor層和GuestOS層,使用 Docker Engine 進行調度和隔離,所有應用共用主機操作系統,因此在體量上,Docker較虛擬機更輕量級,在性能上優於虛擬化,接近裸機性能。從應用場景來看,Docker和虛擬化則有各自擅長的領域,在軟件開發、測試場景和生產運維場景中各有優劣。

軟件開發、測試場景誰能勝出?

快速創建、刪除:虛擬化創建是分鐘級別的,Docker容器創建是秒級別的,Docker的快速叠代性,決定了無論是開發、測試、部署都可以節約大量時間。

交付、部署:虛擬機可以通過鏡像實現環境交付的一致性,但鏡像分發無法體系化;Docker在Dockerfile中記錄了容器構建過程,可在集群中實現快速分發和快速部署,並且開發、運維、部署和測試人員獲得高度一致的環境與配置。

性能:Docker在操作系統級別進行虛擬化,Docker 容器和內核交互,幾乎沒有性能損耗,性能優於通過hypervisor層與內核交互的虛擬化,這已經被IBM測試驗證。

體量:Docker的架構可以共用一個內核與共享應用程序庫,所占內存極小,部署一個Ubuntu只需20MB,而虛擬機即使采用內存超量技術也遠不止於此。

遷移和擴展:虛擬機的遷移較為復雜,尤其在異構環境下;而Docker容器可以在任何平臺上應用,不論公有雲、私有雲、服務器、PC、虛擬機或物理機,都可以輕松跨平臺遷移。

更新管理:以往分布式環境下更新是很煩瑣的事情,虛擬化中各個廠家的實現基本是借助各自工具配合虛擬化軟件,向虛擬機推送安裝、升級應用軟件補丁包; Docker的更新是叠代式的,只需修改Dockerfile,對增量內容進行分發、存儲、傳輸、節點啟動和恢復迅速。

從以上比較可看出,這一局Docker表現不俗,大比分勝出。Docker適用於可伸縮的分布式集群開發環境,實現軟件的輕松跨平臺功能,例如大數據hadoop、spark等軟件框架,保持開發、部署、質量管理、產品管理等環境的一致性,實現DevOps(開發運維)的關鍵環節能力,使開發或運維的一線人員從環境差異中解脫。

企業生產環境 運維中誰能勝任?

穩定性:Docker目前發布版本是1.6,屬於較新版本的軟件產品,每月更新一個版本的速度,在產品活躍的同時也表現出不穩定性,用於生產環境需要企業承擔不小的風險。虛擬化的版本發展到VMware vSphere6.0,Xen最新版本Citrix XenServer 6.5,KVM作為虛擬化的新星,從內核2.6.20開始集成進入內核,目前發展到內核4.0.5,大版本的發展增強了他們的穩定性。

可管理性:Docker的集中化管理工具尚未成熟,相對穩定的管理工具,Shipyard在管理上還較為粗糙,多是面向應用層面的管理。在虛擬化方面,各種虛擬化技術都有成熟的管理工具,例如VMware vCenter提供完備的虛擬機管理能力,OpenStack對KVM支持程度屬於A類(最佳適配)。此外,Redhat采用oVirt專門提供對KVM虛擬機的集群管理,並推出CloudForms提供異構虛擬化環境下的管理。

監控能力:對於企業所關心的系統、運行的健康狀況、風險報告等,Docker沒有對使用情況配置、追蹤和報告。虛擬化基於hypervisor進行資源的分配,監測各類性能指標不在話下,集成在hypervisor層的監控能力可對性能、服務器硬件和虛擬化特定軟件的警報與事件處理等進行不同顆粒度的監控。

高可用和可恢復性:Docker對業務的高可用支持是通過快速重新部署實現的,關於數據本地的高可用、備份和遠程容災等沒有較好的解決方案。虛擬化具備負載均衡、高可用、容錯、遷移和數據保護等經過生產實踐檢驗的成熟保障機制,VMware可承諾虛擬機99.999%高可用,保證業務連續性。

連通性:容器是基於主機的解決方案,不同主機上的網絡訪問比較原始,可通過端口映射到主機操作系統,使服務可以通過網絡訪問。相比之下網絡虛擬化技術,基於封裝和隧道技術,如vlan、vxlan、NVGRE等,已能滿足虛擬機間、跨主機間的通信需求。此外,Docker適用於單一類型的操作系統之間共享內核,對於多操作系統的環境,虛擬化更能滿足。

安全性:Docker的租戶root和宿主root等同,一旦容器內的用戶從普通用戶權限提升為root權限,它就直接具備了宿主機的root權限,進而可進行幾乎無限制的操作。虛擬機租戶root權限和宿主機的root權限是分離的,並且虛擬機利用如Intel的VT-d和VT-x的ring-1硬件隔離技術,這種隔離可以防止虛擬機突破和彼此交互,而容器至今還沒有任何形式的硬件隔離,這使它容易受到攻擊。而對於企業生產環境而言,安全畢竟是第一要務。

企業生產環境運維中虛擬化較為勝任。與面向應用的Docker不同,虛擬化是面向底層架構的,目標是構建高可用雲計算的IaaS資源池。在以往容器技術發展並不成熟之前,虛擬化技術搶占了一些面向應用的需求,預計在將來的發展中這些需求將被Docker收編。

Docker、虛擬機:我們在一起了

虛擬化的廠家開始支持容器:亞馬遜推出了彈性容器服務(ECS),並在2014年秋正式推出該服務。

在AWS客戶啟動容器後,ECS將負責擴展容器,並提供中央管理門戶網站來追蹤它們,提高了雲移植性和降低了成本。VMware已經宣布將支持容器,強調采用虛擬機作為介質部署容器可對容器安全性和管理控制進行補充。

Linux大佬、KVM的主要支持者Redhat也開始支持Docker,Linux系統是容器技術的頂梁柱,得到Redhat支持意義非常重大。

Redhat將Docker集成到自己的操作系統RHEL中以KVM承載Docker,並推出了RHEL 7 Atomic host容器優化系統,Atomic定義了Redhat認證的Docker宿主、容器源、容器開發包等,瞄準了原本安全堪憂的Docker,從整體架構的各個層面進行可信認證。另外還提供更小的Docker鏡像文件,在集群管理方面采用Kubernetes實現。

Docker主動向虛擬化靠攏:在歐洲DockerCon會議上,Docker公司發布了跨容器的分布式應用編排服務,編排服務可以幫助開發者和運維人員創建並管理新一代可移植的分布式應用程序。

在這些容器編排服務中,有一個重要的服務叫Docker Machine,主要是方便在各個雲計算廠商的基礎架構上快速安裝部署Docker服務,目前官方已經支持AWS、Azure。

取長補短,和而不同

從開源協作到DevOps,從持續集成交付到微服務,Docker一次次顛覆了軟件開發生命周期,不難看出,Docker可以屏蔽架構層的實現,只關註PaaS層的需求,而虛擬機擅長解決原來物理機時代所帶來的高可用、運維、管理等問題。

Docker和虛擬機結合可以彌補純物理機架構下使用容器的不足,例如在安全性和管理控制方面,直接在裸機運行容器需要配置網絡和安全連接,虛擬機可以在管理系統中輕松處理這些問題。

正如虛擬化技術KVM已集成到內核中,成為標準Linux內核模塊一樣,預計Docker將來會向內核集成發展,容器技術將成為標準的操作系統服務。那麽,二者除了以上的關註層面不同外,虛擬機、Docker 虛擬機、Docker 物理機這三種組合,面對不同業務類型我們將如何選擇?

對於高I/O要求的業務,例如數據庫服務,建議部署Docker 物理機,因為在虛擬機中部署Docker,I/O性能將受到虛擬機的限制。

對於虛擬桌面服務等強調租戶權限和安全的業務,建議采用虛擬機方式,虛擬機的多租戶強隔離特性,保證租戶在擁有虛機root權限的同時,其他租戶和主機的安全。

此外,大部分業務系統將適用於虛擬機 Docker形式的組合,操作系統和Docker引擎采用虛擬機鏡像封裝,平臺軟件、業務組件等與業務相關軟件采用容器鏡像封裝,為實現安全隔離和資源的高利用率,基本應該遵循:不同租戶的業務運行采用虛擬機隔離,相似類型的業務部署在同一組容器上的思路。

延伸阅读

    评论