笔记内容:虚拟化技术概述
笔记日期:2018-03-05

  • 28.1 了解虚拟化
  • 28.2 常见虚拟化软件
  • 28.3 虚拟化架构
  • 28.4 KVM简介

了解虚拟化

虚拟化简单讲,就是把一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,每个逻辑系统都是独立的存在,这样就可以充分利用物理硬件的资源,而且还可以自由分配资源。

虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行。

虚拟化技术起源于20世纪60年代末,美国IBM公司当时开发了一套被称作虚拟机监视器(Virtual Machine Monitor)的软件,该软件作为计算机硬件层上面的一层软件抽象层,将计算机硬件虚拟分区成一个或多个虚拟机,并提供多用户对大型计算机的同时、交互访问。

虚拟化技术主要分为以下几个大类 :

  • 平台虚拟化(Platform Virtualization),针对计算机和操作系统的虚拟化。
  • 资源虚拟化(Resource Virtualization),针对特定的系统资源的虚拟化,比如内存、存储、网络资源等。
  • 应用程序虚拟化(Application Virtualization),包括仿真、模拟、解释技术等。

我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(Control Program,也被称为 Virtual Machine Monitor 或 Hypervisor),隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),当然某些虚拟机监控器可以脱离操作系统直接运行在硬件之上(如 VMWARE 的 ESX 产品)。运行虚拟机的真实系统我们称之为主机系统。

示意图:
虚拟化技术概述_第1张图片

在之前虚拟化技术分为全虚拟化和半虚拟化,因为早期的CPU硬件不支持虚拟化,虚拟机上的操作系统(Guest OS)要想使用CPU资源,需要通过VMM来翻译指令,这个过程比较耗费资源,这种虚拟化技术叫做全虚拟化(例如VMware Workstation)。半虚拟化技术通过修改Guest OS内核,让Guest OS可以直接使用CPU资源,而不需要翻译指令了,从而节省了资源,但修改内核比较鸡肋(例如XEN),因为有些操作系统的内核是不开源的。后续CPU厂商直接支持虚拟化,不需要通过VMM翻译指令了,就无所谓半虚拟化和全虚拟化了。

虚拟化技术的优点:

  • 资源池——一个物理机的资源分配到了不同的虚拟机里
  • 很容易扩展——增加物理机或者虚拟机即可,因为虚拟机是可以复制的
  • 很容易云化——亚马孙AWS,阿里云,谷歌云等

虚拟化技术的局限性:

  • 每一个虚拟机都是一个完整的操作系统,所以需要给其分配物理资源,当虚拟机数量增多时,操作系统本身消耗的资源势必增多
  • 虚拟化技术没法解决运维环境和开发环境的矛盾,所以后来才出现了容器技术

关于虚拟化技术的更多内容,可参考以下文章:

  • 虚拟化技术漫谈
  • 全虚拟化和半虚拟化的区别 cpu的ring0 ring1又是什么概念?
  • 三种虚拟化技术的技术差别图解

常见虚拟化软件

VMware系列,商业

  • VMware Workstation,适合单机使用
  • VMware Vsphere(VMware esxi),适合规模更大的场景
  • VMware Fusion(Mac)

Xen

  • 开源,支持半虚拟化

XenServer

  • 商业,Ctirx收购Xen之后研发的,基于Xen的

KVM

  • 开源 ,基于Linux内核模块,目前KVM已经被红帽收购了,大多数系统都倾向于使用KVM

Hyper-V

  • 商业,微软的产品,适合在windows服务器上用

Openvz

  • 开源 ,轻量,基于Linux,虚拟机和宿主机共用一个内核,优点是一台物理机可以虚拟化很多台虚拟机,缺点是不稳定,物理机的内核奔溃,所有的虚拟机都会崩溃,早期vps供应商用得比较多

VirtualBox

  • 开源 ,Sun公司开发 ,Oracle收购Sun之后,现在属于Oracle

虚拟化架构

虚拟化技术有很多,不同的体系都有几十种,但是虚拟化架构主要有两种形式:宿主架构和裸金属架构:
虚拟化技术概述_第2张图片

I型:虚拟机直接运行在系统硬件上,创建硬件全仿真实例,被称为“裸机”,也称为裸金属架构。

II型:虚拟机运行在传统操作系统上,同样创建的是硬件全仿真实例,被称为“托管”hypervisor。也称为宿主架构。

Xen属于I型,KVM属于II型。

虚拟化架构是一个大话题,关于这方面的详细内容可参考以下文章:

  • 云计算4种主流虚拟技术架构对比分析

KVM简介

这里只介绍KVM而不介绍其他虚拟化软件的原因有两点,一是我们大多数的服务器系统都是Linux内核的操作系统,而KVM是基于Linux内核的。二是KVM是开源、免费的,其他的例如VMware Vsphere、XenServer等都是商业收费的,而Hyper-V 又是Windows的,Openvz 又有局限性(与宿主共用内核,就无法安装其他内核的虚拟机),稳定性也有待考究,VirtualBox又不适合大规模的虚拟化场景,所以最后就只剩下KVM了。

KVM是Kernel-based Virtual Machine的缩写,意为基于内核的虚拟机。KVM是一个完全开源的系统虚拟化模块,它所基于的是Linux内核,它把Linux内核变成了一个Hypervisor,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。

最开始KVM是由以色列初创公司Qumranet开发,后来2008年9月RedHat公司收购了Qumranet,RedHat基于KVM的虚拟化解决方案叫做RHEV,不过RHEV是收费的。

KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。

KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能。但是只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样。所以这就需要提到QEMU了,QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所有的硬件,性能不强。而KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM,KVM里的磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来的,所以KVM结合QEMU-KVM工具之后才算完整,KVM和QEMU-KVM通信是通过/dev/kvm实现的。其中libvirt是用来管理KVM虚拟机的API,其命令为virsh。

KVM架构图:
虚拟化技术概述_第3张图片