kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学 术界的主流VMM之一。

KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但 Xen本身有自己到进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列也是基于软件模拟的Para-Virtualization。

一、KVM宿主服务器环境配置

1. 查看CPU是否支持VT技术

[root@ddd-s-8 kvmimg]# cat /proc/cpuinfo | egrep 'vmx|svm'|head  -n 1
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 x2apic popcnt aes xsave avx lahf_lm ida arat xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid


如果执行指令后有类似返回,则证明CPU支持VT


2. 安装KVM组件

yum -y groupinstall 'Virtualization' 'Virtualization Client' 'Virtualization Platform'   #安装
yum groupinfo 'Virtualization' 'Virtualization Client' 'Virtualization Platform'    #查询YUM包



3. 检查KVM模块加载

[root@ddd-s-8 kvmimg]# lsmod | grep kvm 
kvm_intel              50380  4 
kvm                   305081  1 kvm_intel


4 桥网卡:

yum install bridge-utils tunctl
chkconfig  NetworkManager  off

[root@ddd-s-8 kvmimg]# cat /etc/sysconfig/network-scripts/ifcfg-em1 
DEVICE=em1
#BOOTPROTO=none
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE="Ethernet"
GATEWAY=X.X.X.X
DNS3=8.8.8.8
USERCTL=no
BRIDGE=br0

[root@ddd-s-8 kvmimg]# cat /etc/sysconfig/network-scripts/ifcfg-br0 
DEVICE=br0
NM_CONTROLLED=yes
BOOTPROTO=static
ONBOOT=yes
IPADDR=x.x.x.x
BOOTPROTO=none
NETMASK=255.255.255.192
DNS1=8.8.8.8
GATEWAY=x.x.x.x
IPV6INIT=no
USERCTL=no
TYPE=Bridge

echo 1 > /proc/sys/net/ipv4/ip_forward   添加路由转发


桥接网卡时最好不要远程,桥接,或者可以使用脚本

wget --no-cache http://www.convirture.com/downloads/convirture-tools/2.0.1/convirture-tools-2.0.1.tar.gz
# tar zxvf convirture-tools-2.0.1.tar.gz
# /root/convirture-tools/install/managed_server/scripts/convirt-tool --bridge setup




5 安装vnc server 远程桌面管理kvm

yum groupinstall  "Desktop" "Desktop Platform" "X Window System"   #安装x windows
yum install tigervnc-server  #安装vnc server
vim /etc/sysconfig/vncservers # 修改用户 绑定地址

VNCSERVERS="2:root"
#VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"
VNCSERVERARGS[2]="-geometry 1024x768 -depth 24"
安装字体支持
yum install libXfont  
yum install xorg-x11-xfs  
yum install xorg-x11-xfs-utils  
yum install xorg-x11-xinit  
yum install xorg-x11-xdm  
yum install xorg-x11-fonts*



二、虚拟机安装

1. 建立虚拟机磁盘镜像文件

qcow2格式是kvm支持的标准格式,raw格式为虚拟磁盘文件通用格式。有测试数据表明raw格式的I/O性能略高于qcow2格式,但是在加密,容量,快照方面qcow2格式有优势

qemu-img create -f qcow2 test01.qcow2 20G  #建立qcow2格式磁盘文件  qcow2需要先创建
qemu-img create -f raw test02.raw 20G      #建立raw格式磁盘文件
qemu-img info test.qcow2                 #查看磁盘文件格式信息



2. 建立虚拟机示例

virt-install --name test01 --boot network,cdrom,menu=on --ram 1024 --vcpus=2 --os-variant=generic --accelerate --cdrom=/data/database/CentOS-6.2-x86_64-minimal.iso --disk path=/data/kvmimg/test01.qcow2,size=30,format=qcow2,bus=virtio --bridge=br0,model=virtio --vnc --vncport=5903 --vnclisten=0.0.0.0

3.virt-install 的一些参数解释

--name 指定虚拟机名称,virsh操作指定虚拟机时所需要的参数,不可以重复。 
--ram 分配内存大小,安装完成后可以用 virsh 调整。 
--vcpus 分配CPU核心数,最大与实体机CPU核心数相同,安装完成后也可以用 virsh 调整。 
--disk 指定虚拟机镜像, size 指定分配大小单位为G。 
--network 网络类型,此处用的是默认,一般用的应该是 bridge 桥接。 
--os-variant 指定操作系统类型,此处使用的是标准Linux 2.6,其他的可以通过 man virt-install 详细查看。 
--accelerate 加速,当安装QEMU客户机时,如果支持可用KVM或KQEMU内核加速能力,如果KVM和KQEMU都支持,KVM加速
--cdrom 指定安装镜像所在。 
--vnc 启用VNC远程管理,一般安装系统都要启用。 
--vncport 指定 VNC 监控端口,默认端口为 5900,端口不能重复。 
--vnclisten 指定 VNC 绑定IP,默认绑定127.0.0.1,这里将其改为 0.0.0.0 以便可以通过外部连接。
--noautoconsole 使用本选项指定不自动试图连接到客户机控制台。默认行为是调用一个VNC客户端显示图形控制台

4. 虚拟机管理指令 virsh 简介

virsh list 列出当前虚拟机列表,不包括未启动的
virsh list --all 列出所有虚拟机,包括所有已经定义的虚拟机
virsh start domain-name 启动指定虚拟机
virsh shutdown domain-name 停止指定虚拟机 
virsh reboot domain-name 重新启动指定虚拟机 kvm虚拟机必须开启acpid
virsh autostart domain-name 指定虚拟机开机自动启动
virsh destroy  domain-name  强制关闭电源
virsh create /etc/libvirt/qemu/domain-name.xml 通过配置文件启动虚拟机
virsh dumpxml domain-name > /etc/libvirt/qemu/dump.xml 导出KVM虚拟机配置备份文件
virsh undefine domain-name  删除kvm的配置文件,并不删除虚拟磁盘文件
virsh define /etc/libvirt/qemu/domain-name.xml 通过导出备份的配置文件恢复原KVM虚拟机的定义,并重新定义虚拟机
virsh edit   domain-name  编辑KVM虚拟机配置文件
virsh suspend  domain-name  挂起服务器
virsh  resume  domain-name   恢复服务器