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 命令提供了操做虛擬機的一系列命令: