Friday, June 26, 2015

浅析 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 等等,更多信息可以参考 官方文档

原理

hyper
hyper 的组件十分简单:
  • hyper 提供命令行接口
  • hyperd 提供核心维护引擎,支持 REST
  • 虚拟机实例:hyperkernel 作为 guest os 的kernel;hyperstart 作为启动 init 服务。

展望

实际上,现在已有一些类似的技术,包括两大类:
  • 直接基于容器进行进一步封装,CoreOS、RancherOS、Photon 等,实际上还是直接跑容器,跑的应用还是在容器内;
  • Intel 的 Clear Container 跟 hyper 很像,都是直接运行一个轻量级的虚拟机,然后里面再做事。
这些技术都有各自的优缺点,以及各自适合的应用场景,在很长一段时间内将会共存,甚至出现更多适合云计算时代场景下的虚拟化技术。

No comments:

Post a Comment