第4章 构建KVM环境2ppt课件.ppt
在此输入您的封面副标题第4章 构建KVM环境2第4章 构建KVM环境虚拟化技术u第1节 KVM硬件基础配置u第2节 编译安装KVMu第3节 编译安装Qemuu第4节 启动第一个KVM客户机u第5节 网络配置u第6节 图形显示配置u第7节 VNC的使用目录4.1.1 宿主机宿主机BIOS设置设置在x86-64架构的处理器中,KVM必需的硬件虚拟化扩展分为:Intel 的虚拟化技术(Intel VT)和AMD 的AMD-V 技术。要开启虚拟化技术支持,需要几个方面的条件支持,包括芯片组自身的支持、BIOS提供的支持、处理器自身的支持、操作系统的支持。可以直接在BIOS中查看CPU是否支持Intel VT-d虚拟化技术,也可以使用软件工具检测CPU是否支持Intel VT虚拟化技术,例如使用CPU-Z和SecurAble工具。如果CPU支持虚拟化技术,接下来就是检查BIOS是否支持( 开 启 ) V T 技 术 。 V T 的 选 项 , 一 般 在 B I O S 中 的“Advanced-Processor Configuration”里来查看和设置,它的标识一般为“Intel(R) Virtualization Technology”或者“Intel VT”等类似的文字说明(不同的BIOS,有可能有不同的选项和不同的标识)。说明:对于不同平台或不同厂商的BIOS,VT和VT-d等设置的位置可能是不一样的,需要根据实际的硬件情况和BIOS中的选项来灵活设置。设置好了VT和VT-d的相关选项,保存BIOS的设置并退出, 系统重启后生效。BIOS 中Enabled 的VT 与VT-d 选项4.1.2 宿主机操作系统设置宿主机操作系统设置运行KVM,必须安装一个宿主机的Linux操作系统。(1)宿主机网络配置宿主机Ubuntu安装完毕后,需配置网络,使用命令“ifconfig -a” 确定虚拟机网卡名称,然后根据实际的网络环境配置宿主机对应网卡IP,执行“vi /etc/network/interfaces”命令修改配置文件,修改成功后,重启系统,网络配置成功。(2)宿主机软件源配置为保证宿主机能快速正确的下载软件并进行软件更新,修改Ubuntu系统里的默认软件源,更新为国内源,提高软件下载的速度。执行“vi /etc/apt/sources.list”命令,将文件里面的所有内容注释掉(用符号“#”注释),在文件末尾添加相关内容内容,修改完毕后,保存退出,执行命令“apt-get update”进行更新。4.1.2 宿主机操作系统设置宿主机操作系统设置(3)在宿主机中查看CPU是否支持虚拟化在Ubuntu中查看CPU是否支持kvm,即查看硬件是否支持虚拟化,可以使用命令“grep -E -o vmx|svm /proc/cpuinfo”,在该命令中,vmx是针对Intel平台,svm是针对AMD平台。如果结果显示中有vmx或者是svm,那么表示cpu支持虚拟化功能,这时就可进行下一步编译安装KVM的操作了。4.2 编译安装编译安装KVM4.2.1 下载下载KVM源码源码KVM是Linux的一个内核模块,从Linux内核的2.6.20版本后KVM已正式被加入到内核的正式发布代码中,所以如果宿主机安装的Linux内核的版本高于2.6.20即可直接使用KVM,如果查看到的内核版本低于2.6.20,则需要下载KVM进行编译和安装。下载KVM源码有多种不同的方式:( 1 ) 进 入 K V M 的 官 网 h t t p : / / w w w . l i n u x -kvm.org/page/Downloads下载。(2)到http:/ kvm-host:# lsmod|grep kvmkvm_intel 143060 0kvm 451511 1 kvm_intel如果能看到kvm_intel和kvm(本书以Intel的处理器为例)两个模块,则说明KVM已经是Linux操作系统的一个module了,不必再安装。可以使用git clone命令来下载KVM的源代码,也可以使用Git工具的其他命令对源码进行各种管理下载kvm步骤,为如下命令行所示:下载KVM的步骤如下:Cloning into kvm.remote: Counting objects: 3924734, done.remote: Compressing objects: 100% (722579/722579), done.remote: Total 3924734 (delta 3218312), reused 3858632 (delta 3169716)Receiving objects: 100% (3924734/3924734), 880.54 MiB | 1.35 MiB/s, done.Resolving deltas: 100% (3218312/3218312), done.Checking connectivity. done.Checking out files: 100% (47986/47986), done.完成后,在当前目录下,可以看到刚下载的kvm的相关文件。4.2.2 配置配置KVM在对KVM进行配置时常用的“make menuconfig”命令是基于终端的一种配置方式,提供了文本模式的图形用户界面,用户可以通过光标和键盘来浏览选择各种特性。另外,在使用这种配置方式时,宿主机必须有ncurses库,否则会报“fatal error: curses.h: No such file or director”错误。可以通过“apt-cache search curse”命令搜索找到libncurses5-dev,然后使用“apt-get install libncurses5-dev”命令安装“libncurses5-dev”解决。安 装 完 成 后 在 K V M 的 下 载 目 录 下 执 行 “ m a k e menuconfig”命令,将出现如图所示界面。选择了Virtualization 之后,进入其中进行详细配置,包括选中KVM、选中对处理器的支持等在配置完成并保存后,会在KVM的安装目录/root/xjy/kvm下,生成一个.config文件,该文件中放置着和KVM相关的所有配置信息,在本次配置中,与KVM 直接相关的几个配置项的主要情况如下:CONFIG_HAVE_KVM=yCONFIG_HAVE_KVM_IRQCHIP=yCONFIG_HAVE_KVM_IRQFD=yCONFIG_HAVE_KVM_IRQ_ROUTING=yCONFIG_HAVE_KVM_EVENTFD=yCONFIG_KVM_APIC_ARCHITECTURE=yCONFIG_KVM_MMIO=yCONFIG_KVM_ASYNC_PF=yCONFIG_HAVE_KVM_MSI=yCONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=yCONFIG_KVM_VFIO=yCONFIG_VIRTUALIZATION=yCONFIG_KVM=mCONFIG_KVM_INTEL=m4.2.3 编译编译KVM配置好KVM后,就可以进行编译。编译KVM时,直接在KVM的安装目录使用“make”命令编译即可。为了使编译速度更快,可以在“make”命令后加“-j”参数,让make工具启用多进程进行编译。例如“make j 10”的含义是使用make工具最多创建10个进程来同时执行编译任务。在一个比较空闲的系统上面,一般使用一个两倍于系统上的CPU的core的数量来作为-j常用的一个参数。KVM 的安装包括两个步骤:module的安装、kernel与initramfs的安装。1)安装module 通过“make modules_install”命令可以将编译好的module 安装到相应的目录之中,在默认情况下module 被安装到/lib/modules/$kernel_version/kernel 目录之中。rootjay-linux kvm.git# make modules_install 安装好module之后,可以查看一下相应的安装路径,可看到kvm 模块也已经安装,如下所示:rootkvm-host:#drwxr-xr-x 3 root root 4096 4月 17 2014 archdrwxr-xr-x 3 root root 4096 4月 17 2014 cryptodrwxr-xr-x 77 root root 4096 4月 17 2014 driversdrwxr-xr-x 55 root root 4096 4月 17 2014 fsdrwxr-xr-x 6 root root 4096 4月 17 2014 libdrwxr-xr-x 2 root root 4096 4月 17 2014 mmdrwxr-xr-x 51 root root 4096 4月 17 2014 netdrwxr-xr-x 13 root root 4096 4月 17 2014 sounddrwxr-xr-x 4 root root 4096 4月 17 2014 ubunturootkvm-host:#-rw-r-r- 1 root root 97188 4月 11 2014 kvm-amd.ko-rw-r-r- 1 root root 220028 4月 11 2014 kvm-intel.ko-rw-r-r- 1 root root 731076 4月 11 2014 kvm.ko 4.2.4 安装安装KVM2)安装kernel 和initramfs 通过“make install”命令可以安装kernel和initramfs,make install”命令后会将内核和模块的相关文件复制到正确的地方,并且修改引导程序的配置以启用新内核,命令行输出如下: 安装安装KVMrootkvm-host:/xjy/kvm# make installsh ./arch/x86/boot/install.sh 3.18.0+ arch/x86/boot/bzImage System.map /bootrun-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.18.0+ /boot/vmlinuz-3.18.0+run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.18.0+ /boot/vmlinuz-3.18.0+update-initramfs: Generating /boot/initrd.img-3.18.0+run-parts: executing /etc/kernel/postinst.d/pm-utils 3.18.0+ /boot/vmlinuz-3.18.0+run-parts: executing /etc/kernel/postinst.d/update-notifier 3.18.0+ /boot/vmlinuz-3.18.0+run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.18.0+ /boot/vmlinuz-3.18.0+Generating grub configuration file .Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.Found linux image: /boot/vmlinuz-3.18.0+Found initrd image: /boot/initrd.img-3.18.0+Found linux image: /boot/vmlinuz-3.18.0+.old 系统启动后,登录进入系统,在通常情况下,系统启动时默认已经加载了kvm 和kvm_intel 这两个模块;如果没有加载,请手动用modprobe 命令依次加载kvm 和kvm_intel 模块。rootkvm-host:/xjy/kvm# modprobe kvmrootkvm-host:/xjy/kvm# modprobe kvm_intelrootkvm-host:/xjy/kvm# lsmod|grep kvmkvm_intel 143060 0 kvm 451511 1 kvm_intel 确认KVM 相关的模块加载成功后,检查/dev/kvm 这个文件,它是KVM内核模块提供给用户空间的QEMU程序使用的一个控制接口,它提供了客户机操作系统运行所需要的模拟和实际的硬件设备环境。rootkvm-host:# ls -l /dev/kvmcrw-rw-+ 1 root kvm 10, 232 1月 27 10:05 /dev/kvm 安装安装KVM4.3 编译安装 QEMU最新的QEMU版本在Ubuntu操作系统上可以直接使用命令“apt-get install qemu”进行安装。 在编译安装qemu时,需要以下内容的支持:(1)qemu-kvm-release.tar.gz文件(2)支持VT技术的Intel处理器,或者是SVM支持的AMD处理器(3)QEMU需要以下依赖内容:“zlib”库和头文件,“SDL”库和头文件,“alsa”库和头文件,“guntls”库和头文件,内核头文件。4.3.1 下载 QEMU 源码在内核空间安装加载KVM模块后,需要用户空间的QEMU程序来模拟硬件环境并启动客户机操作系统。QEMU通过直接在宿主CPU上执行客户代码的方式可以获得接近本地的性能,QEMU支持Xen作为Hypervisor的虚拟化,也支持使用KVM内核模块的虚拟化。在使用KVM时,QEMU能虚拟化x86,服务器和嵌入式PowerPC等。下载QEMU的方法有很多种(1)在QEMU官网下载在QEMU的官网http:/wiki.qemu.org/Main_Page上,点击D o w n l o a d 选 项 , 进 入 页 面 h t t p : / / q e m u -project.org/Download,在该页面上提供着QEMU的源码下载。(2)使用git clone方式下载QEMU源码git clone git:/git.qemu-project.org/qemu.git”,使用该命令可以下载QEMU的最新版本。4.3.2 配置 QEMU可以运行“./configure -help”命令查看配置的一些选项及其帮助信息。执行“./configure”文件进行QEMU的配置:rootkvm-host: /xjy/qemu/qemu-2.2.1# ./configure4.3.3 编译 QEMU配置QEMU后,编译很简单,直接在QEMU的源码目录下执行“make”命令,即可。如不出现错误,即编译成功。成功后,即可进行QEMU的安装。rootkvm-host: /xjy/qemu/qemu-2.2.1# make -j 10在编译时,可以在“make”命令后添加“-j”参数使用多进程编译。4.3.4 安装 QEMU编译完成之后,即可进行QEMU的安装,在QEMU的源码目录执行命令“make install”即可。QEMU在安装过程中的几个主要任务包括:创建QEMU的一些目录,复制一些配置文件到相应目录,复制QEMU的可执行文件到相应的目录。rootkvm-host:/xjy/qemu/qemu-2.2.1/qemu# make install4.4 启动第一个KVM客户机配置QEMU后,编译很简单,直接在QEMU的源码目录下执行“make”命令,即可。如不出现错误,即编译成功。成功后,即可进行QEMU的安装。rootkvm-host: /xjy/qemu/qemu-2.2.1# make -j 10在编译时,可以在“make”命令后添加“-j”参数使用多进程编译。4.4.1 安装客户机步骤(1)创建一个客户机的虚拟硬盘(镜像文件),将来用来存放客户机虚拟操作系统,这个虚拟硬盘是利用Linux文件系统来进行模拟。可以使用多种方式来创建镜像文件,可以使用Linux提供的“dd”命令,也可以使用“qemu-img”命令。(2)准备要安装系统的ISO文件。本例中以Ubuntu12.04为例,以下是系统的ISO文件:rootkvm-host:/xjy/iso# lsubuntu-12.04.2-desktop-amd64.iso win7-x86.iso(3)使用ISO文件安装系统并启动。使用“qemu-system-x86_64”命令安装Ubuntu系统,具体操作如下所示:4.4.2 启动第一个KVM客户机安装好Ubuntu客户机后,就可以使用ubuntu.img镜像文件启动第一个客户机。具体操作如下:rootkvm-host:/xjy/mkimg# qemu-system-x86_64 -enable-kvm -m 1024 -smp 4 -hda ubuntu.img4.5 网络配置在虚拟化技术中,QEMU对客户机也提供了多种类型的网络支持。在QEMU中,主要给客户机提供了以下4种不同模式的网络配置方案:(1)基于网桥(Bridge)的虚拟网卡模式(2)基于NAT(Network Addresss Translation)的虚拟网络模式(3)QEMU内置的用户模式网络(4)直接分配网络设备模式(例如,VT-d)网桥和NAT是基于linux-bridge实现的软件虚拟网络模式,QEMU是QEMU软件虚拟的网络模式。第四种模式是直接物理网卡分配给客户机使用,比如有eth0和eth1两块网卡,直接把eth0这块网卡给某一客户机使用。在QEMU命令行中,采用前三种网络配置方案对客户机网络的配置都是用“-net”参数来进行配置的。QEMU命令行中基本的“-net”参数如下:-net nic ,vlan=n,macaddr=mac,model=type,name=name,addr=addr,vectors=v主要参数说明:-net nic:这个是必须的参数,表明为客户机创建客户机网卡。vlan=n:表示将建立一个新的网卡,并把网卡放入到编号为n的VLAN,默认为0。macaddr=mac:设置网卡的MAC地址,默认会根据宿主机中网卡的地址来分配;若局域网中客户机太多,建议自己设置MAC地址以防止MAC地址冲突。model=type:设置模拟的网卡的类型,默认为rtl8139。name=name:设置网卡的名字,该名称仅在QEMU monitor中可能用到,一般由系统自动分配。addr=addr:设置网卡在客户机中的PCI设备地址为addr。vectors=v:设置该网卡设备的MSI-X向量的数量为v,该选项仅对使用virtio驱动的网卡有效,设置为“vectors=0”是关闭virtio网卡的MSI-X中断方式。4.5.1 网桥模式在QEMU中,网桥模式是一种比较常见的网络连接模式。在这种模式下,客户机和宿主机共享一个物理网络,客户机的IP是独立的,它和宿主机是在同一个网络里面。客户机可以访问外部网络,外部网络也可以访问这台客户机。 在QEMU命令行中,关于网桥模式的网络参数如下:-net tap,vlan=n,name=str,fd=h,ifname=name,script=file,downscript=dfile,helper=helper,sndbuf=nbytes,vnet_hdr=on|off,vhost=on|off,vhostfd=h,vhostforce=on|off主要参数说明如下:-net tap:这个参数是必须的,表示创建一个tap设备。vlan=n:设置该设备VLAN编号,默认值为0。name=str:设置网卡的名字。在QEMU monitor里面用到,一般由系统自动分配。fd=h:连接到现在已经打开着的TAP接口的文件描述符,一般让QEMU会自动创建一个TAP接口。ifname=name:表示tap设备接口名字。script=file:表示host在启动guest时自动执行的脚本,默认为/etc/qemu-ifup;如果不需要执行脚本,则设置为“script=no”。downscript=dfile:表示host在关闭guest时自动执行的脚本,默认值为/etc/qemu-ifdown;如果不需要执行,则设置为“downscript=no”。helper=helper:设置启动客户机时在宿主机中运行的辅助程序,包括去建立一个TAP虚拟设备,它的默认值为/usr/local/libexec/qemu-bridge-helper,一般不用自定义,采用默认值即可。sndbuf=nbytes:限制TAP设备的发送缓冲区大小为n字节,当需要流量进行流量控制时可以设置该选项。其默认值为“sndbuf=0”,即不限制发送缓冲区的大小。练习在宿主机中通过配置来实现网桥方式4.5.2 NAT模式使用NAT模式,就是让客户机借助NAT功能,通过宿主机所在的网络来访问互联网。由于NAT模式下的客户机TCP/IP配置信息是由DHCP服务器提供的,无法进行手工修改,因此客户机也就无法和本局域网中的其他真实主机进行通讯。使用NAT模式进行网络连接,支持宿主机和客户机之间的互访,也支持客户机访问网络。与网桥方式不同的是,当外界访问客户机时NAT就表现出局限性,需要在拥有IP的宿主机上实现端口映射,让宿主机IP的一个端口被重新映射到NAT内网的客户机相应端口上。采用NAT模式最大的优势是客户机接入互联网非常简单,不需要进行任何其他的配置,只需要宿主机能访问互联网即可。练习在宿主机中通过配置来实现NAT方式。4.6 图形显示配置本节介绍KVM中图形界面显示相关配置。显示选项用于定义客户机启动后的显示接口相关类型及属性等,常见的选项如下:-nographic:默认情况下,QEMU使用SDL来显示VGA输出,而此选项用于禁止图形接口。此时,QEMU类似一个简单的命令行程序,其仿真串口设备将被重定向到控制台。-curses:禁止图形接口,并使用curses/ncurses作为交互接口。-alt-grab:使用Ctrl+Alt+Shift组合键抢占和释放鼠标。-ctrl-grab:使用右Ctrl键抢占和释放鼠标。-sdl:启用SDL。-spice option,option,.:启用spice远程桌面协议;其中有许多子选项,具体请参照qemu-kvm的手册。-vga type:指定要仿真的VGA接口类型,常见类型有以下几个:cirrus:Cirrus Logic GD5446显示卡。std:带有Bochs VBE扩展的标准VGA显示卡;4.6 图形显示配置vmware:VMWare SVGA-II兼容的显示适配器;qxl:QXL半虚拟化显示卡;与VGA兼容;在Guest中安装qxl驱动后能以很好的方式工作,在使用spice协议时推荐使用此类型;none:禁用VGA卡。-vnc display,option,option,.:默认情况下,QEMU使用SDL显示VGA输出。使用-vnc选项,可以让qemu监听在VNC上,并将VGA输出重定向至VNC会话。使用此选项时,必须使用-k选项指定键盘布局类型。其中有许多子选项,具体请参照QEMU的手册。4.7 VNC的使用VNC(Virtual Network Computing)是一种图形化的桌面操作系统,它使用RFB(Remote Frame Buffer)协议来远程操作另外一台计算机操作系统。VNC软件主要由两个部分组成:VNC server及VNC viewer。4.7 VNC的使用整个VNC运行的工作流程如下:(1)VNC客户端通过浏览器或VNC viewer连接至VNC server。(2)VNC server传送一对话窗口至客户端,要求输入连接密码,以及存取VNC server显示装置。(3)在客户端输入联机密码后,VNC server验证客户端是否具有存取权限。 (4)若是客户端通过VNC server的验证,客户端即要求VNC server显示桌面环境。 (5)VNC server通过X Protocol 要求VNC server将画面显示控制权交由VNC server负责。(6)VNC server将来由VNC server的桌面环境利用VNC通信协议送至客户端,并且允许客户端控制VNC server的桌面环境及输入装置。4.7.1 在宿主机中VNC的使用准备两个系统,一个是Ubuntu系统的宿主机A,一个是用来远程连接宿主机的Windows系统B。检查Ubuntu系统是否安装VNC server,在终端窗口输入命令“dpkg -l|grep vnc”查看是否已安装VNC。#rootkvm-host:#rpm -qa |grep vnc(1)在Ubuntu上启动VNC server,并通过如下命令设置启动端口为5900+1=5901的VNC远程桌面服务器。如果第一次启动VNC server,系统会提示设置连接时需要的密码,根据需要设置即可。(1)在Ubuntu上启动VNC server,系统会提示设置连接时需要的密码,根据需要设置即可。(2)在Windows系统B上,安装VNC Viewer客户端软件。(3)在B系统上使用VNC客户端软件远程连接宿主机服务器,基本格式为“IP(hostname): PORT”。(4)输入设置的远程登录的密码“password01”,点击OK,即可远程连接到Ubuntu系统上。4.7.2 在客户机中VNC的使用在QEMU命令行中,在默认情况下,QEMU使用SDL显示VGA输出;但使用-vnc选项,可以让QEMU监听在VNC上,并将VGA输出重定向至VNC会话。在QEMU命令行的VNC参数中,简要介绍以下几个主要的参数:(1)host:N:表示允许从host主机的N号显示窗口来建立TCP连接到客户机上。host表示主机名或者IP地址,它是可选的。如果host值为空,表示Server端可以接受来自任何主机的连接。如果设置host的值,就可以确保只让某一台主机向服务及发起VNC连接请求。一般情况下,QEMU会根据数字N建立对应的TCP端口,端口号为5900+N。(2)None:表示VNC已经被初始化,但是并不在开始时启动。当真正需要启动时,可以通过QEMU monitor中的change命令来启动。(3)Password:表示客户端连接时需要采取基于密码的认证机制。但这里只声明它使用密码。具体密码值需要通过QEMU monitor中的change命令来设置。