淺析 Hyper -- 新一代虛擬化技術?
容器技術的快速發展,擠占了傳統虛擬機技術的很多地盤。沒辦法,在啟動速度和運行性能上,容器實在有著太多的優勢,而虛擬機技術的發展實在太過緩慢。
現在,hyper_ 團隊 推出了啟動速度可以跟容器媲美的新一代虛擬機技術 -- hyper。
簡介
hyper 是基于 go 實現的開源項目,代碼托管在 github 上。。
簡單的說,hyper = Hypervisor + Kernel + Docker Image,本質上還是一種虛擬機技術,只不過是應用中心(app-centric)的虛擬機。
hyper 將容器運行在了虛擬機里,只不過這個虛擬機是精簡過的(基于 qboot),可以快速啟動停止的虛擬機。目前,可以運行在 KVM 上,操作系統要求為比較新的 debian/ubuntu、centos 等,內核建議為 4.0.1,docker 版本至少為 1.5.0,qemu 至少為 2.0。
hyper 每個虛擬機中可以同時運行多個容器進程,借用了 kubernetes 中的 pod 的概念。每個虛擬機就是一個 pod(使用外部的 podfile, JSON 或 YAML 格式,來定義包括哪些應用),其中的運行的容器進程共享命名空間(不使用命名空間隔離),但用 mount 命名空間來隔離內部多個鏡像的 root 文件系統。
優勢
優勢很明顯,就是容器技術一直缺乏的,跟傳統虛擬機相關的優勢:
- 可以平滑地跟已有基于虛擬機的技術和平臺進行整合;
- 大大提高了容器已有隔離技術的安全性,特別是不需要共享內核;
- 不依賴已有容器技術(Docker daemon, LXC, Cgroup, Namespace),只需要 MOUNT 命名空間支持。
劣勢
劣勢也很明顯:
- 增加了額外的資源消耗,包括額外的內核和進程;
- 并非像宣稱的那樣成熟,目前還只是 0.1 版本;
- 硬盤 IO 性能沒公布,猜測會跟虛擬機類似;
- 暫時不支持分層文件系統;
總之,生態環境還有待建立。
安裝使用
安裝
很簡單,直接下載 bash 腳本安裝。
- # curl -sSL https://hyper.sh/install | bash
使用
- # docker pull ubuntu:14.04
- # hyper run ubuntu:14.04
- POD id is pod-IEKZbVtzef
- root@ubuntu:14:/#
- ...
- # hyper list
- POD ID POD Name VM name Status
- pod-IEKZbVtzef ubuntu 14.04-5551572656
支持的命令跟 docker 很類似,包括 run、start、stop、attach、exec、create、replace、rm、info、list 等等,更多信息可以參考官方文檔:https://docs.hyper.sh/index.html
原理
hyper 的組件十分簡單:
- hyper 提供命令行接口
- hyperd 提供核心維護引擎,支持 REST
- 虛擬機實例:hyperkernel 作為 guest os 的kernel;hyperstart 作為啟動 init 服務。
展望
實際上,現在已有一些類似的技術,包括兩大類:
- 直接基于容器進行進一步封裝,CoreOS、RancherOS、Photon 等,實際上還是直接跑容器,跑的應用還是在容器內;
- Intel 的 Clear Container 跟 hyper 很像,都是直接運行一個輕量級的虛擬機,然后里面再做事。
這些技術都有各自的優缺點,以及各自適合的應用場景,在很長一段時間內將會共存,甚至出現更多適合云計算時代場景下的虛擬化技術。