Linux 部署KVM虚拟化平台
简单介绍
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。
但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。
更详细的介绍和使用可以参考博客:http://blog.chinaunix.net/uid-7934175-id-5679365.html
安装
环境:CentOS 6.5上安装KVM所需软件
(1)最简单的安装方式就是在安装系统的时候,选择桌面安装,然后选择安装虚拟化
(2)在已有的系统基础上,安装KVM
yum -y install qemu-kvm qemu-kvm-tools qemu-img virt-manager libvirt libvirt-python libvirt-client bridge-utils virt-viewer virt-install
yum -y groupinstall "Desktop" //安装GNOME桌面环境(在没有图形化界面的基础上) yum -y install qemu-kvm //KVM模块 yum -y install qemu-kvm-tools //KVM调试工具 yum -y install qemu-img //qeum组件,创建磁盘、启动虚拟机等 yum -y install virt-manager //图形界面管理虚拟机 yum -y install libvirt //虚拟机管理工具 yum -y install libvirt-python //python组件,记录创建VM时的xml文件 yum -y install bridge-utils //网络支持工具 yum -y install libvirt-client yum -y install virt-viewer yum -y install virt-install
(3)验证。重启系统后,查看CPU是否支持虚拟化,对于intel的服务器可以通过以下命令查看,只要输出说明CPU支持虚拟化;AMD服务器可用" cat /proc/cpuinfo | grep smv "命令查看
# cat /proc/cpuinfo | grep vmx flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx
pdpe1gb rdtscp lm constant_tsc up arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulq
dq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3
dnowprefetch ida arat xsaveopt pln pts dts tpr_shadow vnmi ept vpid fsgsbase bmi1 avx2 smep bmi2 invpcid
(4)检查KVM模块是否安装
# lsmod | grep kvm kvm_intel 54285 0 kvm 333172 1 kvm_intel
加载KVM内核
modprobe kvm
设置KVM网络
宿主服务器安装完成KVM,首先要设定网络,在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认NAT
关于两种模式的说明:
1) 用户模式,即NAT方式,这种方式是默认网络,数据包有NAT方式通过主机的接口进行传送,=可以访问外网,但是无法从外部访问虚拟机网络;
2) 桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持;
以下为Bridge(桥接):
(1)修改eth0网卡配置文件
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 HWADDR=00:0C:29:9F:97:78 TYPE=Ethernet ONBOOT=yes //将yes改为no NM_CONTROLLED=no //将yes改为no BOOTPROTO=dhcp BRIDGE="br0" //添加
(2)新建ifcfg-br0文件
# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0 TYPE=Bridge ONBOOT=yes NM_CONTROLLED=no PBOOTPROTO=static IPADDR=192.168.10.10 NETMASK=255.255.255.0
(3)关闭网卡守护进程
/etc/init.d/NetworkManager stop
(4)重启network服务
service network restart
(5)确认IP地址信息
# ifconfig
br0 Link encap:Ethernet HWaddr 00:0C:29:34:4E:DE inet addr:192.168.10.10 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe34:4ede/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 frame:0 TX packets:20 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:229 (229.0 b) TX bytes:1272 (1.2 KiB) eth0 Link encap:Ethernet HWaddr 00:0C:29:34:4E:DE inet6 addr: fe80::20c:29ff:fe34:4ede/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:18 errors:0 dropped:0 overruns:0 frame:0 TX packets:78 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3885 (3.7 KiB) TX bytes:21228 (20.7 KiB) Interrupt:19 Base address:0x2024 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:478 errors:0 dropped:0 overruns:0 frame:0 TX packets:478 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:40146 (39.2 KiB) TX bytes:40146 (39.2 KiB) virbr0 Link encap:Ethernet HWaddr 52:54:00:DB:2E:AD inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
查看网桥
# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29344ede no eth1 virbr0 8000.525400db2ead yes virbr0-nic
KVM管理
virt-manager是基于libvirt的图形化虚拟机管理软件;
virt-manager
命令方式
查看命令帮助
virsh -h
KVM的配置文件爱你存放目录(.xml后缀文件)
/etc/libvirt/qemu/
查看虚拟机状态
virsh list //查看正在运行的虚拟机实例 virsh list --all //查看所有的虚拟机实例
虚拟机的关机于开机
virsh start 虚拟机实例名称 //开启虚拟机实例 virsh shutdown 虚拟机实例名称 //关闭虚拟机实例
强制实例系统关闭电源
virsh destroy 虚拟机实例名称
通过配置文件启动虚拟机系统实例
virsh create 虚拟机实例配置文件路径
virsh create /etc/libvirt/qemu/test.xml
挂起虚拟机
virsh suspend 虚拟机实例名称
恢复虚拟机
virsh resume 虚拟机实例名称
配置虚拟机实例伴随宿主机自动启动,会创建 /etc/libvirt/qemu/autostat/ 目录,目录内容为开机自启动的系统
virsh autostart 虚拟机实例名称
删除虚拟机实例(删除前需要先关闭该虚拟机实例)
virsh undefine 虚拟机实例的名称
通过备份的配置文件重新定义虚拟主机实例
cd /etc/libvirsh/qemu mv test02.xml test01.xml virsh define test01.xml
修改虚拟机实例的配置文件
vim /etc/libvirt/qemu/test.xml //直接使用vim修改配置文件 virsh edit test //通过virsh命令修改
更多使用方法可以参考:http://linux.51yip.com/search/virsh
KVM虚拟机实例的创建
(1)图形化创建略
(2)命令方式创建
virt-install --name=haha --ram=2048 --vcpus=1 --file=/var/lib/libvirt/images/haha.img --file-size=30 --location=/tmp/rhel6.5.iso --force &
参数说明:
--name 指定KVM虚拟机的名字 --ram 内存大小 --file 磁盘文件的路径 --vcpus 指定虚拟机的 CPU 数量 --file-size=30(默认单位是G) 设置硬盘大小 --cdrom 光驱提供boot.iso 镜像 --location 本地提供boot.iso 镜像 --network network:default 设置网卡(使用默认) --vnc --vncport=5911 连接桌面环境的vnc端口
KVM文件管理
通过文件管理可以直接查看、修改、复制虚拟机的内部文件。例如当系统因为配置问题无法启动时,可以直接修改虚拟机的文件。虚拟机磁盘文件有raw与qcow2格式,KVM虚拟机默认使用raw格式,raw格式性能最好,速度最快,其缺点是不支持一些新的功能,如镜像、Zlib磁盘压缩、AES加密等,针对两种格式的文件有不同的工具可供选择。
这里介绍本地YUM安装libguestfs-tools后产生的命令行工具(这个工具可以直接读取qcow2格式的磁盘文件,因此需要将raw格式的磁盘文件转换成qcow2的格式)
安装 libguestfs-tools 工具(需要配置好本地YUM源)
yum -y install libguestfs-tools
转换磁盘格式
(1)转换raw格式磁盘至qcow2格式
查看当前磁盘格式
#qemu-img info /var/lib/libvirt/images/test.img image: /var/lib/libvirt/images/test.img file format: raw virtual size: 15G (16106127360 bytes) disk size: 1.1G
关闭虚拟机实例
virsh destroy test
转换磁盘文件格式
qemu-img convert -f raw -O(大写o) qcow2 原img文件路径 转换后qcow2文件路径
#qemu-img convert -f raw -O qcow2 /var/lib/libvirt/images/test.img /var/lib/libvirt/images/test.qcow2
查看转换后的磁盘格式
#qemu-img info /var/lib/libvirt/images/test.qcow2 image: /var/lib/libvirt/images/test.qcow2 file format: qcow2 virtual size: 15G (16106127360 bytes) disk size: 804M cluster_size: 65536
(2)修改 test 实例的xml配置文件
#virsh edit test
...... //部分内容省略 <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> //将type中的raw修改为qcow2 <source file='/var/lib/libvirt/images/test.qcow2'/> //将file中的路径修改为转换后磁盘文件路径 <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk>
...... //部分内容省略
(3)重启系统使其生效
reboot
(4)virt-cat命令,类似与cat命令
# virt-cat -a /var/lib/libvirt/images/test.qcow2 /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=52:54:00:D5:32:CF TYPE=Ethernet UUID=0270d54a-1141-475a-9876-b71edc2a8c2c ONBOOT=no NM_CONTROLLED=yes BOOTPROTO=dhcp
(5)virt-edit命令,用于编辑文件,用法与vim基本一致
virt-edit -a /var/lib/libvirt/images/test.qcow2 /etc/sysctl.conf
(6)virt-df命令用于查看虚拟机磁盘信息
#virt-df -h test Filesystem Size Used Available Use% test:/dev/sda1 787M 38M 710M 5% test:/dev/sda3 12G 727M 11G 6%
虚拟机克隆
从test克隆test01
virt-clone -o test -n test01 -f /var/lib/libvirt/images/test01.qcow2
查看虚拟机状态
#virsh list --all Id 名称 状态 ---------------------------------------------------- 1 test01 running - test 关闭
虚拟机快照
1)对test创建快照
#virsh snapshot-create test Domain snapshot 1505821946 created
2)查看虚拟机快照版本信息
# virsh snapshot-current test <domainsnapshot> <name>1505821946</name> //快照版本号 <state>shutoff</state> ...... //部分内容省略
3)查看快照信息
# virsh snapshot-list test 名称 Creation Time 状态 ------------------------------------------------------------ 1505821946 2017-09-19 19:52:26 +0800 shutoff
4)恢复虚拟机状态至1505821946
virsh snapshot-revert test 1505821946
5)删除快照
#virsh snapshot-delete test 1505821946 Domain snapshot 1505821946 deleted