使用KVM需要以下几个前提条件:
1. CPU必需支持虚拟化,可以在/proc/cpuinfo文件中想找flags,如果是inter的显示为vmx,amd的显示为svm
2. CPU必需支持64位操作系统,可以在上述文件中查找lm标记,如果有则支持
3. 系统必需为64为的RHEL,且系统版本为RHEL6.4及以上为最佳
4. 必需在BIOS里开启CPU的VT功能
KVM虚拟机文件管理:
默认的KVM虚拟机工作目录为/var/lib/libvirt
配置文件存在于/etc/libvirt/qemu/目录下,以主机名称+xml结尾的文件即其相关虚拟机的配置文件,需要修改其配置,也可以直接修改xml文件实现(不建议)。其中autostart目录定义的配置文件会随主机一起启动,而network定义了虚拟机使用桥接网络时的网关网卡的相关配置。
KVM配置实例:
1. 配置安装RHEL6/Centos 6服务器,并安装虚拟化软件
#yum groupinstall -y "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools"
2. 添加开机启动,并启动服务
#chkconfig libvirtd on
#service libvirtd start
3. 镜像文件管理--直接创建
创建一个镜像:# cd /var/lib/libvirt/images ; qemu-img create -f qcow2 test1.img 5G
更改镜像格式:# qemu-img convert -f raw -o qcow2 test.img test1.img
增加镜像文件空间: # qemu-img resize test1.img 1G
查看镜像文件格式:# qemu-img info test1.img
4. 除了镜像来管理存储,kvm还支持存储池
定义存储池:virsh pool-define-as kvm_images dir "/kvm/images"
查看存储池:virsh pool-list --all
建立基于文件夹的存储池:virsh pool-build kvm_images
使存储池生效:virsh pool-start kvm_images
验证存储池:virsh pool-info kvm_images
创建完存储池后,就可以通过创建卷的方法来创建虚拟机的磁盘:
创建卷:virsh vol-create-as kvm_images test1.img 10G --format qcow2
刷新池:virsh pool-refresh kvm_images
查看存储池里面的卷信息:virsh vol-list kvm_images
查看单个卷的信息:virsh vol-info test1.img kvm_images
查看单个卷的详细信息:virsh vol-dumpxml test1.img kvm_images
5. 使用virt-install初始化安装一个Centos系统
# virt-install --connect qemu:///system \ #如果使用kvm安装,并且使用的root,默认为此,基于xen或者其它,可参考man virt-install
--n test1 \ #指定虚拟机的显示名称
--c /mnt/centos6.4-x86_64.iso #指定安装镜像,也可以指定cdrom直接安装,如:-c /dev/sr0
--r 2048 \ #指定内存,默认为MB
--arch=x86_64 \ #指定arch模型
--vcpus=2 --check-cpu --cpuset=0-1 \ #指定cpu0,1作为虚拟机的CPU,此处绑定了CPU
--os-type=linux --os-variant=rhel6 \ #指定系统类型和版本
--disk path=/var/lib/libvirt/images/test1.img,device=disk,bus=virtio,spare=true -s 10 \ #指定磁盘信息,使用virtio驱动加载
--network bridge=br0 \ #指定桥接模式,并指定通过br0网卡进行桥接
--noautoconsol --autostart \ #不自动开启控制台,并且随主机自启动
--vnc #提供vnc端口访问,在这里可以设置密码,也可以不设置
--force
6. 虚拟机管理--virsh
虚拟机状态管理:
开机:virsh start test1
关机:virsh shutdown test1
强制关机:virsh destroy test1
重新启动:virsh reboot test1
通过配置文档启动主机:virsh create /etc/libvirt/qemu/test1.xml
查看主机状态:virsh list --all
停止/挂机虚拟机:virsh suspend test1
保存虚拟机:virsh save test1
还原虚拟机:virsh resume test1
从一个已存在的设备配置文件新建一个虚拟机:
virsh dumpxml test1 >/etc/libvirt/qemu/test2.xml
qemu-img create -f qcow2 test2.img 20G
这时需要对其配置中的uuid,id,name,以及新的硬盘镜像文件,mac地址等信息进行更改,更改完成后,就可以通过下面的命令启动虚拟机的安安
virsh create /etc/libvirt/qemu/test2.xml
修改内存/CPU:
修改内存大小:virsh setmem test1 4G #默认单位为KB
设置内存的最大值:virsh setmaxmem test1 8G
增大VCPU数量:virsh setvcpus test1 8
添加/删除设备:
添加一块硬盘:
首先需要创建一个镜像,但是qemu-img创建的镜像没有被处理过(分区及格式化),因此可以使用libguestfs插件创建一个可以直接使用的磁盘分区:
yum install -y libguestfs
virt-make-fs -F qcow2 -t ext4 -s 50G /var/lib/libvirt/image/test1-1.img
然后将新的磁盘信息录入到test1.xml文件当中(通过命令virsh edit test1来修改为佳):
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/image/test1-1.img'/>
<target dev='hdf' bus='virtio' type='virtio'/>
</disk>
最后执行添加设备的命令:
virsh attach-device test1 /etc/libvirt/qemu/test1.xml
如果需要删除此设备,将xml文件中的设备信息删除后,执行以下命令即可:
virsh detach-device test1 /etc/libvirt/qemu/test1.xml
备份/还原:
备份:virsh save --bypass-cache test1 /var/lib/libvirt/save/test1_1.save --running
还原:virsh restore /var/lib/libvirt/save/test1_1.save --bypass-cache --running
快照管理:
如果要使用kvm的快照功能,就必须使用qcow2的磁盘格式,而raw只支持内存快照,如果不是,请参考第3节内容修改
查看快照:virsh snapshot-list test1
创建快照:virsh snapshot-create test1 test1.snap1
恢复到快照:virsh snapshot-revert test1 test1.snap1
删除快照:virsh snapshot-delete test1 test1.snap1
7. KVM虚拟机的迁移
其实了解了上面的操作之后,就明白,KVM虚拟机依靠两个主要文件来启动,一个是img文件,一个是xml配置文件。因此迁移的时候,可以直接迁移这两个文件就能实现静态迁移。如果img文件存放在共享存储,则更为方便,只用迁移xml配置文件,就可以实现静态迁移。
当然,virsh命令也可以迁移虚拟机,不过要求目标主机与当前主机的应用环境须保持一致,其命令格式如下:
virsh migrate --live test1 qemu+tcp//destnationip/system tcp://destnationip
结语:KVM还有许多其它方面的功能,如与VM之间的迁移、windows的扩展支持等功能,如果有兴趣的同学,可以参考man手册,其中已经提供了非常详细的用法说明。