不是每一次努力都会有收获,但是每一次收获都必须努力,这是不可逆转的。
虚拟化技术各个专有名词和概念总结
虚拟化定义
虚拟化主要指的是特殊的技术,通过隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)(IBM定义)。虚拟化为有效利用大型机的资源提供了技术支持。虚拟机技术也是多种多样,而可以虚拟的层次或者可虚拟的方面也是遍布从硬件到应用层整个计算机系统。如图片所示:
虚拟机分类
虚拟机的分类也是多种多样。可以通过是否在裸机上部署来分为面向主机的的虚拟机和面向裸机的虚拟机。面向主机的虚拟机是指的在一台已经安装操作系统的主机上安装虚拟机管理(VMM)程序,而面向裸机的是指在裸机上直接安装虚拟机管理程序,所有的虚拟机调用都是直接由虚拟机管理程序来负责,没有了操作系统这一步,所以这种方式在效率上要高于面向主机的。不过,比较流行的技术比如vmware,xen都是面向主机的。
然后根据上面的图去分类的话,可以分为对硬件的虚拟和对操作系统或者对软件的虚拟。在硬件虚拟化这个层面,又有三种不同的技术:
1)Full Virtualization(全虚拟化),几乎是完整地模拟一套真实的硬件设备。大部分操作系统无须进行任何修改即可直接运行在全虚拟化环境中。像kvm等技术是全虚拟化。
2)Partial Virtualization(部分虚拟化),仅仅提供了对关键性计算组件或者指令集的模拟。操作系统可能需要做某些修改才能够运行在部分虚拟化环境中。
3)Paravirtualization(半虚拟化),不对硬件设备进行模拟,虚拟机拥有独立的运行环境,通过虚拟机管理程序共享底层的硬件资源。大部分操作系统需要进行修改才能够运行在半虚拟化环境中。它的性能要稍微高于全虚拟化。像Xen。因为需要改动托管系统的内核,所以xen是不支持win虚拟机的。
另外还有像硬件辅助虚拟化,就是宿主机的硬件架构在一定程度上提供对虚拟化的支持。像Intel-VT与AMD-V都提供了这等架构支持,请参考给出的参考资料。
软件层面的虚拟化,往往是指在同一个操作系统实例的基础上提供多个隔离的虚拟运行环境,也常常被称为容器技术。LXC(Linux Container)则是采用了这种技术,它主要是采用了linux本身提供的技术,在一定程度上模拟虚拟化。软件虚拟化也可以理解成进程级虚拟机,其他虚拟化成为系统级虚拟机。在进程级虚拟机中负责虚拟化的软件成为运行时软件,而系统级虚拟机中负责虚拟化的软件成为VMM(Virtual Machine Monitor)
对于硬件与软件虚拟化两种技术,都是存在优点和缺点。对于硬件虚拟化,我们讨论全虚拟化和部分虚拟化。因为现在大部分的虚拟化技术Xen、kvm都支持这两种。硬件虚拟化基本上就是在一台宿主机上虚拟了整个系统,各台虚拟机之间相互不可见。这会很明显导致很多重复的线程和重复的内存页出现,性能上肯定会有影响。所以采用这种技术,一台宿主机上虚拟机的个数肯定会有一定限制。
对于软件虚拟化,我们讨论LXC,因为只有这一种我用过。LXC是通过cgroup对线程进行隔离,对资源进行限制;通过Namespace对调用系统提供的系统调用来进行资源隔离。LXC介绍。通过此也可以看出,它所有虚拟化出来的虚拟机都是运行在宿主机本身上的,它的线程和资源对宿主机都是可见的。这就不存在很多重复的线程和内存也的问题,所以一台宿主机上可以通过此技术虚拟出更多的虚拟机。
最近非常流行的Docker也是软件虚拟化的一种,它的原理也是使用了linux提供的namespace对资源进行隔离,不过它提供了比LXC更强大的功能实现。
Hypervisor
Hypervisor是什么?
Hypervisor 是一种运行在物理服务器和操作系统之间的中间软件层(可以是软件程序,也可以是固件程序),可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器VMM(Virtual Machine Monitor)。
Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
Hypervisor 翻译过来就是超级监督者,被引申用为超级管理程序、超多功能管理器、虚拟机管理器、VMM。
Hypervisor分类
I型:虚拟机直接运行在系统硬件上,创建硬件全仿真实例,被称为“裸机”型。—全虚拟化
裸机型在虚拟化中Hypervisor直接管理调用硬件资源,不需要底层操作系统,也可以将Hypervisor看作一个很薄的操作系统。这种方案的性能处于主机虚拟化与操作系统虚拟化之间。
- 举例
- VMware5.5及以后版本
- Xen3.0以后版本
- Virtual PC 2005
- KVM
II型:虚拟机运行在传统操作系统上,同样创建的是硬件全仿真实例,被称为“托管(宿主)”型。托管型/主机型Hypervisor运行在基础操作系统上,构建出一整套虚拟硬件平台(CPU/Memory/Storage/Adapter),使用者根据需要安装新的操作系统和应用软件,底层和上层的操作系统可以完全无关化,如Windows运行Linux操作系统。主机虚拟化中VM的应用程序调用硬件资源时需要经过:VM内核->Hypervisor->主机内核,因此相对来说,性能是三种虚拟化技术中最差的。—半虚拟化
- 举例
- VMware5.5以前版本
- Xen3.0以前版本
- Virtual PC 2004
Ⅲ型:虚拟机运行在传统操作系统上,创建一个独立的虚拟化实例(容器),指向底层托管操作系统,被称为“操作系统虚拟化”。操作系统虚拟化是在操作系统中模拟出运行应用程序的容器,所有虚拟机共享内核空间,性能最好,耗费资源最
少。但是缺点是底层和上层必须使用同一种操作系统,如底层操作系统运行的是Windows系统,则VPS/VE就必须运行Windows。
KVM
对于kvm来说,其是一款支持虚拟机技术,而且是linux内核中的一个功能模块。它在linux2.6.20之后的任何linux分支中都被支持。它还有一个条件,对硬件要求的条件,必须达到一定标准的硬件架构。对于Intel-VT与AMD-V都是支持的。对于是否支持也可以通过命令行查看:egrep ‘(vmx|svm)’ –color=always /proc/cpuinfo。如果有任何内容则说明当期硬件架构是支持kvm的,否则就不支持。另外,就算支持,但是在bios中是默认设置不打开该功能的,所以你还要去bios设置其为enable。当设置成功之后,还需要关机一次,注意是关机而不是重启。否则该设置的更改就不起效。kvm安装请google。
QEMU
说明:个人理解,KVM是内核虚拟化技术,而内核是不能使用在界面上使用的,那么此时QEMU提供了用户级别的使用界面,相互辅助。当然,单独使用QEMU也是可以实现一整套虚拟机,不过QEMU+KVM基本是标配Linux虚拟机管理工具。
qemu是什么那。其实它也是一款虚拟化技术,就算不使用kvm,单传的qemu也可以完全实现一个虚拟机。那为何还会有qemu-kvm这个名词那。是因为虽然kvm的技术已经相当成熟而且可以对很多东西进行隔离,但是在某些方面还是无法虚拟出真实的机器。比如对网卡的虚拟,那这个时候就需要另外的技术来做补充,而qemu-kvm则是这样一种技术。它补充了kvm技术的不足,而且在性能上对kvm进行了优化。
libvirt
libvirt又是个什么东东。它是一系列提供出来的库函数,用以其他技术调用,来管理机器上的虚拟机。包括各种虚拟机技术,kvm、xen与lxc等,都可以调用libvirt提供的api对虚拟机进行管理。有这么多的虚拟机技术,它为何能提供这么多的管理功能那。是因为它的设计理念,它是面向驱动的架构设计。对任何一种虚拟机技术都开发设计相对于该技术的驱动。这样不同虚拟机技术就可以使用不同驱动,而且相互直接不会影响,方便扩展。而且libvirt提供了多种语言的编程接口,可以直接通过编程,调用libvirt提供的对外接口实现对虚拟机的操作。如今流行的云计算中的IaaS是与该库联系相当密切的。通过下图可以看出它的架构设计思想。
从该图可以看出,在libvirt api之上会有很多个driver,对于每一种虚拟机技术都会有一种driver,用来充当该虚拟机技术与libvirt之间的包装接口。如此设计就可以避免libvirt需要设计各种针对不同虚拟机技术的接口,它主要关注底层的实现,提供对外接口调用,而不同的虚拟机技术通过调用libvirt提供的接口来完成自己所需要的功能。
参考: