一、虚拟化技术概述
1.1、什么是虚拟化
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机(对计算机物理资源的抽象,实现资源的模拟、隔离和共享)。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化是一种资源管理技术,打破实体结构的不可分割的障碍,可以对数据中心的所有资源进行虚拟化和管理,可以实现服务虚拟化、存储虚拟化、网络虚拟化和桌面虚拟化。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的、旧的硬件产能过低的重组、重用,透明化底层物理硬件,从而最大化的利用物理硬件,对资源充分利用。
解决的两个问题:
(1)资源充分利用
(2)缩短交付时间
1.2、虚拟化的本质
分区:在整个物理服务器上运行多个虚拟机;
隔离:在同一服务器上的虚拟机相互隔离;
封装:整个虚拟机都保存在文件中,可以通过移动文件的方式迁移;
相对硬件独立:无需修改任何服务上运行的虚拟机;
1.3、虚拟化分类
(1)基于平台的平台虚拟化
如果把x86平台的CPU、内存和外设作为资源、那对应的虚拟化技术就是平台虚拟化,在同一个x86平台上,可以虚拟多个x86平台,每个平台可以运行自己独立完整的操作系统。
(不提供操作系统、只提供操作系统运行的环境,不过可以实现系统的快速安装、迁移)
(2)基于操作系统的操作系统虚拟化
如果把操作系统及其提供的系统调用作为资源,那虚拟化就表现为操作系统虚拟化。
例如Linux容器虚拟化技术就是在同一个Linux操作系统之上,虚拟出多个同样的操作系统,每个应用程序认为自己运行在一个独立的OS。
lxc(Linux容器技术)、dockers。
1.4、虚拟化管理程序Hypervisor(VMM)
一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件,也称VMM(Virtual Machine Monitor),即虚拟机监视器。
hypervisor是一种在虚拟环境中的“元”操作系统。它们可以访问服务器上包括磁盘和内存在内的所有物理设备。hypervisor不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行hypervisor时,它会加载所有虚拟机客户端的操作系统,同时会分配给每一台虚拟机适量的内存、CPU、网络和磁盘。
Hypervisor类型1:半虚拟化
对客户端操作系统(VM)的内核进行修改,将运行在Ring0上指令转为调用Hypervisor。
例如:Xen
(若要安装linux,需要安装修改过内核后的操作系统,若安装Windows,因为内核不能修改,则无法安装。)
Hypervisor类型2:硬件辅助全虚拟化
对CPU指令集进行改造;
客户操作系统可以直接使用Ring 0而无需修改。
例如:KVM、ESXI。
(只是修改了CPU,网络和存储仍然没有,此时可以用支持虚拟化的网卡,也可以对网卡和存储使用半虚拟化驱动程序)。
对操作系统没有要求。
Hypervisor类型3:软件全虚拟化
模拟CPU让VM使用,即软件全虚拟化qemu,效率最低。
(不依赖硬件,可以模拟出异构的系统)
1.5、操作系统虚拟化
允许操作系统内核拥有彼此隔离和分割的多用户实例instance,这些实例也称之为容器。
基于Linux内核中namespace、cgroup实现,例如LXC、Docker.
Container和普通的虚拟机Image相比,最大的区别是它并不包含操作系统内核。
1.6、Hypervisor比较
QEMU
软件模拟虚拟化。
KVM
硬件辅助全虚拟化的首选方案;
KVM需要经过修改的QEMU软件(qemu-kvm)来实现虚拟机的管理,KVM就是内核的一个模块,用户空间通过QEMU模拟硬件,提供给虚拟机使用,一台虚拟机就是一个普通的Linux进程,虚拟机中的VCPU就是该进程中的线程。
1.7、Libvirt
libvirt是一套免费的、开源的、支持linux下主流虚拟机管理程序的C函数库,其旨在为包括KVM在内的各种虚拟化管理程序提供一套方便、可靠的编程接口。
当前主流linux平台上默认的虚拟化管理程序virt-manager、virsh等都是基于libvirt开发的。
二、虚拟化原理
服务器虚拟化的目的是改善资源的利用率。目前,单台服务器的能力往往超过了单个用户或业务的需求,造成了大量的资源浪费和能量损耗。服务器虚拟化能够将一台虚拟化多台虚拟服务器,供多个用户同时使用,并通过对虚拟机服务器进行隔离、封装来保证其安全性。服务器虚拟化的实现依赖处理器虚拟化、内存虚拟化和I/O设备虚拟化等硬件资源虚拟化技术。
2.1、CPU虚拟化
利用了和原始操作系统类似的机制——定时中断,在中断触发时陷入VMM(virtual machine monitor,虚拟机管理层),从而根据调度机制进行调度。
以x86架构为例:
x86架构存在虚拟化漏洞
X86的ICA中有19条敏感指令不是特权指令,因此X86无法使用经典的虚拟化技术完虚拟化。
于是乎:
(1)半虚拟化:修改guest的操作系统内核,使其运行于Ring0上。问题:对闭源系统是一种阻碍。
(2)全虚拟化:修改VMM,使得不敏感指令同样可以中断陷入VMM。
(3)硬件辅助虚拟化:对CPU微指令集的修改,使非root Ring0-3同样可使用CPU,而VMM只起监控作用。
2.2、内存虚拟化
问题1:内存空间地址不唯一;
问题2:内存连续性;
解决:建立内存映射表。
内存虚拟化:把物理机的真实物理机内存统一管理,包装成多份虚拟的内存给若干虚拟机使用。
2.3、I/O虚拟化
问题:多个客户机如何实现使用有限的外设资源?
VMM必须通过I/O虚拟化的方式来复用有限的外设资源。
现实中外设资源是有限的,为了满足多个客户机操作的需求,VMM必须通过I/O虚拟化的形式来复用有限的外设资源。
VMM截获客户操作系统对设备的访问请求,然后通过软件的方式来模拟真实设备的效果。
两个阶段:发现,使用。
前端设备驱动将数据通过VMM提供的接口转发到后端驱动;
后端驱动对VM的数据进行分时分通道处理。
2.4、存储虚拟化
存储虚拟化的目的:
构建具有统一逻辑视图的存储资源池供用户按需使用。存储虚拟化将各个分散的存储系统 进行整合和统一管理,并提供了方便用户调用资源的接口。另外,存储虚拟化能够为后续的系统扩容提供便 利,使资源规模动态扩大时无需考虑新增的物理存储资源(如不同型号的存储设备)之间可能存在的差异。存 储虚拟化的实现需要针对不同的存储子系统进行特殊的考虑。
存储虚拟化的概念:
存储虚拟化是在存储设备上加了一个逻辑卷,通过逻辑层访问存储资源。 对管理员来说,可以方便的调整资源,提高存储利用率对终端用户来说,集中的存储设备可提供更好的性能和易用性。
存储虚拟化的实现方式:
(1) 裸金属+逻辑卷
(2) 存储设备虚拟化
(3) 主机存储虚拟化+文件系统
2.5、网络虚拟化
网络虚拟化的目的:
满足在服务器虚拟化应用过程中产生的新的网络需求。服务器虚拟化使每台虚拟服务器都 要拥有自己的虚拟网卡设备才能进行网络通信,运行在同一台物理服务器上的虚拟服务器的网络流量则统一经 由物理网卡输入/输出。网络虚拟化能够为每台虚拟服务器提供专属的虚拟网络设备和虚拟网络通路,同时, 在虚拟化层还可以利用虚拟交换机等网络虚拟化技术提供更加灵活的虚拟组网。
问题1:一个服务器一个网络端口对应多个虚拟机的多个服务。
问题2:虚拟机动态迁移时网络端口随之迁移。
解决:应用大二层网络请求技术。
虚拟化资源管理的目的:
将系统中所有的虚拟硬件资源"池"化,实现海量资源的统一管理、动态扩放,以及对 用户进行按需配给。同时,虚拟化资源管理技术还需要为虚拟化资源的可用性、安全性、可靠性提供保障。