這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
【編者的話】從2013年Docker發布,到2014年的全面引爆,Docker給了我們一個明顯的感覺——容器正在成為新的“銀彈”,而Amazon AWS引爆的虛擬機器技術已成了昨日黃花。
審視一下Docker,我們從中學到了什麼——Docker的關鍵點在於它是以App為中心的運行環境的封裝,自從有了Docker,開發、測試、生產都可以使用完全相同的環境部署,生產環境需要維護的很多東西都在開發時就固化在鏡像內了,維護難度下降,一致性和可確定性提升,持續傳遞不是夢。
所以,對虛擬機器在容器面前的苛責,用一句話說就是——“虛擬機器”的問題不在於“虛擬”,而在於“機”。自然地,我們會想可不可以做App為中心的虛擬化呢?
Hyper就是這樣一種App-Centric的虛擬化技術,我們完全摒棄了傳統虛機上必須和物理機一樣,運行一個完整OS這種看似顯然的假設,我們讓Docker Image直接運行在Hypervisor上。我們讓一組容器直接啟動在hypervisor上的時間達到350毫秒,並且還在進一步最佳化。而且所有這些,都是“開箱即得的”。
當然有人會問,有了容器為什麼還要虛機。誠然,虛機並不是所有人都需要的,但是,虛機天然具備更好的隔離性;虛擬機器也仍然存在於很多公司專屬應用程式的協議棧中,這樣一個依賴更少、開箱即得,而且還帶有Pod、persist mode等附加豐富特性的應用,是不少情境中都需要的。而我們最期待的,就是去引爆新的Container Service——CaaS。
從 Docker 到Container Service
Docker 是這兩年來,雲端運算領域最熱門的創業項目,帶動了整個 Container產業。他們最厲害的一點在於,開發人員直接輸出 Docker Image 或者 Dockerfile,測試、部署就可以做到高度一致,這裡還是貼出對 @杜玉傑@華為開源 杜總的截屏的截屏:
隨著Docker的普及,越來越多應用開始傾向於採用Docker的方式部署——作業系統將只用於承載Docker,提供輔助性功能,逐漸同質化,CoreOS,Redhat Atomic,Ubuntu Core 都在走向這個方向。而 IaaS 或者 PaaS 服務商們,必然向 CaaS——容器即服務轉型,避免真的淪為自來水一樣的基礎設施。
Hyper——用虛機解決隔離問題
但是,Container的隔離性無法得到徹底解決(圖片引自黃強的演講)
於是就有了兩個不同的選擇——要追求效能,那麼就將物理整機機出租給使用者,但是這樣做彈性有限,回收之後對系統的清理很複雜,而且使用者可以接觸到物理機、BIOS、網路,會產生一定安全隱患;或者出租虛擬機器給使用者——AWS ECS(EC2 Container Service)的選擇,這樣就損失了效能,而且使用者其實對維護虛擬機器的作業系統沒興趣。
這裡我們要說的就是一個其他的選擇——直接用虛擬機器承載容器: Hyper = hypervisor docker image。
傳統虛擬機器的問題其實在於過於刻意模仿物理機,刻意要承載完整作業系統,啟動一台虛擬機器要若干秒,甚至幾分鐘,Image 有若干GB,載入傳播都很慢,但其實根本沒有這個必要,Hyper希望兼取兩者的強項
Hyper 在啟動方面開銷很低,即使很入門的機器,也可以有很好的效能,比如在一個小盒子上,裡面跑的是超低電壓的 i3 CPU,啟動所用的時延只有不到500ms——
而且 Hyper 的命令列用法和 Docker 很相似,簡單到一個 run 命令就可以啟動一個 docker image
Hyper 的實現架構是這樣的
在虛機上,引導起 kernel 之後,用 init 進程直接啟動 Docker Image,沒有完整OS。所有的 image 的處理,在虛擬機器外面準備好,插入虛擬機器運行。
此外,有時,你需要 link 幾個密切關聯的 docker,這樣的時候,hyper 允許你把它們放在一個虛機裡面,通過mount namespace隔離檔案系統,這稱為 pod,這個概念來自於 kubernetes。
One more thing
Hyper 還有一些額外的好處,對基於虛擬機器的私人雲端架構,利用 hyper, 可以讓已經有的針對虛機的軟體棧,更平滑地向容器化的方向遷移。而且,虛機可以更好地相容已有 openstack 軟體棧,主流裝置廠商的網路和存放裝置都提供了針對 OpenStack Neutron 和 Cinder 的驅動,可以快速構建私人雲端。
我們也提出了 HyperStack ,也歡迎 OpenStack 社區的夥伴一起推動容器化的應用。
下一步即將到來的改進
- 多 Hypervisor 支援—— Xen 本周發布,Virtualbox 開發中, ESXi 在 Roadmap 上
- 跨平台——Mac 的支援在開發中
歡迎訪問我們的首頁: hyper.sh,
QA 環節
問:有木有嘗試解決k8s的領域?
答:我們目前支援 k8s 的 pod 格式,服務還需要進一步整合。
問:用現有的openstack docker整合怎樣?
答:
這個,其實也是openstack社區在做的方向之一,實際上最終的解決方案基本上還是傾向於 虛機-容器 兩層架構,我們倒是致力於變成一層虛機,各有優缺點吧。
問:持續整合怎麼玩耍?
答:
- 我們是直接跑 docker image 的,所以直接用跑Docker 持續整合就沒問題
。
- 也可以在整合測試裡用 hyper 做 runtime
問:你們做的是不是把虛擬機器和容器進行合理的融合?
答:合理不合理這個不好自己評價啊,我們實際上用了虛擬機器和 docker image,沒用 lxc 或 libcontainer。
問:hypervisor相當於是一個針對docker進行裁剪的虛擬機器,不知道理解對不對?
答:
嗯,hyper 基本上是一個剪裁最佳化過的虛擬機器。
問:你們今後會支援Hyper-V嗎?
答:暫時沒有,這方面經驗不夠豐富,今後可能會考慮。
問:有規模測試嗎,或者效能測試?
答:測試結果比較符合大家對虛擬機器效能的估計,CPU/Mem 子系統和物理機接近,IO系統,效能越好的 IO 裝置越能看到一定效能差距,和使用方式(串列還是並發等)都有關係,不過如果大家用網路儲存,或者套一層虛機的話,就沒什麼差距了。
問:看了一下安裝貌似裝docker只是為了去下載鏡像,然後hyper去讀鏡像檔案,有沒有考慮去除Docker的依賴,這樣應該更容易理解hyper的本質。
答:是的,目前是用 docker daemon 來拉 image 的,將來有一個計划去掉這個依賴,這樣在 mac 上就也能跑了。
問:想了一下,應該是hypervisor的虛機預設運行一個docker daemon,裡面只有一個container,是不是這樣呢?
答:
需要相互耦合的 docker image ,會組成一個 pod,放在同一個虛機上跑,並且放在同一個 network namespace 裡,這樣比 link 還要方便一些,直接 localhost 訪問了。
問: 這麼說,hypervisor的下層就是物理機了吧?聽起來應該是自建私人雲端的企業比較需要它,另外就是IAAS本身適合用它構建?
答:
嗯,物理機上可以直接用,公用雲端做Container Service也可以用的。
問:相關的 image跑在一個虛擬上 那這些的images 的應用之間有隔離什麼的嗎?
答:這些 image 正常的話,屬於同一個租戶,相互間共用 ipc namespace 和 network namespace,只是有不同 mount namespace,檔案系統是隔離的。
問:虛機的lightkernel是你們定製好的?
答:
預設是我們定製好的,使用者可以用自己的 kernel,不過使用者自己的 kernel 可能效能略有差異。
問:coreos也可以裝在物理機上,相對於coreos,hyper有哪方面的競爭力呢?
答:
感覺還是不太一樣 coreos 更強調了os的維護,重點在 host os,我們強調了在 hypervisor 裡運行 image,重點在 vm 和 guest kernel 這邊,兩者還是有很不錯的合作前景的。
問:請問,基於虛擬機器的私人雲端架構,遷移到hyper,會不會有承載不了的情境?
答:會有,容器化,或者說是面嚮應用的封裝,會改變開發、測試、發布的流程,當你選擇了演化,我們來幫你演化的平滑,但不是說可以完全不動,安裝一下就一勞永逸地演化好了
。
問:即將到來的特性裡面,xen、virtualbox支援是什麼意思?
答:是讓xen通過用hypervisor來降低消耗?
各有所愛吧,有人喜歡 xen,有人習慣 kvm,至於 vbox 的支援,純粹是為了協助開發人員方便在自己的電腦上跑的。
問:插一句,OpenStack 的 Magnum 算是基於 Hypervisor 的 Docker 引擎嗎?
答:
那是個大項目啦,本身不是一個 docker 的執行引擎,但是我們覺得可以整合一下。
問:請問Hyper跟Intel前段時間發布的Clear Linux最大的區別是什嗎?
答:
- 作者不一樣,嗯
- clear linux 是比較純粹地直接替換 container 層,比較純粹地效能最佳化,我們有一些 pod 一類的 feature
- clear linux 對某些核心特性乃至 CPU 特性依賴的比較強烈,做到了很好的效果,我們則強調了多 hypervisor 的可能性,以及 out-of-box 的工作
當然,clear linux 和我們的努力有更多的方面是一樣的——大家都樂於去用虛機來承載應用為中心的鏡像,這個趨勢應該說是得到了認同的。
===========================
以上內容根據2015年6月9日晚群分享內容整理。
分享人王旭,Hyper 聯合創始人、CTO,曾就職於中國移動研究院、盛大雲端運算,以及擔任 VisualOps CTO,從事分布式儲存系統和DevOps工具開發等工作。王旭也是一位技術作者與譯者,王旭的譯文和文章主要涉及了Linux核心、檔案系統、虛擬化、Hadoop、NoSQL與分布式儲存系統等主題。是O'Reilly的《Cassandra權威指南》的譯者。接下來,DockOne每周都會組織定向的技術分享,歡迎感興趣的同學參與。