- 深度实践KVM:核心技术、管理运维、性能优化与项目实施
- 肖力 汪爱伟 杨俊俊 赵德禄
- 2874字
- 2024-12-21 03:06:12
第一篇 KVM技术详解与实践
第1章 企业虚拟化选型与KVM介绍
虚拟化技术从2008年开始越来越热,经过一个大爆发的阶段,目前已经是企业IT环境的必备技术,在许多企业里面,虚拟机的数量已经远远大于物理机。同许多技术一样,虚拟化也分为开源和闭源技术。KVM就是一种开源的虚拟化技术,本章将为读者介绍KVM技术的演进过程、KVM的发展历史及KVM的应用场景。
1.1 KVM的前世今生
如图1-1所示,根据OpenStack平台上2013年10月虚拟化引擎选择的调查统计数据, KVM已经在OpenStack平台占到71%的份额。
图1-1 OpenStack平台虚拟化引擎,用户调查结果
KVM是一种年轻的虚拟化技术,在出生的时候就吸取了其他虚拟化技术的优点,所以KVM的架构简单,没有历史兼容性的包袱,性能表现优异。
本节介绍一下KVM的演进过程。
1.虚拟化技术的演变过程
虚拟化技术的演变过程可以分为软件模拟、虚拟化层翻译、容器虚拟化三个大的阶段。
其中,虚拟化层翻译又可以分为:
❑软件捕获翻译,即软件全虚拟化。
❑改造虚拟机系统内核加虚拟化层翻译,即半虚拟化。
❑硬件支持的虚拟化层翻译,即硬件支持的全虚拟化。
下面分别介绍一下这几种技术方式。
(1)软件模拟的技术方式
软件模拟是通过软件完全模拟CPU、芯片组、磁盘、网卡等计算机硬件,如图1-2所示。
图1-2 QEMU的虚拟机架构
因为是软件模拟,所以理论上可以模拟任何硬件,甚至是不存在的硬件。但是因为这种方式全部是软件模拟硬件,所以非常低效,一般只用于研究测试的场景。采用这种技术的典型产品有Bochs、QEMU等。
(2)虚拟化层翻译
先介绍一下X86平台的指令集权限划分。如图1-3所示,X86平台指令集划分为4个特权模式:Ring0、Ring1、Ring2、Ring3。操作系统一般使用Ring0级别,应用程序使用Ring3级别,驱动程序使用Ring1和Ring2级别。X86平台在虚拟化方面的一个难点就是如何将虚拟机越级的指令使用进行隔离。
VMware公司找到了最早的解决方法,图1-4所示为对虚拟机指令的使用进行捕获和翻译的示意图。
图1-3 X86CPU指令级别
图1-4 软件全虚拟化方案架构
通过虚拟化引擎,捕获虚拟机的指令,并进行处理,这也是为什么在虚拟机上虽然使用的是物理机一样的指令,但是虚拟机不能对硬件进行操作的原因,比如重启虚拟机不会引起宿主机的重启。这种解决方案也叫软件全虚拟化方案。
(3)改造虚拟机操作系统的方式
通过虚拟化引擎进行指令捕获和翻译的方式虽然可行,但是在虚拟化层要做大量的工作,Xen项目提供了另外一种思路,就是对虚拟机的操作系统内核进行改造,使虚拟机自己对特殊的指令进行更改,然后和虚拟化层一起配合工作,这也是Xen早期一直要使用一个特殊内核的原因,并且不支持Windows系统虚拟化。改造的虚拟机虽然使用上有限制,配置比较麻烦,但是这种方式效率非常高,这种方式也被称为半虚拟化方案。
(4)对CPU指令进行改造
2005年,Intel推出了硬件的方案,对CPU指令进行改造,即VT-x,如图1-5所示。VT-x增加了两种操作模式:VMX root operation和VMX non-root operation。VMM运行在VMX root operation模式,虚拟机运行在VMX non-root operation模式。这两种操作模式都支持Ring0~Ring3这4个特权级。
图1-5 硬件虚拟化CPU指令说明
这种方案因为是基于硬件的,所以效率非常高,这种方案也称为硬件支持的全虚拟化方案,如图1-6所示。现在的一个发展趋势是不仅CPU指令有硬件解决方案,I/O通信也有硬件解决方案,称为VT-d;网络通信也有硬件解决方案,称为VT-c。
图1-6 硬件全虚拟化方案架构
提示
当前的虚拟化引擎,都是使用硬件支持的虚拟化解决方案。并且最新的操作系统一般都支持一些半虚拟化的特性,所以宿主机和虚拟机使用比较新的版本,性能也会好一些。
(5)容器虚拟化
容器虚拟化的原理是基于CGroups、Namespace等技术将进程隔离,每个进程就像一台单独的虚拟机一样,有自己被隔离出来的资源,也有自己的根目录、独立的进程编号、被隔离的内存空间。基于容器的虚拟化可以实现在单一内核上运行多个实例,因此是一个更高效率的虚拟化方式。目前最热的容器虚拟化技术就是Docker。Docker的优势是可以将一个开发环境进行打包,很方便地在另外一个系统上运行起来,并且有版本的概念,可以在前一个版本的基础上累加。但是Docker在生产环境的使用还需要一个过程,主要是磁盘、网络性能上还受到很多限制。
2.KVM的历史
KVM(Kernel-based Virtual Machine)最初是由以色列的公司Qumranet开发的。KVM在2007年2月被正式合并到Linux 2.6.20核心中,成为内核源代码的一部分。2008年9月4日,RedHat公司收购了Qumranet,开始在RHEL中用KVM替换Xen,第一个包含KVM的版本是RHEL5.4。从RHEL6开始,KVM成为默认的虚拟化引擎。KVM必须在具备Intel VT或AMD-V功能的X86平台上运行。它也被移植到S/390、PowerPC与IA-64平台上。在Linux内核3.9版中,加入了对ARM架构的支持。
KVM包含一个为处理器提供底层虚拟化、可加载的核心模块kvm.ko(kvm-intel.ko或kvm-amd.ko),使用QEMU(QEMU-KVM)作为虚拟机上层控制工具。KVM不需要改变Linux或Windows系统就能运行。
3.KVM的架构
KVM的架构非常简单,如图1-7所示,KVM就是内核的一个模块,用户空间通过QEMU模拟硬件提供给虚拟机使用,一台虚拟机就是一个普通的Linux进程,通过对这个进程的管理,就可以完成对虚拟机的管理。实际上德国有家公司开发了一个管理平台Proxmox VE,就是通过对KVM进程的管理来实现对虚拟机的管理的。
图1-7 KVM的架构
因为对进程的管理非常麻烦,RedHat发布了一个开源项目Libvirt。Libvirt有API,也有一套命令行工具,可以完成对虚拟机的管理,大多数的管理平台都是通过Libvirt来完成对KVM虚拟机的管理的,比如OpenStack、CloudStack、OpenNebula等。
4.QEMU与KVM
QEMU是一个开源项目,实际就是一台硬件模拟器,可以模拟许多硬件,包括X86架构处理器、AMD64架构处理器、MIPS R4000、ARM v6/v7(Cortex-A8,A9,A15)、SPARC sun3与PowerPC架构,还支持其他架构,可以从QEMU主页获取完整的列表。
QEMU可以在其他平台上运行Linux的程序,可以存储及还原虚拟机运行状态,还可以虚拟多种设备,包括网卡、多CPU、IDE设备、软驱、显卡、声卡、多种并口设备、多种串口设备、多种USB设备、PC喇叭、PS/2键盘鼠标(默认)和USB键盘鼠标、蓝牙设备。
QEMU还内建DHCP、DNS、SMB、TFTP服务器。
比较有意思的是,有人还将QEMU编译成Windows版本,在Windows平台上也可以运行QEMU。
QEMU的好处是因为是纯软件模拟,所以可以在支持的平台模拟支持的设备,比如还有人利用QEMU在安卓上安装一个Windows XP虚拟机出来。
QEMU的缺点是因为是纯软件模拟,所有非常慢。QEMU 1.0的时候有一个QEMU和KVM结合的分支。KVM只是一个内核的模块,没有用户空间的管理工具,KVM的虚拟机可以借助QEMU的管理工具来管理。QEMU也可以借助KVM来加速,提升虚拟机的性能。QEMU-KVM的分支版本发布了3个正式的版本1.1、1.2、1.3,随后和QEMU的主版本合并,也就是说现在的QEMU版本默认支持KVM,QEMU和KVM已经紧密地结合起来了。
KVM的最后一个自己的版本是KVM 83,随后和内核版本一起发布,和内核版本号保持一致,所以要使用KVM的最新版本,就要使用最新的内核。
5.Libvirt与KVM
Libvirt是一套开源的虚拟化的管理工具,主要由3部分组成:
❑一套API的lib库,支持主流的编程语言,包括C、Python、Ruby等。
❑Libvirtd服务。
❑命令行工具virsh。
Libvirt的设计目标是通过相同的方式管理不同的虚拟化引擎,比如KVM、Xen、HyperV、VMware ESX等。但是目前实际上多数场景使用Libvirt的是KVM,而Xen、HyperV、VMware ESX都有各自的管理工具。
Libvirt可以实现对虚拟机的管理,比如虚拟机的创建、启动、关闭、暂停、恢复、迁移、销毁,以及虚拟机网卡、硬盘、CPU、内存等多种设备的热添加。
Libvirt还支持远程的宿主机管理,只要在宿主机上启动Libvirtd服务并做好配置,就可以通过Libvirt进行虚拟机的配置。通道可以是以下方式:
❑SSH。
❑TCP。
❑基于TCP的TLS。
Libvirt将虚拟机的管理分为以下几个方面:
第一,存储池资源管理,支持本地文件系统目录、裸设备、lvm、nfs、iscsi等方式。在虚拟机磁盘格式上支持qcow2、vmdk、raw等格式。
第二,网络资源管理,支持Linux桥、VLAN、多网卡绑定管理,比较新的版本还支持Open vSwitch。Libvirt还支持nat和路由方式的网络,Libvirt可以通过防火墙让虚拟机通过宿主机建立网络通道,和外部的网络进行通信。
1.2 KVM与常用企业级虚拟化产品的PK
1.常用企业级虚拟化产品的比较
目前常见的企业级的虚拟化产品有4款:分别是VMware、HyperV、Xen、KVM。
(1)VMware
VMware是最早的X86平台上的虚拟化引擎,1999年就发布了第一款产品,经过十几年的发展和市场检验,产品成熟、稳定,兼容性也不错。VMware的产品线非常全面,不仅有虚拟化的解决方案,在IaaS、SaaS、PaaS层都有自己的产品。并且VMware在网络、存储方面都有相关的解决方案,VMware和网络存储厂商在协议层面也有一些私有协议,许多主流的厂商都支持VMware一些专用的协议,和VMware一起形成了一个生态链。
VMware目前被EMC控股,虚拟化产品线主要有针对个人使用的VMware Workstation,针对苹果用户的VMware Fusion,针对企业级用户的VMware ESXi服务器。管理工具主要是VMware vSphere套件。
VMware的产品基本上都是非开源产品,并且大部分都是收费产品,一般在传统关键行业使用比较多一些,在中小型企业、互联网行业使用得比较少一点。
(2)HyperV
HyperV是微软的虚拟化产品,最近几年发展非常迅速,在Windows Server 2012 R2中的HyperV支持许多非常新的虚拟化特性。HyperV必须使用64版的Windows产品,HyperV也支持Linux系统的虚拟机。
HyperV也是一款非开源的收费产品,HyperV的集群管理工具SCVMM配置非常复杂,需要配置Windows域、Windows Server集群,然后才能管理多台宿主机。因为HyperV的成本相对比较低,所以最近几年市场占有率也在提升,主要是一些使用Windows系统的企业使用比较多。
(3)Xen
Xen是最早的开源虚拟化引擎,由剑桥大学开发,半虚拟化的概念也是Xen最早提出的。Xen后来被思杰收购,推出了一套叫作XenServer的管理工具,XenServer于2013年年底宣布免费。Xen因为推出的时间比较长,兼容性、稳定性都不错,目前使用Xen的主要是一些在Xen上面技术积累较多的企业。
(4)KVM
KVM比较年轻,所以出生的时候就吸取了其他虚拟化技术的优点,一开始就支持硬件虚拟化技术,没有历史兼容包袱。所以KVM推出来的时候,性能就非常优异。目前,KVM是OpenStack平台上首选的虚拟化引擎。国内新一代的公有云全部采用KVM作为底层的虚拟化引擎。KVM已经成为开源解决方案的主流选择。
2.KVM优势
KVM的优势主要体现在以下几点。
(1)开源
KVM是一个开源项目,这就决定了KVM一直是开放的姿态,许多虚拟化的新技术都是首先在KVM上应用,再到其他虚拟化引擎上推广。
虚拟化一般网络和存储都是难点。网络方面,SRIOV技术就是最先在KVM上先有应用,然后再推广到其他虚拟化引擎上。再比如SDN、Open vSwtich这些比较新的技术,都是先在KVM上得到应用。
磁盘方面,基于SSD的分层技术,都是最早在KVM上得到应用。
KVM背靠Linux这棵大树,和Linux系统紧密结合,在Linux上的新技术都可以马上应用到KVM上。围绕KVM的是一个开源的生态链,从底层的Linux系统,到中间层的Libvirt管理工具,到云管理平台OpenStack,莫不是如此。
(2)性能
KVM吸引许多人使用的一个动因就是性能,在同样的硬件条件下,能提供更好的虚拟机性能,主要是因为KVM架构简单,代码只有2万行,一开始就支持硬件虚拟化,这些技术特点保证了KVM的性能。
(3)免费
KVM因为是开源项目,绝大部分KVM的解决方案都是免费方案,随着KVM的发展, KVM虚拟机越来越稳定,兼容性也越来越好,因而也就得到越来越多的应用。
(4)广泛免费的技术支持
免费并不意味着KVM没有技术支持。在KVM的开源社区,数量巨大的KVM技术支持者都可以提供KVM技术支持。另外,如果需要商业级支持,也可以购买红帽公司的服务。
1.3 判断企业是否适合使用KVM的标准
1.业务类型
目前在互联网行业,KVM虚拟化技术是使用最广泛的,因为互联网行业有对新技术追求的冲动。另外中小企业也推荐使用KVM技术,因为使用KVM不需要支付额外的费用。
还有哪些企业、个人适合使用KVM呢?可以这样总结:KVM天生就是为Linux而生的,凡是可以使用Linux的地方,就可以使用KVM,KVM天生和Linux在一起。
2.企业对成本的关注度
随着虚拟化这几年的快速发展,在企业的IT环境中,虚拟化已经是一个标配的技术。虚拟化带来的好处是巨大的,虚拟化真正实现了资源池化,通过虚拟化可以将服务器资源进行切割,做到资源随取随用,有效节省成本,提高资源利用率。
KVM虚拟化技术经过几年的发展,已经非常成熟,使用KVM技术更不需要在虚拟化方面支付额外的费用,可以进一步节省企业的IT成本。
3.企业对快速部署的关注度
虚拟化还有一个重要的功能就是快速部署。在宿主机层面看,虚拟机就是一个镜像文件,要得到另外一台虚拟机,只需要将镜像文件复制一份就可以了,通常只有几分钟。而按照传统方式部署一台物理机,最起码都要一个小时。通过磁盘差量的技术,甚至可以做到秒级生成虚拟机。
通过虚拟化技术,还可以实现在虚拟化层做高可用和在线迁移。虚拟化层的高可用是系统层面的高可用,比基于应用层的高可用配置要简单很多。虚拟机的在线迁移,更是虚拟化技术的独有手段。通过在线迁移,物理机的维护、系统的维护、网络的维护,都可以做到不中断服务,进一步提高了业务应用的可用性。
因为所有的虚拟机都是相同的虚拟硬件,实现了硬件层级的标准化,降低了自动化的难度,很容易搭建私有或者公有的云平台,所以通过虚拟机技术,很容易实现以下功能:
❑资源使用自动化和自助服务。
❑资源池可随时扩展。
❑资源使用标准化。
❑资源使用保持了很好的兼容性。
1.4 本章小结
本章介绍了虚拟化及KVM技术的演进过程,介绍了KVM技术的优势,可以简单地概括:凡是使用Linux系统的场景,如果上虚拟机项目,就天然适合使用KVM虚拟化技术。
下一章将介绍如何开始自己的第一台虚拟机,在安装第一台虚拟机的时候有哪些地方应该注意。