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图形化窗口中即可完成安装

虚拟机管理命令

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

kvm虚拟机安装的更多相关文章

  1. KVM 虚拟机 安装配置

    原创博文安装配置KVM http://www.cnblogs.com/elvi/p/7718574.htmlweb管理kvm http://www.cnblogs.com/elvi/p/7718582 ...

  2. kvm虚拟化学习笔记(三)之windows kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  3. QEMU/KVM虚拟机安装配置

    1.安装相关组件: [root@KVM ~]# yum install qemu-img qemu-kvm qemu-kvm-tools virt-manager virt-viewer virt-v ...

  4. centos7.4下的KVM虚拟机安装使用

    本来是用的vmware,不过后来想试下KVM,想着装个ZSTACK也行,结果zstack使用网络安装没搞明白,把物理机系统毁了,这下彻底完蛋了,只好还装个centos了,但是又不想用VMWARE就想起 ...

  5. KVM虚拟机安装报错 KVM is not available

    在linux系统上使用kvm安装系统时,如果你的cpu不支持虚拟化技术那么可能会报以下错误: Warning:KVM is not available. This may mean the KVM p ...

  6. KVM虚拟机安装使用教程(Ubantu)

    背景: 公司在某电信机房有50台ubantu的实体机,机器配置的ip是192.168.100.x的ip,内存和cpu都是高端配置.假如哪些端口需要对外映射,就通过机房的防火墙完成端口映射. 100.1 ...

  7. windows kvm虚拟机安装

    这一步操作需要注意的几个点:a.局域网内与主机传输文件用scp或ftp命令,要保证ISO镜像文件在主机上有操作权限的目录下,比如 /home等:b.不管安装什么系统的虚拟机,创建的磁盘类型,分配的虚拟 ...

  8. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  9. KVM虚拟机安装及桥接网络配置

    1.查看CPU是否支持intel或AMD的虚拟技术 cat /proc/cpuinfo | grep -E "vmx|svm" --color --vmx intel的CPU sv ...

随机推荐

  1. 桥接和nat模式区别

    bridged networking(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,你需要手工为虚拟系统配置IP地址 ...

  2. Windows10 如何删掉内置的 skype ?

    打开开始菜单,输入“PowerShell”并回车: 运行“Get-AppxPackage -User username”命令( username 请替换成当前实际用户名),此时会显示所有已安装的应用程 ...

  3. python : HTML+CSS (左侧菜单)

    左侧菜单 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3 ...

  4. [转]http://m635674608.iteye.com/blog/1750833

    转载地址:http://m635674608.iteye.com/blog/1750833 在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个 ...

  5. Spring中的事物管理,用 @Transactional 注解声明式地管理事务

    事物: 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的 完整性和 一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的四 ...

  6. Team Queue (uva540 队列模拟)

    Team Queue Queues and Priority Queues are data structures which are known to most computer scientist ...

  7. Unity-The Courtyard demo学习

    1.编辑器相机同步 The Courtyard的demo中,会发现Scene视图和Game视图是编辑器下同步的,它通过一个CopySceneView.cs脚本实现 Scene视图和Game视图的显示效 ...

  8. python model对象转为dict数据

    在接口通讯里经常遇到这种需求,需要将对象的字段名和值均传至接口,user = User.objects.get(id=1)笨方法1,没错,我这样写过:di = {}di['username'] = u ...

  9. 开发板上使用core文件调试

    转载:http://www.nginx.cn/1521.html 如果开发板的操作系统也是linux,core调试方法依然适用.如果开发板上不支持gdb,可将开发板的环境(依赖库).可执行文件和cor ...

  10. aws在线技术峰会笔记-基于AWS的Devops最佳实践

    AWS CodeCommit AWS CodePipeline 可以和github集成 可以支持蓝绿部署 微服务架构, API Gateway进行转发