分类: 虚拟化
2018-09-30 22:37:04
一.KVM简介
KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。
KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。
关于KVM:
————摘自WIKI百科
KVM 与 vbox的区别
vbox 是由 qemu 改写而成,包含大量qemu 代码。
kvm 是linux内核包含的东西,使用qemu作为上层管理(命令行)。
总体而言:在支持虚拟化的情况下,vbox 和 kvm 的性能差不多,主要是面向对象不同:kvm适用于服务器,vbox适用于桌面应用。
qemu 全称Quick Emulator。是独立虚拟软件,能独立运行虚拟机(根本不需要kvm)。kqemu是该软件的加速软件。kvm并不需要qemu进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由kvm驱动。所以,大家不要把概念弄错了,盲目的安装qemu和kqemu。qemu使用模拟器
KVM内存管理
KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。
KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。
此外,KVM还借助于KSM(Kernel Same-pageMerging)这个内核特性实现了内存页面共享。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此,KSM技术可以降低内存占用进而提高整体性能。
相关连接:
KVM的官方地址:
KVM的Howto文档:
Kqemu源码地址:
Qemu下载地址:
二.KVM虚拟化平台构建
1.安装准备
查看你的硬件是否支持虚拟化。命令:
注意:
1).要有 vmx 或 svm 的标识才行。总的说来,AMD在虚拟化方面作得更好一些。
2).我用的是虚拟机,我使用了VBOX,发现其不支持硬件虚拟化,启动虚拟机后执行查看命令无法发现上述的选项;所以我就换成了VMware Workstation 10,并在虚拟机的设置中打开了CPU设置中的虚拟化引擎,选择了Intel VT-x/EPT或AMD-V/RVI(V)这个选项;具体设置如下图:
2.安装KVM
由于Linux内核已经将KVM收录了,在安装系统时已经加入了KVM,我们只需要在命令行模式下启用KVM即可:
启用KVM模块
功能区分intel/amd的启用:
3.KVM虚拟机创建和管理所依赖的组件介绍
KVM虚拟机的创建依赖qemu-kvm:
虽然kvm的技术已经相当成熟而且可以对很多东西进行隔离,但是在某些方面还是无法虚拟出真实的机器。比如对网卡的虚拟,那这个时候就需要另外的技术来做补充,而qemu-kvm则是这样一种技术。它补充了kvm技术的不足,而且在性能上对kvm进行了优化。
我们还可以使用virt-manager,virt-viewer来管理虚拟机;
我们在创建和管理KVM虚拟机时还需要libvirt这个重要的组件:
它是一系列提供出来的库函数,用以其他技术调用,来管理机器上的虚拟机。包括各种虚拟机技术,kvm、xen与lxc等,都可以调用libvirt提供的api对虚拟机进行管理。有这么多的虚拟机技术,它为何能提供这么多的管理功能那。是因为它的设计理念,它是面向驱动的架构设计。对任何一种虚拟机技术都开发设计相对于该技术的驱动。这样不同虚拟机技术就可以使用不同驱动,而且相互直接不会影响,方便扩展。而且libvirt提供了多种语言的编程接口,可以直接通过编程,调用libvirt提供的对外接口实现对虚拟机的操作。如今流行的云计算中的IaaS是与该库联系相当密切的。通过下图可以看出它的架构设计思想。
从该图可以看出,在libvirtapi之上会有很多个driver,对于每一种虚拟机技术都会有一种driver,用来充当该虚拟机技术与libvirt之间的包装接口。如此设计就可以避免libvirt需要设计各种针对不同虚拟机技术的接口,它主要关注底层的实现,提供对外接口调用,而不同的虚拟机技术通过调用libvirt提供的接口来完成自己所需要的功能。
4.安装KVM所需组件
yum源提供了,直接安装:
安装完成后启动libvirtd服务:
会自动启动一个桥设备,这相当于VMware Workstation中的host-only仅主机的网络设备;
使用网桥管理命令查看:
像VMware Workstation中我们需要创建物理桥接设备,可以使用virsh创建桥设备关联网卡到桥接设备上:
需要将NetworkManager服务关闭,开机启动也关闭:
然后在创建桥接设备及关联网卡到桥接设备上:
查看桥接设备及其他网络设备运行情况:
查看桥接设备:
至此,我们的虚拟化平台就构建完毕,下面就开始在KVM虚拟化平台上创建和管理虚拟机,我们先使用qemu-kvm来创建和管理虚拟机。
三.使用qemu-kvm管理KVM虚拟机
1.Qemu-kvm介绍
Qemu是一个广泛使用的开源计算机仿真器和虚拟机。当作为仿真器时,可以在一种架构(如PC机)下运行另一种架构(如ARM)下的操作系统和程序。而通过动态转化,其可以获得很高的运行效率。当作为一个虚拟机时,qemu可以通过直接使用真机的系统资源,让虚拟系统能够获得接近于物理机的性能表现。qemu支持xen或者kvm模式下的虚拟化。当用kvm时,qemu可以虚拟x86、服务器和嵌入式powerpc,以及s390的系统。
QEMU 当运行与主机架构相同的目标架构时可以使用KVM。例如,当在一个x86兼容处理器上运行 qemu-system-x86 时,可以利用 KVM 加速——为宿主机和客户机提供更好的性能。
Qemu有如下几个部分组成:
基于libvirt的工具如virt-manager和virt-install提供了非常便捷的虚拟机管理接口,但它们事实上上经二次开发后又封装了qemu-kvm的工具。因此,直接使用qemu-kvm命令也能够完成此前的任务。
2.Qemu-kvm的使用帮助
在RHEL6/CentOS6上,qemu-kvm位于/usr/libexec目录中。由于此目录不属于PATH环境变量,故无法直接使用,这样也阻止了可以直接使用qemu作为创建并管理虚拟机。如若想使用qemu虚拟机,可以通过将/usr/libexec/qemu-kvm链接为/usr/bin/qemu实现。
qemu-kvm命令使用格式为“qemu-kvm [options] [disk_image]”,其选项非常多,不过,大致可分为如下几类。
qemu-kvm的标准选项
qemu-kvm的标准选项主要涉及指定主机类型、CPU模式、NUMA、软驱设备、光驱设备及硬件设备等。
qemu-kvm的显示选项
显示选项用于定义虚拟机启动后的显示接口相关类型及属性等。
i386平台专用选项
网络属性相关选项
网络属性相关选项用于定义网络设备接口类型及其相关的各属性等信息。这里只介绍nic、tap和user三种类型网络接口的属性,其它类型请参照qemu-kvm手册。
3.使用qemu-kvm安装虚拟机Guest OS
测试安装windows xp
1).下载系统镜像文件,我这里有个windows XP的ghost系统,我们来试着安装。
winxp_ghost.iso
创建虚拟机的磁盘文件存放目录:
创建虚拟磁盘文件:
2).在kvm平台安装vnc-server和tigervnc这个vncviewer
我们通过windows客户端的vncviewer连接到虚拟机上进行操作;
输入虚拟化平台ip地址:
输入VNC服务器的密码:
进入虚拟化平台:
等待后续操作。
3).安装虚拟机
我们在命令行模式下安装启动虚拟机:
创建一个名为winxp的虚拟机,其RAM大小为512MB,有一颗CPU的SMP架构,默认引导设备是硬盘,有一个光驱设备和硬盘设备,usb设备为tablet;
启动后如图:
我们到图形界面上进行连接:
#vncviewer :5900
我这里进入winpe安装系统:
选择全自动恢复GHO镜像到C盘,开始安装:
安装完毕后重启就黑屏了。
进不去,算了,就这样吧。
我们下面使用一个测试系统cirros来测试KVM的虚拟化平台;
4.安装cirros虚拟机
1).cirros镜像文件下载
镜像下载
32位镜像下载地址:
64位镜像的下载地址:
我这里使用的是cirros-0.3.0-x86_64-disk.img
我们查看一些镜像文件信息:
2).安装启动cirros虚拟机
我们在启动虚拟机时加入网卡设备。
# mv cirros-0.3.0-x86_64-disk.img /kvm/images
如果我们加入网卡设备,那么必须要涉及到系统启动后桥接网络到br0上,我们通过脚本实现启动和停止系统时桥接网络和删除桥接的自动执行操作:
启动虚拟机将网卡桥接到桥接设备上:
关闭虚拟机后自动将网卡从桥接设备上移除:
给予脚本执行权限;
#chmod +x /etc/qemu-ifup
#chmod +x /etc/qemu-ifdown
启动cirros虚拟机系统:
启动完成后,通过vncviewer连接我们启动的虚拟机:
输入用户名和密码进入系统并且切换到root用户:
查看虚拟机的网卡:
使用ping测试,测试到达网关与否:
再到KVM虚拟化平台上查看一下vnet0是否生成:
至此,一个完整的cirros虚拟机就完成安装了。
5.Qemu监视器的使用
我们可以通过Qemu监视器来监测虚拟机的运行情况;
1).Qemu监视器打开的方式:
图形窗口模式的打开方式:
CTRL+ALT+2 :通过输入快捷键就能打开Qemu的监视器;
CTRL+ALT+1 :输入快捷键即可返回虚拟化机界面;
文本窗口模式的打开方式:
CTRL+a c :这组快捷键可以实现虚拟机界面和Qemu监视器之间的切换;
注意:如果需要让虚拟机运行在文本窗口模式,我们需要在创建和启动虚拟机时键入:-nographic的选项。
2).打开cirros虚拟机的Qemu监视器
按CRTL+ALT+2组合键即可打开Qemu监视器;
如图所示:
3).Qemu监视器下的常用命令
6.我们启动一个在文本窗口模式下的虚拟机
我们再次下载一个cirros虚拟机磁盘镜像文件,将其名称更改后启动:
启动cirros虚拟机:
启动会进行30次云环境探测,我们可以忽略其错误;
启动会在虚拟终端自动进行,启动后如图:
这里会存在一个问题,就是我们未指定网卡的mac地址,会造成启动的两台虚拟机的IP地址是一致的,mac地址都是52:54:00:12:34:56 ,如图:
我们必须指定虚拟机的mac地址来避免虚拟机IP地址一致性问题。
使用快捷键切换到qemu监视器,先按CTRL+a 后松手输入“c”字母即可进入qemu的监视器:
我们可以发现一个优点是文本窗口模式下的qemu监视器的命令行可以翻页,是不是比图形化的好啊! <^_^>!
下面我们停止文本窗口的虚拟机,指定好mac地址后再启动虚拟机哦!
同样按组合键CTRL+a 再按c切换到虚拟机界面输入poweroff关闭虚拟机电源:
再次启动虚拟机:指定好mac地址哦!
启动后如图:
地址分配的不一样了。
我们来测试一下能否ping通第一台虚拟机;
测试ping通,桥接网络是互通的。
至此,基于Qemu-kvm创建和管理虚拟机的实验就完成了,