虚拟化技术介绍

虚拟化(Virtualization)技术最早出现在 20 世纪 60 年代的 IBM 大型机系统中,在70年代的 System 370 系列中逐渐流行起来。虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行。

虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

虚拟化的优势

降低运营成本、加速应用部署、提高服务可用性、提升资源利用率、动态调度资源、降低能源消耗

虚拟化方式

完全虚拟化:

又叫硬件辅助虚拟化技术,最初所使用的虚拟化技术就是全虚拟化(Full Virtualization)技术,它在虚拟机(VM)和硬件之间加了一个软件层–Hypervisor,或者叫做虚拟机管理程序(VMM)。主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的需求。这种方式是业界现今最成熟和最常见的,而且属于 Hosted 模式和 Hypervisor 模式的都有,知名的产品有IBM CP/CMS,VirtualBox,KVM,VMware Workstation和VMware ESX。全虚拟化的好处是,虚拟机的需要的全部硬件都由虚拟化系统产生,运行在虚拟机上的操作系统不需要经过任何的修改。唯一的限制就是操作系统必须能够支持底层的硬件,不过目前的操作系统一般都能支持底层硬件,所以也就不是什么限制了。

半虚拟化:

半虚拟化技术(paravirtualization)是后来才出现的技术,也叫做准虚拟化技术,它在完全虚拟化的基础上,修改客户操作系统,增加专门的API,用来将客户操作系统发出的指令优化,使得Guest OS能够非常好地配合Hyperivosr来实现虚拟化。通过这种方法将无需重新编译或捕获特权指令,使其性能非常接近物理机,其最经典的产品就是Xen,而且因为微软的Hyper-V所采用技术和Xen类似,所以也可以把Hyper-V归属于半虚拟化。虚拟化系统仅提供中央处理器的虚拟化能力,其他的硬设备则与真实机器共享,因此使用硬设备的效率较佳。缺点就是,要修改包含该API的操作系统,但是对于某些不含该API的操作系统(主要是windows)来说,就不能用这种方法。这种模式和全虚拟化相比,架构更精简,而且在整体速度上有一定的优势。然而,需要对Guest OS进行修改,所以在用户体验方面比较麻烦。

两种虚拟化架构

寄居架构(Hosted Architecture)和裸金属架构 (“Bare Metal” Architecture),如图所示。

寄居架构就是在操作系统之上安装和运行虚拟化程序,依赖于主机操作系统对设备的支持和物理资源的管理;

裸金属架构就是直接在硬件上面安装虚拟化软件,再在其上安装操作系统和应用,依赖虚拟层内核和服务器控制台进行管理。

常见的虚拟化技术

1 KVM

KVM (Kernel-based Virtual Machine,基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,是硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。KVM采用寄居式虚拟化架构,是Linux内核中的一个可装载模块,其功能是将Linux内核转换成一个裸金属架构的Hypervisor。

2 Xen

Xen 是最早的开源虚拟化引擎,最初是剑桥大学的一个开源项目。Xen 是一种直接运行在硬件上的软件层,它能够在计算机硬件上同时运行多个客户操作系统(Guest OS)。

3   VMware ESXi

VMware ESXi是VMware的企业级虚拟化产品,它本身就是一个用来管理硬件资源的特殊的操作系统,可以直接运行在裸机上面。虚拟化内核(称为 VMkernel),完全负责对硬件及虚拟机的管理。

4   Microsoft Hyper-V

Hyper-V是微软所推出的虚拟化技术,首次内置于Windows Server 2008中。与VMWare ESXi、Xen一样采用裸金属架构,直接运行在硬件之上。

KVM及周边

KVM简介

KVM 全称是基于内核的虚拟机(Kernel-based Virtual Machine),最初由以色列的公司Qumranet 开发。KVM于2006年12月被合并在发布于2007年2月的linux 2.6.20内核中。RedHat公司在2008年9月收购Qumranet公司后,在RHEL 6及以后发行版中使用KVM作为默认的虚拟化引擎。

KVM是x86架构且硬件支持虚拟化技术( intel VT 或 AMD-V)的Linux全虚拟化解决方案,它包含一个为处理器提供底层虚拟化、可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。KVM 本身不执行任何硬件模拟,需要修改过的QEMU向它提供模拟的 I/O。

KVM架构图

在 KVM 架构中,每个虚拟机其实就是一个常规的 Linux 进程,由 Linux 调度程序进行调度,因此,KVM使用Linux 内核的所有功能。如图所示,KVM就是Linux内核中的一个模块,用户空间通过使用修改的 QEMU 提供BIOS、PCI 总线、USB 总线和一组标准的设备(比如 IDE 和 SCSI 磁盘控制器、网络卡等)的模拟。

KVM与QEMU的关系

QEMU是一个开源的模拟器,作者是法布里斯·贝拉(Fabrice Bellard)。QEMU可以模拟完整的硬件环境,与Bochs,PearPC类似,但具有高速度、跨平台等特性。由于QEMU是纯软件模拟,Guest OS的指令都需要QEMU转义给真正的硬件,因而性能较差。

KVM只是一个内核模块,本身只能提供CPU和内存的虚拟化,没有用户空间的管理工具,需要QEMU为其提供I/O支持。

在QEMU 1.0的时候出现了QEMU-KVM分支,发布了三个正式版本(1.1/1.2/1.3)后,与QEMU主版本合并了。所以,现在的QEMU默认就支持QEMU-KVM。

KVM与libvirt的关系

libvirt 是一套实现 Linux 虚拟化功能的开源 API,旨在提供一种单一的方式管理多种不同的虚拟化方案。libvirt 由一套API库,一个libvirtd服务,以及一个virsh命令行管理工具组成。虽然libvirt是C开发的,但是可以很好的支持主流的编程语言,包括C, Python, Perl, Java 等等。

最新的发行版还包含了一系列基于 libvirt 的工具,用于简化虚拟机的维护管理:

1.virt-install: 一个创建虚拟机的工具,支持从本地镜像或者网络镜像(NFS、FTP等等)启动。

2.virsh: 一个交互式/批处理shell工具,可以用于完成虚拟机的日常管理工作。

3.virt-manager: 一个通用的图形化管理工具,可以用来管理本地或远程的Hypervisor及其虚拟机。

4.virt-viewer: 一个轻量级的、能够安全连接到远程虚拟机的图形控制台工具。

KVM – QEMU – libvirt 关系图

KVM使用介绍

KVM的使用方法

创建KVM虚拟机常用的方法:

  1. 使用qemu-kvm命令创建虚拟机。
  2. 使用virt-manager工具创建虚拟机。
  3. 使用virsh工具创建虚拟机。
  4. 使用Python调用libvirt接口创建虚拟机。

准备磁盘镜像

创建KVM虚拟机前需准备虚拟机的磁盘镜像。虚拟机镜像用来模拟虚拟机的硬盘,在启动虚拟机之前需要创建镜像文件。两种常用方法:

1.使用qemu-img命令创建虚拟机镜像:

创建10G大小、qcow2格式、名字是tiny.qcow2的镜像文件

2.使用现有的系统镜像文件,直接作为硬盘镜像启动虚拟机。

创建虚拟机

1使用qemu-kvm命令创建虚拟机

2使用virt-manager创建虚拟机

创建KVM虚拟机最简单的方法是使用virt-manager工具。

以root身份启动virt-manager:

在virt-manager窗口中点击file菜单的”新建”选项,根据提示进行创建。

3使用virsh 创建虚拟机

使用virsh工具来创建虚拟机的话,需要再准备一个xml配置文件。这个xml文件对要创建的虚拟机进行了详细的配置。具体xml内容与配置方法可以参考libvirt相关文档。(http://libvirt.org/format.html)

创建虚拟机命令:

其中,tiny.xml定义了要创建的虚拟机配置信息。

3使用Python调用libvirt接口创建虚拟机。

libvirt提供了支持主流编程语言的库,本文以Python为例,介绍创建虚拟机的过程。

结语

本文简单介绍了虚拟化的概念以及几种虚拟化技术。对Linux官方推荐的KVM虚拟化方案,本文展示了4种使用创建kvm虚拟机的方式。总体来说,利用libvirt管理kvm最方便快捷的方式。虚拟化是一个广泛的话题,希望本文能够成为你探索高级主题的起点,并给你带来帮助。

如果您需要了解更多内容,可以
加入QQ群:570982169
直接询问:010-68438880

 

发表评论