容器技术的快速发展,挤占了传统虚拟机技术的很多地盘。没办法,在启动速度和运行性能上,容器实在有着太多的优势,而虚拟机技术的发展实在太过缓慢。
现在,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 很像,都是直接运行一个轻量级的虚拟机,然后里面再做事。
这些技术都有各自的优缺点,以及各自适合的应用场景,在很长一段时间内将会共存,甚至出现更多适合云计算时代场景下的虚拟化技术。