KVM是Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中,硬件需要支持VT技术(如Intel VT技术或者AMD V技术)。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少,KVM目前已成为学术界的主流VMM之一。本篇博客将介绍部署虚拟化环境、创建虚拟机实例,以及虚拟机的基本管理。

搭建KVM虚拟化平台

    搭建KVM最简单的方法就是在安装系统的时候,选择桌面安装,然后选择虚拟化选项,KVM平台就随着系统的安装自动就搭建成功了。                                                 

    如果需要在已有的系统上搭建KVM平台,安装的步骤如下:

(1)安装KVM所需软件

[root@localhost ~]# yum -y groupinstall "Desktop"                //安装GNOME桌面环境[root@localhost ~]# yum -y install qemu-kvm.x86_64               //KVM模块[root@localhost ~]# yum -y install qemu-kvm-tools.x86_64         //KVM调试工具,可不安装[root@localhost ~]# yum -y install python-virtinst.noarch        //python组件,记录创建VM时的xml文件[root@localhost ~]# yum -y install qemu-img.x86_64               //qemu组件,创建磁盘、启动虚拟机等[root@localhost ~]# yum -y install bridge-utils.x86_64           //网络支持工具[root@localhost ~]# yum -y install libvirt                       //虚拟机管理工具[root@localhost ~]# yum -y install virt-manager                  //图形界面管理虚拟机

(2)检查KVM模块是否安装

[root@localhost ~]# lsmod | grep kvmkvm_intel              54285  0 kvm                   333172  1 kvm_intel

(3)设置KVM网络

    宿主服务器安装完成KVM,首先要设定网络,在libvirt中运行KVM网络有两种方法:NAT和Bridge,默认为NAT

用户模式(NAT):这种方式是默认网络,数据包由NAT方式通过主机的接口进行传送,可以访问外网,但是无法从外网访问虚拟机网络

桥接模式(Bridge):这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的主机可以直接访问到虚拟机内部

    这里的网络配置为桥接模式Bridge

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0TYPE=EthernetHWADDR=00:0c:29:1c:b4:fbONBOOT=yesNM_CONTROLLED=noBOOTPROTO=noneBRIDGE=br0[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0DEVICE=br0TYPE=EthernetONBOOT=yesNM_CONTROLLED=noBOOTPROTO=staticTYPE=BridgeIPADDR=192.168.1.1NETMASK=255.255.255.0[root@localhost ~]# service network restart正在关闭接口 br0:                                         [确定]正在关闭接口 eth0:                                        [确定]关闭环回接口:                                             [确定]弹出环回接口:                                             [确定]弹出界面 eth0:                                            [确定]弹出界面 br0: Determining if ip address 192.168.1.1 is already in use for device br0...                                                           [确定][root@localhost ~]# ifconfig br0       Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:FB            inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0          inet6 addr: fe80::20c:29ff:fe1c:b4fb/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:21 errors:0 dropped:0 overruns:0 frame:0          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0           RX bytes:1504 (1.4 KiB)  TX bytes:3128 (3.0 KiB)eth0      Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:FB            inet6 addr: fe80::20c:29ff:fe1c:b4fb/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:468 errors:0 dropped:0 overruns:0 frame:0          TX packets:365 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000           RX bytes:45694 (44.6 KiB)  TX bytes:42592 (41.5 KiB)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:28 errors:0 dropped:0 overruns:0 frame:0          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:0           RX bytes:2256 (2.2 KiB)  TX bytes:2256 (2.2 KiB)virbr0    Link encap:Ethernet  HWaddr 52:54:00:B1:C5:BC            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)

(4)安装虚拟机 

1)创建虚拟机的存储目录

杨书凡24.png

2)打开虚拟系统管理器

杨书凡22.png

杨书凡25.png

杨书凡26.png

杨书凡27.png

杨书凡23.png

杨书凡28.png

杨书凡29.png

杨书凡30.png

杨书凡34.png

杨书凡35.png

杨书凡36.png

杨书凡38.png

杨书凡39.png

使用KVM命令集管理虚拟机

1. KVM基本功能管理

[root@localhost ~]# ls /etc/libvirt/qemu          //查看KVM的配置文件存放目录autostart  networks  web.xml                      //web.xml是虚拟机系统的配置文件[root@localhost ~]# virsh 欢迎使用 virsh,虚拟化的交互式终端。输入:'help' 来获得命令的帮助信息       'quit' 退出       virsh # help                                    //查看命令帮助信息virsh # list --all                              //查看虚拟机的状态 Id    名称                         状态---------------------------------------------------- 5     web                            runningvirsh # shutdown web                //关机,首先需要确认acpid服务安装并运行域 web 被关闭 virsh # start web                   //开机域 web 已开始virsh # destroy web                 //强制虚拟机关闭电源域 web 被删除virsh # create /etc/libvirt/qemu/web.xml          //通过配置文件启动虚拟机域 web 被创建(从 /etc/libvirt/qemu/web.xml)virsh # suspend web                 //挂起虚拟机域 web 被挂起virsh # list --all Id    名称                         状态---------------------------------------------------- 8     web                            暂停virsh # resume web                  //恢复虚拟机域 web 被重新恢复virsh # autostart web        //创建/etc/libvirt/qemu/autostart目录,开机自动启动虚拟机域 web标记为自动开始virsh # exit           //和quit命令相同,退出virsh虚拟化的交互式终端[root@localhost ~]# virsh dumpxml web > /etc/libvirt/qemu/web_bak.xml   //导出虚拟机配置[root@localhost ~]# virsh shutdown web                            //关闭虚拟机域 web 被关闭[root@localhost ~]# virsh undefine web         //删除虚拟机域 web 已经被取消定义[root@localhost ~]# ls /etc/libvirt/qemu       //web的配置文件被删除,但磁盘文件不会被删除autostart  networks  web_bak.xml[root@localhost ~]# virsh list --all           //查不到web的信息,说明此虚拟机已被删除   Id    名称                         状态----------------------------------------------------[root@localhost ~]# mv /etc/libvirt/qemu/web_bak.xml /etc/libvirt/qemu/web.xml  [root@localhost ~]# virsh define /etc/libvirt/qemu/web.xml  //通过备份的文件重新定义虚拟机定义域 web(从 /etc/libvirt/qemu/web.xml)[root@localhost ~]# virsh list --all                        //虚拟机已经恢复 Id    名称                         状态---------------------------------------------------- -     web                            关闭 [root@localhost ~]# vim /etc/libvirt/qemu/web.xml      //修改配置文件,用来修改系统内存、磁盘文件等信息 [root@localhost ~]# virsh edit web              //和上面的命令一样,修改web.xml配置文件        编辑了域 web XML 配置。

2. KVM文件管理

    通过文件管理可以直接查看、修改、复制虚拟机的内部文件,虚拟机磁盘文件有raw和qcow2格式

raw格式:KVM虚拟机默认的格式,性能好、速度快,但不支持镜像、Zlib磁盘压缩、AES加密等

qcow2格式:是KVM支持的磁盘镜像格式,支持快照、、Zlib磁盘压缩、AES加密等

[root@localhost ~]# yum -y install libguestfs-tools     //安装此工具,可以直接读取qcow2格式的磁盘文件[root@localhost ~]# qemu-img info /data_kvm/store/web_kvm.img     //查看当前磁盘格式为rawimage: /data_kvm/store/web_kvm.imgfile format: rawvirtual size: 9.8G (10485760000 bytes)disk size: 9.8G[root@localhost ~]# virsh shutdown web                         //关闭虚拟机域 web 被关闭[root@localhost ~]# qemu-img convert -f raw -O qcow2 /data_kvm/store/web_kvm.img /data_kvm/store/web_kvm.qcow2//将raw格式转换为qcow2格式[root@localhost ~]# virsh edit web                         //修改web.xml配置文件……//省略部分内容    
      
              //此行将raw改为qcow2      
               //此行将img改为qcow2      
      
    ……//省略部分内容    [root@localhost ~]# virt-cat -a /data_kvm/store/web_kvm.qcow2 /etc/sysconfig/network    //类似于cat命令NETWORKING=yesHOSTNAME=web[root@localhost ~]# virt-edit -a /data_kvm/store/web_kvm.qcow2 /etc/resolv.conf    //类似于vim命令,用于编辑文件[root@localhost ~]# virt-df -h web                                    //用于查看虚拟机的磁盘信息Filesystem                                Size       Used  Available  Use%web:/dev/sda1                             484M        34M       425M    8%web:/dev/VolGroup/lv_root                 8.2G       2.9G       4.9G   35%

3. 虚拟机克隆

[root@localhost ~]# virsh list --all                     //查看虚拟机状态 Id    名称                         状态---------------------------------------------------- -     web                            关闭 [root@localhost ~]# virt-clone -o web -n www -f /data_kvm/store/www.qcow2  //从web克隆www [root@localhost ~]# virsh list --all                     //查看虚拟机状态 Id    名称                         状态---------------------------------------------------- -     web                            关闭 -     www                            关闭

4. 虚拟机快照

[root@localhost ~]# virsh snapshot-create web          //对web创建快照Domain snapshot 1516736781 created[root@localhost ~]# virsh snapshot-current web         //查看虚拟机快照的版本信息
  
1516736781
……//省略部分内容    [root@localhost ~]# virsh snapshot-list web            //查看快照信息 名称               Creation Time             状态------------------------------------------------------------ 1516736781           2018-01-24 03:46:21 +0800 shutoff[root@localhost ~]# virsh snapshot-create web          //创建新快照Domain snapshot 1516737252 created[root@localhost ~]# virsh snapshot-list web            //查看快照信息 名称               Creation Time             状态------------------------------------------------------------ 1516736781           2018-01-24 03:46:21 +0800 shutoff 1516737252           2018-01-24 03:54:12 +0800 shutoff[root@localhost ~]# virsh snapshot-revert web 1516736781      //恢复虚拟机状态至1516736781[root@localhost ~]# virsh snapshot-delete web 1516737252      //删除快照Domain snapshot 1516737252 deleted

    本篇博客只介绍了一些常用的KVM命令,其他命令可以通过查看help帮助信息或上网查找。由于KVM命令集的庞大很难清除明了,所以通常都是在桌面环境下通过图形界面管理,直观方便。