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完成的。php
下图为维基百科上的架构说明linux
KVM适合于服务端的虚拟化,图形显示能力差,可是CPU的利用效率高;virtualbox图形支持较好,支持2D、3D加速。
注意:KVM与VirtualBox有冲突,两者不能同时使用ubuntu
KVM可经过libvirt这个通用的虚拟机管理库进行管理,使用libvirt的客户端有:命令行下的virsh和GUI下的virt-manager。windows
CPU支持硬件虚拟化,有的须要在BIOS中的CPU设置启用虚拟化,在BIOS中的英文一般为virtualization,若是是disabled状态要改为enabled状态。
Linux上查看是否支持虚拟化的方式有:centos
$ lscpu
,输出的文本中带Virtualization: VT-x
或Virtualization: AMD-V
即说明支持硬件虚拟化,不然不支持$ grep -E "(vmx|svm|0xc0f)" --color=always /proc/cpuinfo
,若是没有匹配的内容则说明不支持硬件虚拟化,有匹配的内容说明支持硬件虚拟化本安装说明以CentOS 7为例
假定CentOS 7 ISO安装文件已下载,并存储于路径/home/kvm/iso/CentOS-7.0-1406-x86_64-Minimal.iso安全
1 |
[root@localhost ~]# yum -y install qemu-kvm libvirt virt-install bridge-utils |
安装完后,运行virsh -c qemu:///system list
,用于检查KVM是否安装成功bash
1 |
[root@localhost ~]# virsh -c qemu:///system list |
若是没有报错便是安装成功网络
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文件dom
1 |
[root@localhost ~]# cd /etc/sysconfig/network-scripts |
IPADDR0和GATEWAY0须要根据实际状况调整
配置完成后,须要运行systemctl restart network
重启网络
首先运行以下命令,查看kvm支持的guest虚拟机
1 |
[root@localhost ~]# virt-install --os-variant=list |
guest OS 以CentOS 7的安装,列表中没有centos7,用其上游发行版rhel7代替
运行以下命令安装
1 |
[root@localhost kvm]# virt-install --connect qemu:///system -n centos7_demo \ |
参数说明:
--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 |
[root@localhost ~]# virsh vncdisplay centos7_demo |
:0
表明第一个屏幕,VNC的默认链接端口为5900,:0
即端口5900,若是是:1
则端口是5901,:2
端口是5902,以此类推。支持VNC的客户端有TightVNC,TigerVNC,realvnc等。本文使用的是tigervnc。
开放防火墙访问vnc端口
1 |
[root@localhost ~]# firewall-cmd --zone=public --add-port=5900/tcp --permanent |
从另外一台支持图形化界面的主机链接到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 命令提供了操做虚拟机的一系列命令: