一、KVM简介
KVM即Kernel Virtual Machine,是一个开源的系统虚拟化模块,最初是由以色列公司Qumranet开发。2007年2月被导入Linux 2.6.20核心中,成为内核源代码的一部分。2008年9月4日,Redhat收购了Qumranet,至此Redhat拥有了自己的虚拟化解决方案,之后便舍弃Xen开始全面扶持KVM,从RHEL6(Linux 2.6.20版本之后)开始KVM便被默认内置于内核中。集成在Linux的各个主要发行版本中,由于与Linux内核高度整合,因此在性能,安全性,兼容性,稳定性上都有很好的表现。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己到进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列也是基于软件模拟的Para-Virtualization。
KVM 特点
KVM必须在具备Intel VT或AMD-V功能的x86平台上运行。KVM包含一个为处理器提供底层虚拟化,可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。使用一个经过修改的QEMU(qemu-kvm),作为虚拟机上层控制和界面。
由于KVM仅是一个简单的虚拟化模块,所以它的内存管理没有自我实现,需借助于Linux内核实现内存管理。KVM能够使用Linux所支持的任何存储,在驱动程序的实现上,直接借助于Linux内核来驱动任何硬件。在性能上KVM继承了Linux很好的性能和伸缩性,在虚拟化性能方面,已经达到非虚拟化原生环境95%左右的性能(官方数据)。KVM拓展性也非常好,客户机和宿主机都可以支持非常多的CPU数量和非常大的内存,可以过载使用CPU和内存,还可借助KSM技术实现对内存的过量使用,且保证性能依旧非常不错。
KVM 架构
KVM依赖于x86硬件的虚拟化特性,提供全虚拟化的虚拟机,其基本思想是在Linux内核的基础上添加虚拟机管理模块,重用Linux内核中已完善和成熟的机制和模块,比如进程调度、内存管理、IO管理等,使之成为一个可以支持运行虚拟机的Hypervisor。整体架构如下图所示:
二、部署 KVM 虚拟化平台
这里使用的是 Centos 6.5 系统
2.1 准备环境,安装所需组件包
①开启CPU虚拟化功能(CPU,内存和硬盘都设置大一点)
②安装KVM所需软件
安装图形界面
1 | yum –y groupinstall "Desktop" |
查看包需的软件包组
1 | yum grouplist |
安装三个软件包组即可
1 | yum -y groupinstall "Virtualization" |
或安装如下
1 | yum -y install qemu-kvm.x86_64 \ |
查看服务,以及端口
③验证
重启系统后,查看CPU是否支持虚拟化,对于Intel的服务器可以通过以下命令查看,只要有输出就说明CPU支持虚拟化;AMD服务器可用cat /proc/cpuinfo | grep smv查看
1 | cat /proc/cpuinfo | grep vmx |
检查KVM模块是否安装
1 | lsmod | grep kvm |
开启libvirtd相关服务
1 | /etc/init.d/messagebus restart |
如出现以下报错:
1 | /etc/init.d/libvirtd start |
安装libdevmapper.so.1.02版本库即可
设置开机自启动
1 | service libvirtd start |
2.2 设置KVM网络(桥接模式)
桥接模式和NAT模式区别
bridged networking(桥接模式)
在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。同时,配置好网关和DNS的地址后,以实现通过局域网的网关或路由器访问互联网。
network address translation(NAT模式)
使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。也就是说,使用NAT模式可以实现在虚拟系统里访问互联网。NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,因此虚拟系统也就无法和本局域网中的其他真实主机进行通讯。采用NAT模式最大的优势是虚拟系统接入互联网非常简单,只需要宿主机器能访问互联网,你不需要配置IP地址,子网掩码,网关,但是DNS地址还是要根据实际情况填的。添加DNS地址除了在网卡属性中填写,还可以在虚拟机中的“虚拟网络编辑器”中的NAT选项卡中点击“编辑”按钮中来添加。
如果仅仅是让虚拟机能上网,两种模式都可以的,用桥接的话只要你在局域网内有合法的地址,比如你的ADSL猫是带路由功能的,如果是在单位,那就要网管给你合法IP才行(现在公司都是mac和ip绑定的)。
现在是主机和虚拟机互通,如果你的ADSL带路由功能,那关闭虚拟机的dhcp,选桥接,检查2机是否分配同网段的IP,关闭防火墙。
1 | vim /etc/sysconfig/network-scripts/ifcfg-eth0 |
1 | vim /etc/sysconfig/network-scripts/ifcfg-br0 |
1 | service network restart |
2.3 KVM(Virt-manager图形工具)部署虚拟化
① 创建存储池
选择“存储”项
创建“存储池”目录名
调整目录位置“/”下
②创建一个镜像存储池(用于存放.iso镜像)
填写镜像目录名
调整目录位置到/bdqn 存储池下
③创建存储卷
在bdqn存储池下创建
添加存储卷名,设置最大容量
④新建虚拟化并安装
上传系统镜像(winscp工具)
新建虚拟机
设置:虚拟机名,安装类型
设置:镜像位置,系统内核,版本
设置:内存大小,CPU核心数
设置:分配磁盘,存储卷
调整:高级选项
设置:时钟为本地
设置:主机引导时启动虚拟机
设置:远程管理VNC
到此为此,就可以正式安装系统了,相信大家都早已轻车熟路,这里就不一一演示了……
安装完后配置IP地址测试内网和外网的连通性,
三、使用KVM命令集管理虚拟机
3.1 KVM基本功能管理
①查看命令帮助
1 | virsh –h |
②查看KVM虚拟机系统实例配置文件目录
1 | ls /etc/libvirt/qemu/ |
③查看虚拟机状态
1 | virsh list --all |
④虚拟机关机与开机
1 | virsh shutdown chen |
⑤强制关闭虚拟机电源
1 | virsh destroy chen |
⑥通过配置文件启动虚拟机系统实例
1 | virsh create /etc/libvirt/qemu/chen.xml |
⑦扶起虚拟机
1 | virsh suspend chen |
⑧恢复虚拟机
1 | virsh resume chen |
⑨配置虚拟机实例伴随宿主机自动启动
1 | virsh autostart chen |
⑩导出虚拟机配置
1 | virsh dumpxml chen > /etc/libvirt/qemu/chen02.xml |
⑪虚拟机的删除与添加
删除虚拟机
通过备份的配置文件重新定义虚拟机
1 | mv chen02.xml chen.xml |
重新定义虚拟机
⑫修改虚拟机配置信息(用来修改系统内存大小,磁盘文件等信息)
直接通过vim 命令修改
1 | vim /etc/libvirt/qemu/chen.xml |
或通过virsh命令修改
1 | virsh edit chen |
3.2 KVM文件管理
通过文件管理可以直接查看,修改,复制虚拟机内部文件。例如:当系统因为配置问题无法启动时,可以直接修改虚拟机的文件。虚拟机磁盘文件有raw与qcow2格式,KVM虚拟机默认使用raw。以下是对这两个文件格式的对比……
raw : 性能最好,速度最快,其缺点是不支持一些新的功能,如镜像,Zlib磁盘压缩,AES加密等,针对两种格式的文件膛同的工具可供选择。这里介绍本地YUM安装libguestfs-tools后产生的命令行工具(这个工具可以直接读取qcow2格式的磁盘文件,因此需要将raw格式的磁盘文件换成qcow2的格式)
qcow2 : 可以在镜像上做N多个快照,更小的存储空间,支持多个snapshot,对历史snapshot进行管理,支持zlib的磁盘压缩
①转换raw格式磁盘至acow2格式
查看当前磁盘格式
1 | qemu-img info /bdqn/chen.img |
关闭虚拟机
1 | virsh shutdown chen |
转换磁盘文件格式
1 | qemu-img convert -f raw -O qcow2 /bdqn/chen.img /bdqn/chen02.img |
修改chen02的xml配置文件
1 | virsh edit chen |
②virt-cat 命令,类似于cat 命令(需要安装:libguestfs-tools)
1 | virt-cat -a /bdqn/chen.qcow2 /etc/sysconfig/network |
③virt-edit 命令,用于编辑文件,用法与vim基本一致
1 | virt-edit -a /bdqn/chen.qcow2 /etc/resolv.conf |
④virt-df命令用于查看虚拟机磁盘信息
1 | virt-df -h chen |
3.3 虚拟机克隆(需要关闭虚拟机)
①查看虚拟机状态(确保为关闭状态)
1 | virsh list --all |
②从chen克隆为chen02
1 | virt-clone -o chen -n chen02 -f /bdqn/chen02.qcow2 |
③查看虚拟机状态
1 | virsh list --all |
④启动虚拟机
1 | virsh start chen02 |
四、虚拟机快照
KVM虚拟机要使用镜像功能,磁盘格式必须为qcow2,之前已经将chen的磁盘格式转换成了qcow2,又对chen克隆了chen02
①对chen02创建快照
1 | virsh snapshot-create chen02 |
②查看虚拟机快照版本信息
1 | virsh snapshot-current chen02 |
③查看快照信息
1 | virsh snapshot-list chen02 |
⑤删除一些文件
⑥还原快照,看文件是否还存在
1 | virsh snapshot-revert chen02 1474811434 |
⑦删除快照
1 | virsh snapshot-list chen02 |
五、命令快速创建虚拟机
5.1 创建虚拟机磁盘
可以为虚拟机单独创建一个磁盘分区,也可以使用现有的分区目录。
1 | qemu-img create -f qcow2 /data/qemu_qcow2/dev_prometheus_server.qcow2 100G |
5.2 创建虚拟机实例
1 | virt-install --virt-type kvm --name dev_prometheus_server --ram 8192 --vcpus=4 --cdrom=/data/images/CentOS-7-x86_64-Minimal-1708_7.4.iso --disk /data/qemu_qcow2/dev_prometheus_server.qcow2,format=qcow2 --network bridge=br0 --graphics vnc,listen=0.0.0.0,port=6883 --noautoconsole --os-type=linux |
br0 为虚拟网卡名称
port 为VNC管理端口
5.3 配置虚拟机开机启动
1 | virsh autostart dev_prometheus_server |
5.4 使用VNC连接、配置系统
这里没有设置VNC连接密码,连接的时候不需要输入密码。
连接上去后,按照常规方式配置系统(用户密码、IP等)。