之前介紹了使用WebVirtMgr或Openstack來部署及管理kvm虛擬機,下面簡單介紹centos7.4下使用virt-manager部署及管理kvm虛擬機的做法:
0)KVM是什么
KVM(Kernel-based Virtual Machine, 即內核級虛擬機) 是一個開源的系統虛擬化模塊。它使用Linux自身的調度器進行管理,所以相對於Xen,其核心 源碼很少。目前KVM已成為學術界的主流VMM之一,它包含一個為處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko 或 kvm-amd.ko)。kvm 還需要一個經過修改的QEMU 軟件(qemu-kvm),作為虛擬機上層控制和界面。KVM的虛擬化需要硬件支持(如 Intel VT技術或者AMD V技術)。是基於硬件的 完全虛擬化。 KVM可以運行多個其本身運行未改動的鏡像的虛擬機,例如Windows,Mac OS X ,每個虛擬機都有各自的虛擬硬件,比如網卡、硬盤核圖形適配 器等。 KVM和QEMU的關系 QEMU是個獨立的虛擬化解決方案,從這個角度它並不依賴KVM。而KVM是另一套虛擬化解決方案,不過因為這個方案實際上只實現了內核中對處理器(Intel VT) , AMD SVM)虛擬化特性的支持,換言之,它缺乏設備虛擬化以及相應的用戶空間管理虛擬機的工具,所以它借用了QEMU的代碼並加以精簡,連同KVM一起構成了 另一個獨立的虛擬化解決方案:KVM+QEMU。
1)kvm相關安裝包及其作用
qemu-kvm 主要的KVM程序包 python-virtinst 創建虛擬機所需要的命令行工具和程序庫 virt-manager GUI虛擬機管理工具 virt-top 虛擬機統計命令 virt-viewer GUI連接程序,連接到已配置好的虛擬機 libvirt C語言工具包,提供libvirt服務 libvirt-client 虛擬客戶機提供的C語言工具包 virt-install 基於libvirt服務的虛擬機創建命令 bridge-utils 創建和管理橋接設備的工具
2)centos7安裝VNC環境
請參考:http://www.cnblogs.com/kevingrace/p/5821450.html
3)安裝kvm
1)檢查cpu是否支持虛擬化
[root@kevin ~]# grep vmx /proc/cpuinfo
如果有vmx信息輸出,就說明支持VT;如果沒有任何的輸出,說明你的cpu不支持,將無法使用KVM虛擬機。
2)確保BIOS里開啟虛擬化功能,即查看是否加載KVM模塊
[root@kevin ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
=========================================================
如果沒有加載,運行以下命令:
[root@kevin ~]# modprobe kvm
[root@kevin ~]# modprobe kvm-intel
[root@kevin ~]# lsmod | grep kvm
kvm_intel 170086 0
kvm 566340 1 kvm_intel
irqbypass 13503 1 kvm
=========================================================
內核模塊導出了一個名為/dev/kvm的設備,這個設備將虛擬機的的地址空間獨立於內核或者任何應用程序的地址空間。
[root@kevin ~]# ll /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 1月 29 11:56 /dev/kvm
3)橋接網絡
如果沒有brctl命令(用來管理網橋的工具),則需要安裝bridge-utils ,
[root@kevin ~]# yum -y install bridge-utils
[root@kevin ~]# systemctl restart network
配置KVM的網橋模式
[root@kevin ~]# cd /etc/sysconfig/network-scripts/
[root@openstack network-scripts]# cp ifcfg-eno1 ifcfg-br0
[root@openstack network-scripts]# cat ifcfg-br0
TYPE="Bridge" //這一行修改為Bridge
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="br0" //修改設備名稱為br0
#UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0" //這一行注釋
DEVICE="br0" //修改設備為br0
ONBOOT="yes"
IPADDR="192.168.10.210"
PREFIX="24"
GATEWAY="192.168.10.1"
DNS1="8.8.8.8"
[root@openstack network-scripts]# cat ifcfg-eno1
TYPE="Ethernet"
BRIDGE=br0 //添加這一行
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eno1"
UUID="fdbad04f-dae3-440e-8a8b-01d6a7bc9fe0"
DEVICE="eno1"
ONBOOT="yes"
#IPADDR="192.168.10.210" //注釋掉這幾行
#PREFIX="24"
#GATEWAY="192.168.10.1"
#DNS1="8.8.8.8"
重啟網卡服務
[root@openstack network-scripts]# systemctl restart network
查看網卡
[root@openstack network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0894ef518b22 no eno1
virbr0 8000.52540095d7c2 yes virbr0-nic
查看ip信息
[root@openstack network-scripts]# ifconfig |head -20
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.210 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::a94:efff:fe51:8b22 prefixlen 64 scopeid 0x20<link>
ether 08:94:ef:51:8b:22 txqueuelen 1000 (Ethernet)
RX packets 856 bytes 52981 (51.7 KiB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 120 bytes 23450 (22.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 08:94:ef:51:8b:22 txqueuelen 1000 (Ethernet)
RX packets 10077 bytes 793083 (774.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1184 bytes 228415 (223.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16
eno2: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 08:94:ef:51:8b:23 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
[root@openstack network-scripts]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=2.08 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=1.80 ms
........
4)安裝libvirt及kvm
libvirt是管理虛擬機的API庫,不僅支持KVM虛擬機,也可以管理Xen等方案下的虛擬機。
[root@kevin ~]# yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64 libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64
libvirt-java.noarch libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64 dbus-devel virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst
由於要用virt-manager圖形化安裝虛擬機,所以還需要安裝X-window(這個在前面部署VNC環境里就已經安裝了)
[root@kevin ~]# yum groupinstall "X Window System"
安裝中文字符,解決界面亂碼問題
[root@kevin ~]# yum install -y dejavu-lgc-sans-fonts
[root@kevin ~]# yum groupinstall -y "Fonts"
啟用libvirt
[root@kevin ~]# systemctl enable libvirtd
[root@kevin ~]# systemctl start libvirtd
4)使用virt-manager管理kvm(通過VNC連接服務器)
提前將ISO系統鏡像存放到服務器的一個目錄里,比如/data/iso [root@openstack ~]# mkdir /data/iso [root@openstack ios]# ll 總用量 3356384 -rw-r--r--. 1 qemu qemu 3436937216 1月 29 11:41 win-server2008_R2.iso






5)解決KVM虛擬機在使用vnc連接時鼠標不同步的問題
在VNC界面中感覺virt-manager管理的虛擬機界面總是鼠標跟不上,指到哪兒也看不出來,界面上一直顯示press control_l+a/t_l來移動鼠標!十分郁悶! 想要修改鼠標和宿主機界面同步方法如下: [root@openstack ~]# cd /etc/libvirt/qemu [root@openstack qemu]# ls networks test-win2008.xml [root@openstack qemu]# cp test-win2008.xml /opt/ [root@openstack qemu]# vim test-win2008.xml //在<devices>標簽中添加下面這段配置 <devices> ...... <input type='tablet' bus='usb'/> //即添加這句話即可! ...... </devices> [root@openstack qemu]# virsh define /etc/libvirt/qemu/test-win2008.xml 定義域 test-win2008(從 /etc/libvirt/qemu/test-win2008.xml) 然后重啟虛擬機后,發現虛擬機中的鼠標就會好事了,打開VNC查看虛擬機界面后默認情況下虛擬機中的鼠標指針和實體機的鼠標指針就是重合的,且兩者運動速度也是同步的, 這下就徹底解決了鼠標指針漂移/不同步的情況了!
6)重定向USB設備(即將宿主機上的USB設備指定到目標虛擬機上)。適合掛載銀行前置機設備!
先將USB設備插到宿主機上,接着在virt-manager界面里打開虛擬機,然后虛擬機界面上欄里打開"虛擬機"->"重定向USB設備(R)"。(特別注意:如下選擇將usb設備掛載到虛擬機上后,不要關閉這個掛載界面,否則usb掛載動作就會結束!)


查看虛擬機,發現指定的USB設備已經掛載到該虛擬機上了!

如果要卸載該虛擬機上掛載的這個USB設備,即在"重定向設備usb(R)"里將這個USB設備去掉,然后"確定"即可!


kvm虛擬機日常操作命令梳理:http://www.cnblogs.com/kevingrace/p/5570504.html
