Linux下kvm虚拟化技术的安装与使用
云时代的到来,虚拟化的广泛应用。让我们重新的科技进行了定义。而当下知名的虚拟化产品有 vmware vsphere ,Hyper-v,xen,kvm。vmware的虚拟化所占的市场有目共睹,Hyper-V是windows平台下的虚拟化,而Xen就属于一个半虚拟化产品。kvm就是我们今天所介绍的对象。
(kvm是kernel virtual module的简写)kvm是红帽公司5.4版本后所推出的最新虚拟化技术产品。它和vpc,virtual box都属于完全虚拟化产品,而Xen是属于半虚拟化产品。ps:这里的完全虚拟化和半虚拟化在后续的blog中会更新也可以查阅网上的资料。
Xen的完全虚拟化的实现是需要硬件的支持,它的实现是需要cpu是VT技术的支持,在inter公司cpu的这种技术叫做vmx,而在AMD上叫做svm,虽说Xen的完全虚拟化没有做出什么成就但是并不影响他在半虚拟化世界的霸主地位。
kvm其实也借鉴了Xen半虚拟化中的许多成就,虽说kvm是完全虚拟化,但在关键的硬盘和网卡上支持半虚拟化virtio,在很大程度上提高了性能,kvm是轻量级虚拟化的代表,也需要硬件vt技术的支持,另外从操作界面上看,xen和kvm都是用virt-manager工具,差别不是很大,但不可以在同一台机器上同时安装且运行Xen和KVM;另外kvm在只能运行在红帽企业版5.4 64位系统上,同时需要关闭selinux。
KVM是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。增加 KVM 到 Linux 内核是 Linux 发展的一个重要里程碑,这也是第一个整合到 Linux 主线内核的虚拟化技术。
KVM所使用的方法是通过简单地加载内核模块而将 Linux 内核转换为一个系统管理程序。这个内核模块导出了一个名为 /dev/kvm 的设备,它可以启用内核的客户模式(除了传统的内核模式和用户模式)。有了 /dev/kvm 设备,VM 使自己的地址空间独立于内核或运行着的任何其他 VM 的地址空间。设备树(/dev)中的设备对于所有用户空间进程来说都是通用的。但是每个打开 /dev/kvm 的进程看到的是不同的映射(为了支持 VM 间的隔离)。KVM安装 KVM 之后,您可以在用户空间启动客户操作系统。每个客户操作系统都是主机操作系统(或系统管理程序)的一个单个进程。
1、KVM 虚拟机的管理工具
准确来说,KVM 仅是 Linux 内核中的一个模块。管理和创建完整的 KVM 虚拟机,需要更多的辅助工具。QEMU-KVM:在 Linux 系统中,首先我们可以用 modprobe 命令加载 KVM 模块,如果用 RPM 安装 KVM 软件包,系统会在启动时自动加载模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有 KVM 模块是远远不够的,因为用户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。关于用户空间的工具,KVM 的开发者选择了已经成型的开源虚拟化软件 QEMU。QEMU 是一个强大的虚拟化软件,它可以虚拟不同的 CPU 构架。比如说在 x86 的 CPU 上虚拟一个 Power 的 CPU,并利用它编译出可运行在 Power 上的程序。KVM 使用了 QEMU 的基于 x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工具 QEMU-KVM。所以 Linux 发行版中分为 内核部分的 KVM 内核模块和 QEMU-KVM 工具。这就是 KVM 和 QEMU 的关系。 Libvirt、virsh、virt-manager:尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟机,RedHat 为 KVM 开发了更多的辅助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易于使用。Libvirt 是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其他虚拟机。使用 libvirt,你只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主机,便可以用同样的命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令 virsh,你可以通过使用 virsh 命令来使用 libvirt 的全部功能。但最终用户更渴望的是图形用户界面,这就是 virt-manager。他是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。Virt-manager 就是利用 libvirt 的 API 实现的。
2、kvm虚拟机的安装。
(一)安装之前先要开启cpu的虚拟化功能,如果是物理机直接进入BIOS中就该虚拟化选项开启,如果是
vmware worksation 如图:
如果是vSphere 的话也是在设置中找到cpu的设置去开启虚拟化支持。
设置好之后检查虚拟化是否成功支持:
好的成功支持。
(二)kvm软件的安装
#yum install kvm virt-manager libvirt #service libvirtd start #chkconfig libvirt on
kvm为kvm的模块软件包
virt-manageer 为kvm的管理包
libvirt 为创建虚拟机的工具包
(三)检查模块的正确安装
使用lsmod来检查模块安装
#[[email protected] ~]# lsmod | grep kvm #kvm 333172 0
(四)检查KVM是否成功安装
#virsh -c qemu:///system list
由于我这里之前创建了一个虚拟机所以这里就会有显示,初次安装横线下面没有属于正常。另外如果报错的话检查上面的服务是否正常启动。
3,kvm的网络配置
一种是default,它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
另外一种方式是bridge方式,可以使用虚拟机成为网络中具有独立IP的主机。
我这里是使用第二种网络配置。
#[[email protected] network-scripts]# vi ifcfg-br0 #DEVICE=br0 #TYPE=Bridge #BOOTRPOTO=static #IPADDR=192.168.7.2 #NETMASK=255.255.255.0 #ONBOOT=yes #[[email protected] network-scripts]# vi ifcfg-eth0 #DEVICE=eth0 #HWADDR=C0:3F:D5:3A:FD:C4 #TYPE=Ethernet #UUID=ea494507-eb1f-45a7-9582-64671dc60298 #ONBOOT=yes #NM_CONTROLLED=yes #BOOTPROTO=none #IPADDR=192.168.7.2 #PREFIX=16 #BRIDGE=br0
以上为kvm的配置下来开始虚拟机的安装。
virt-manager 是基于 libvirt 的图像化虚拟机管理软件,请注意不同的发行版上 virt-manager 的版本可能不同,图形界面和操作方法也可能不同。本文使用了红帽6企业版的 virt-manager-0.8.4-8。创建KVM虚拟机最简单的方法是通过virt-manager接口。从控制台窗口启动这个工具,从root身份输入virt-manager命令,点击file菜单的"新建"选项virt-manager接口界面。
下来就是系统的安装就不多做介绍!
4、使用virsh来管理kvm
Virsh的管理比较复杂。但是另一种可选方式virt-manager的缺陷还很明显,virt-manager需要在系统内运行,这会浪费资源并为别有目的的人提供额外的进攻点。virt-manager的另一大缺点是需要通过图形工作站运行远程接入的方式,才能对服务器上的虚拟机进行管理。而virsh则可以通过命令行执行各种各样的管理任务。要学习virsh很困难,因为有许多命令。virsh通过主命令和子命令管理每个虚拟机功能。要查看所有命令,输入virsh help。你可能发现大量命令,不过每个命令都有帮助指南,只需要输入virsh help。例如使用virsh help uri,就可以看到所有关于virsh uri命令的帮助。下面是virsh命令实例:
创建一个名称是myWin7的windows 7虚拟机,
#[[email protected] ~]# yuminstall virt-viewer #[[email protected] ~]# virt-install --name mywin7--ram 1024 --file=/var/lib/libvirt/images/mywin7.img --file-size=15 --vnc--cdrom=/iso/win7_32.iso --network network:br0
常用参数介绍:
-n NAME, --name=NAME 指定机器名字
-r MEMORY, --ram=MEMORY 指定内存大小
--vcpus=VCPUS 指定虚拟机的 CPU 数量
-f DISKFILE, --file=DISKFILE 虚拟机的虚拟磁盘,磁盘可以是文件、磁盘分区或者是lvm。此选项用来指定虚拟磁盘的路径
-s DISKSIZE, --file-size=DISKSIZE 指定虚拟磁盘的大小,单位是 G;如果—file 指定的文件路径不存在,并且—nonsparse 选项没有指定,对这个文件不会预先分配存储空间。
-w NETWORK, --network=NETWORK NETWORK 有三种选择,bridge:BRIDGE,network:NAME 和 user
-c CDROM, --cdrom=CDROM 指定用于全虚拟化Guest 的虚拟 CD,可以是一个 ISO 镜像文件,也可以是一个 CDROM 设备,也可以是一个通过 URL 可以访问和获取到的 boot.iso 镜像。如果将其忽略,那么在—location 选项中必须指定 kernel 和 initrd的位置,也可以使用—pxe 参数通过网络进行安装。
--pxe 使用 PXE boot 协议来加载初始化的ramdisk 和 kernel,以便于启动 Guset 段的安装进进程。如果没有指定—pxe,那么就必须指定—cdrom 和--location 其中一个。
-l LOCATION, --location=LOCATION 指定 kernel 和 initrd 的安装源,这对于半虚拟化是必须的。对于全虚拟化,要么使用--location 要么使用--cdrom 来指定 ISO 或 CDROM 镜像。
其必须符合下面的四种格式:
DIRECTORY
nfs:host:/path
http://host/path
ftp://host/path
-xEXTRA, --extra-args=EXTRA 用来给加载的 kernel 和 initrd 提供额外的内核命令行参数。
(跟详细的参数及使用方法详见 manvirt-install)
命令执行完之后进入kvm的管理界面就会有win7了
下来win7 的安装系统就不多说了!
至此kvm的安装与使用就介绍这么多,有不足的请多多指教!