Contents
  1. 1. KVM虚拟化技术介绍
    1. 1.1. 概述
    2. 1.2. 架构说明
    3. 1.3. KVM与virtualbox等的区别
    4. 1.4. 操作接口
  2. 2. 安装说明
    1. 2.1. 系统要求
    2. 2.2. 安装KVM
    3. 2.3. 关闭SELINUX防火墙
    4. 2.4. 网络配置
      1. 2.4.1. 配置桥接网络
    5. 2.5. 安装guest虚拟机
  3. 3. 虚拟机管理命令

KVM虚拟化技术介绍

概述

KVM是基于内核的虚拟化技术(Kernel-based Virtual Machine),于2007年的Linux 2.6.20被合并进Linux内核。KVM要求CPU支持硬件虚拟化技术,即Intel的VT-x或AMD的AMD-V。
KVM相对裸机有2%以内的性能损耗,XEN相对裸机有2.5%的性能损耗。由于XEN需要修改Linux内核,而KVM是集成到每个Linux内核的、KVM相对XEN更加易用等原因,KVM已经成为大多数Linux系统的推荐默认虚拟化机制
KVM只能完成CPU的虚拟化,而完整的硬件环境还需要网络、硬盘、键盘、鼠标等IO环境,这些硬件环境的模拟是通过QEMU-KVM完成的。

架构说明

下图为维基百科上的架构说明

KVM与virtualbox等的区别

KVM适合于服务端的虚拟化,图形显示能力差,但是CPU的利用效率高;virtualbox图形支持较好,支持2D、3D加速。
注意:KVM与VirtualBox有冲突,二者不能同时使用

操作接口

KVM可通过libvirt这个通用的虚拟机管理库进行管理,使用libvirt的客户端有:命令行下的virsh和GUI下的virt-manager。

安装说明

系统要求

CPU支持硬件虚拟化,有的需要在BIOS中的CPU设置启用虚拟化,在BIOS中的英文通常为virtualization,如果是disabled状态要改成enabled状态。
Linux上查看是否支持虚拟化的方式有:

  1. $ lscpu,输出的文本中带Virtualization: VT-xVirtualization: AMD-V即说明支持硬件虚拟化,否则不支持
  2. $ grep -E "(vmx|svm|0xc0f)" --color=always /proc/cpuinfo,如果没有匹配的内容则说明不支持硬件虚拟化,有匹配的内容说明支持硬件虚拟化

安装KVM

本安装说明以CentOS 7为例
假定CentOS 7 ISO安装文件已下载,并存储于路径/home/kvm/iso/CentOS-7.0-1406-x86_64-Minimal.iso

1
2
3
4
5
6
[root@localhost ~]# yum -y install qemu-kvm libvirt virt-install bridge-utils
[root@localhost ~]# lsmod | grep kvm # make sure modules are loaded
kvm_intel 138567 0
kvm 441119 1 kvm_intel
[root@localhost ~]# systemctl start libvirtd # 启动libvirt服务
[root@localhost ~]# systemctl enable libvirtd # 启用libvirt服务

安装完后,运行virsh -c qemu:///system list,用于检查KVM是否安装成功

1
2
3
[root@localhost ~]# virsh -c qemu:///system list
Id Name State
----------------------------------

如果没有报错即是安装成功

关闭SELINUX防火墙

1
[root@localhost ~]# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config

网络配置

安装完后,libvirt 会创建一个名为virbr0的 NAT 网络。我们测试时通常需要虚拟机具有单独的IP,而KVM只提供了NAT,桥接两种网络连接方式,故为了实现单独IP我们需要使用桥接网络。

配置桥接网络

注意,通常桥接网络的配置指的是在有线网卡上进行的配置,无线网卡鉴于安全因素不建议配置桥接网络,无线网卡的桥接配置也比较复杂,远没达到实用阶段。
假设宿主机上的有线网卡为enps30(可通过ip addr show命令查看网卡的名称),则需要把enp3s0网卡的配置改成如下内容,并添加ifcfg-br0文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# bash -c 'cat > ifcfg-enp3s0 << EOF
DEVICE=enp3s0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0
EOF'
[root@localhost network-scripts]# bash -c 'cat > ifcfg-br0 << EOF
TYPE=Bridge
BOOTPROTO=none
DEVICE=br0
ONBOOT=yes
IPADDR0=192.168.71.47
PREFIX0=24
GATEWAY0=192.168.71.1
EOF'

IPADDR0和GATEWAY0需要根据实际情况调整
配置完成后,需要运行systemctl restart network重启网络

安装guest虚拟机

首先运行如下命令,查看kvm支持的guest虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
[root@localhost ~]# virt-install --os-variant=list
win7 : Microsoft Windows 7
vista : Microsoft Windows Vista
winxp64 : Microsoft Windows XP (x86_64)
winxp : Microsoft Windows XP
win2k : Microsoft Windows 2000
win2k8 : Microsoft Windows Server 2008
win2k3 : Microsoft Windows Server 2003
openbsd4 : OpenBSD 4.x
freebsd8 : FreeBSD 8.x
freebsd7 : FreeBSD 7.x
freebsd6 : FreeBSD 6.x
solaris9 : Sun Solaris 9
solaris10 : Sun Solaris 10
opensolaris : Sun OpenSolaris
netware6 : Novell Netware 6
netware5 : Novell Netware 5
netware4 : Novell Netware 4
msdos : MS-DOS
generic : Generic
debianwheezy : Debian Wheezy
debiansqueeze : Debian Squeeze
debianlenny : Debian Lenny
debianetch : Debian Etch
fedora19 : Fedora 19
fedora18 : Fedora 18
fedora17 : Fedora 17
fedora16 : Fedora 16
fedora15 : Fedora 15
fedora14 : Fedora 14
fedora13 : Fedora 13
fedora12 : Fedora 12
fedora11 : Fedora 11
fedora10 : Fedora 10
fedora9 : Fedora 9
fedora8 : Fedora 8
fedora7 : Fedora 7
fedora6 : Fedora Core 6
fedora5 : Fedora Core 5
mageia1 : Mageia 1 and later
mes5.1 : Mandriva Enterprise Server 5.1 and later
mes5 : Mandriva Enterprise Server 5.0
mandriva2010 : Mandriva Linux 2010 and later
mandriva2009 : Mandriva Linux 2009 and earlier
rhel7 : Red Hat Enterprise Linux 7
rhel6 : Red Hat Enterprise Linux 6
rhel5.4 : Red Hat Enterprise Linux 5.4 or later
rhel5 : Red Hat Enterprise Linux 5
rhel4 : Red Hat Enterprise Linux 4
rhel3 : Red Hat Enterprise Linux 3
rhel2.1 : Red Hat Enterprise Linux 2.1
sles11 : Suse Linux Enterprise Server 11
sles10 : Suse Linux Enterprise Server
opensuse12 : openSuse 12
opensuse11 : openSuse 11
ubuntusaucy : Ubuntu 13.10 (Saucy Salamander)
ubunturaring : Ubuntu 13.04 (Raring Ringtail)
ubuntuquantal : Ubuntu 12.10 (Quantal Quetzal)
ubuntuprecise : Ubuntu 12.04 LTS (Precise Pangolin)
ubuntuoneiric : Ubuntu 11.10 (Oneiric Ocelot)
ubuntunatty : Ubuntu 11.04 (Natty Narwhal)
ubuntumaverick : Ubuntu 10.10 (Maverick Meerkat)
ubuntulucid : Ubuntu 10.04 LTS (Lucid Lynx)
ubuntukarmic : Ubuntu 9.10 (Karmic Koala)
ubuntujaunty : Ubuntu 9.04 (Jaunty Jackalope)
ubuntuintrepid : Ubuntu 8.10 (Intrepid Ibex)
ubuntuhardy : Ubuntu 8.04 LTS (Hardy Heron)
virtio26 : Generic 2.6.25 or later kernel with virtio
generic26 : Generic 2.6.x kernel
generic24 : Generic 2.4.x kernel

guest OS 以CentOS 7的安装,列表中没有centos7,用其上游发行版rhel7代替
运行如下命令安装

1
2
3
4
5
[root@localhost kvm]# virt-install --connect qemu:///system -n centos7_demo \
-r 512 --vcpus=4 --disk path=/home/kvm/images/centos7_demo.img,size=15 \
--graphics vnc,listen=0.0.0.0 --noautoconsole --os-type linux \
--os-variant rhel7 --accelerate --network=bridge:br0 --hvm \
--cdrom /home/kvm/iso/CentOS-7.0-1406-x86_64-Minimal.iso

参数说明:

  • --connect qemu:///system 连接到本地系统上的KVM,也可以连接到其他主机上的KVM
  • -n centos7_demo 虚拟机的名称,这个例子中叫 centos7_demo
  • -r 512 分配给虚拟机的内存,此处为512M
  • -vcpus=4 虚拟CPU个数:2
  • --disk path=/home/kvm/images/centos7_demo.img,size=15 虚拟机磁盘镜像文件存储路径,存储目录必须是已经存在的目录,文件大小为10GB
  • --graphics vnc,listen=0.0.0.0 图形化访问虚拟机的方式:通过VNC协议。也可以使用效率更高的spice协议,spice协议支持音频和USB设备,不过配置较为复杂
  • --noautoconsole 不自动连接到控制台
  • --os-type linux 操作系统类型,如果是Windows操作系统,则是windows
  • --os-variant rehel7 guest操作系统类型,即上面virt-install --os-variant=list中显示的
  • --accelerate 使用硬件加速
  • --network=bridge:br0 使用类型为桥接的br0网卡
  • –hvm 全虚拟化
  • --cdrom /home/kvm/iso/CentOS-7.0-1406-x86_64-Minimal.iso ISO安装文件的存储路径

该命令执行后,我们需要使用VNC客户端连接到安装控制台上
查看本地的VNC连接地址

1
2
[root@localhost ~]# virsh vncdisplay centos7_demo
:0

:0代表第一个屏幕,VNC的默认连接端口为5900,:0即端口5900,如果是:1则端口是5901,:2端口是5902,以此类推。支持VNC的客户端有TightVNC,TigerVNC,realvnc等。本文使用的是tigervnc。

开放防火墙访问vnc端口

1
2
[root@localhost ~]# firewall-cmd --zone=public --add-port=5900/tcp --permanent
[root@localhost ~]# firewall-cmd --reload

从另一台支持图形化界面的主机连接到guest虚拟机

1
joelhy@arminix: ~ $ vncviewer 192.168.71.47::5900

其中,192.168.71.47为KVM宿主机的IP地址,5900是根据上面vncdisplay结果得到的端口,也可以用vncviewer 192.168.71.47:0访问。192.168.71.47需要改成实际使用的IP。

运行vncviewer命令后会打开如下图形化窗口
VNC客户端
在此VNC图形化窗口中即可完成安装

虚拟机管理命令

virsh 命令提供了操作虚拟机的一系列命令:

  1. virsh list –all 获取虚拟机列表
  2. virsh dominfo {servername} 获取虚拟机信息
  3. virsh shutdown {servername} 关闭虚拟机
  4. virsh reboot {servername} 重启虚拟机
  5. virsh start {servername} 启动虚拟机
  6. virsh undefine {servername} 删除虚拟机定义文件,即删除/etc/libvirt/qemu目录下相应的xml文件,注意_这个命令并不会删除磁盘img文件,磁盘img文件需要手动删除
  7. virsh edit {servername} 编辑虚拟机配置文件,即修改虚拟机的内存、CPU以及VNC连接端口等配置
  8. virt-clone -o {old_servername} -n {new_servername} -f /path/to/img/file.img 复制虚拟机,复制完成后需要登录进虚拟机更改IP地址、hostname
Contents
  1. 1. KVM虚拟化技术介绍
    1. 1.1. 概述
    2. 1.2. 架构说明
    3. 1.3. KVM与virtualbox等的区别
    4. 1.4. 操作接口
  2. 2. 安装说明
    1. 2.1. 系统要求
    2. 2.2. 安装KVM
    3. 2.3. 关闭SELINUX防火墙
    4. 2.4. 网络配置
      1. 2.4.1. 配置桥接网络
    5. 2.5. 安装guest虚拟机
  3. 3. 虚拟机管理命令