1.虚拟化技术的演变过程:软件模拟、虚拟化层翻译、容器虚拟化三个阶段
(1)软件模拟的技术方式
软件模拟是通过软件完全模拟CPU、网卡、芯片组、磁盘等计算机硬件,因为是软件模拟,所以理论上可以模拟任何硬件,甚至不存在的硬件。但是由于是软件模拟硬件,效率低,典型产品有Bochs、QEMU。
(2)虚拟化层翻译
X86平台指令集划分为4个特权模式:Ring 0、Ring 1、Ring 2、Ring 3。操作系统一般使用Ring 0级别,应用程序使用Ring 3级别,驱动程序使用Ring 1和Ring 2级 别。X86在虚拟化方面的一个难点就是如何将虚拟机越级的指令使用进行隔离。
软件全虚拟化方案:通过虚拟化引擎(VMM),捕获虚拟机的指令,并进行处理,实现在虚拟机上使用物理机一样的指令,但是虚拟机不能对硬件进行操作,比如重启虚 拟机不会造成宿主机的重启。
半虚拟化方案:全虚拟化方案需要在虚拟化层做大量的工作,Xen提出了对虚拟机的操作系统内核进行改造,使虚拟机自己对特殊的指令进行更改,然后和虚拟化层一起 配合工作,这也是Xen早期一直使用一个特殊内核的原因,并且不支持Windows系统虚拟化。
硬件全虚拟化方案:对CPU指令进行改造,增加了两种操作模式:VMX root operation和VMX non-root operation,VMM运行在VMX root operation模式,虚拟机 运行在VMX non-root operation模式,这两种模式都支持Ring 0~Ring 3特权级
(3)容器虚拟化
容器虚拟化的原理是基于CGroup、NameSpace等技术将进程隔离,每个进程就像一台单独的虚拟一样,有自己被隔离出来的资源,也有自己的根目录、独立的进程编号,被隔离的内存空间。基于容器的虚拟化可以实现在单一内核上运行多个实例,因此是一个更高效率的虚拟化方式。目前最热的容器虚拟化技术就是Docker。Docker的优势就是将一个开发环境进行打包,很方便地在另外一个系统上运行,并且有版本的概念。但是Docker在生产环境的使用还需要一个过程,主要是磁盘、网络性能上还受到限制。
2.KVM的架构
KVM就是内核的一个模块,用户控件通过QEMU模拟硬件提供给虚拟机使用,一台虚拟机就是一个普通的Linux进程,通过对这个进程的管理,就可以完成对虚拟机的管。因为对进程的管理非常麻烦,RedHat发布了一个开源项目Libvirt,Libvirt有API,也有一套命令行工具,可以完成对虚拟机的管理,如OpenStack、CloudStack、OpenNebula等管理平台都是通过Libvirt来完成对KVM虚拟机的管理。
QEMU是一个开源项目,时间上就是一台硬件模拟器,可以模拟许多硬件;QEMU可以在其他平台上运行Linux陈旭,可以存储及还原虚拟机运行状态,虚拟多种设备,包括网卡、显卡、软驱、IDE设备、声卡、多种并口设备、多种串口设备、多种USB设备、蓝牙设备等,QEMU还内建DHCP、DNS、SMB、TFTP服务器。
Libvirt是一套开源的虚拟化的管理工具,主要由3部分构成:一套API的lib库;Libvirt服务;命令行工具virsh。Libvirt设计目标是通过相同的方式管理不同的虚拟化引擎,比如Xen、KVM、HyperV、VMware ESX等,但是大多情况下Xen、HyperV、VMware ESX都由各自的管理工具。,Libvirt可以实现对虚拟机的管理,比如创建、启动、关闭、暂停虚拟机,以及虚拟机网卡、硬盘、CPU、内存等多种设备的热添加。Libvirt还支持远程宿主机的管理,只要在宿主机上启动Libvirtd服务并做好配置,就可以通过Libvirt进行虚拟机的配置。通道可以是一下方式:SSH,TCP,基于TCP的TLS。Libvirt将虚拟机的管理分为一下两个方面:存储池资源管理,网络资源管理。