1.KVM虛擬化
1.1.虛擬化介紹
虛擬化技術指通過技術手段,將物理資源虛擬化成多個獨立運行的邏輯資源,以伺服器計算資源虛擬化為例,可以通過虛擬化技術,將一台物理伺服器虛擬成多個獨立運行、不相互干擾的虛擬主機。
虛擬化層(Hypervisor)通常是以內核驅動的形式提供,它運行於作業系統之上,在虛擬化層之上虛擬出來一個個虛擬主機,而虛擬主機多數以作業系統進程的形式存在,而針對虛擬主機的命令請求,虛擬化層或調用作業系統命令進行解釋執行,或透過作業系統直接操作硬體晶片進行命令執行。
典型的虛擬化工作層次如下圖所示。
圖1虛擬化工作層次
虛擬化有多種分類,包括全虛擬化、半虛擬化、作業系統虛擬化等,不同的虛擬化原理上略有差異,但本質上是相似的,這裡以全虛擬化為例。
全虛擬化就是上面介紹的在作業系統和硬體之間存在一個虛擬化層,由虛擬化層完整的模擬虛擬主機運行環境。
典型的全虛擬化包括VMware、IBM zSeries等,本文所講解的KVM也被認為是典型的全虛擬化技術。
1.2.KVM簡介
KVM從提出到應用時間並不算長,但是由於主流廠商的支持,以及KVM自身開源的特性,使得大量用戶開始熟悉並使用這一虛擬化技術。
從使用上講KVM運行於Linux作業系統這上,但是支持linux、windows等虛擬主機的製備與運行,在伺服器虛擬化應用方面,可面向大型IDC數據中心、企業級數據中心提供穩定的虛擬化支撐技術;在桌面虛擬化方面,可面向各類企事業單位、實驗室、教學環境提供穩定的虛擬桌面解決方案。
1.3.KVM主要特性
KVM在內存、存儲、驅動設備、性能等方面有比較好的特性,下面簡述其這些特性:
一、內存管理
KVM繼承了Linux的內存管理功能,其虛擬機內存管理相當於Linux 進程中內存管理,即可以在內存區域內以大頁面形式進行高性能交換,也可以磁碟文件的形式進行內存擴展。
KVM 支持來CPU晶片廠商最新的內存虛擬化功能,支持 Intel 的擴展頁面表 (EPT) 和 AMD 的快速虛擬化索引 (RVI),以實現更低的 CPU 利用率和更高的吞吐量。此外通過內存頁面共享技術,可以實現更高效的內存管理,這些技術名為內核同頁合併 (KernelSame-page Merging, KSM)。KSM 掃描每個虛擬機的內存,如果虛擬機擁有相同的內存頁面,KSM 將這些頁面合併到一個在虛擬機之間共享的頁面,僅存儲一個副本。如果一個來賓嘗試更改這個共享頁面,它將得到自己的專用副本。
二、存儲管理
KVM 可使用多種存儲協議來存儲虛擬機鏡像,如:本地磁碟(IDE、SCSI與SATA)、NAS、NFS、SAMBA/CIFS、iSCSI、FC SAN。
KVM 支持全局文件系統 (GFS2) 等共享文件系統上的虛擬機鏡像,以允許虛擬機鏡像在多個宿主之間共享或使用邏輯卷共享。虛擬主機磁碟鏡像支持瘦配置,支持通過僅在虛擬機需要時分配存儲空間,而不是提前分配整個存儲空間,以節約存儲空間。
KVM 的原生磁碟格式為 QCOW2,它多級快照、壓縮和加密。
三、遷移管理
KVM 支持冷遷移與熱遷移,特別是熱遷移可使虛擬主機在不同的物理宿主之間在線轉移而不中斷服務。熱遷移對用戶是透明的。
四、設備驅動程序
KVM 支持混合虛擬化,允許虛擬機使用優化的 I/O 接口而不使用模擬的設備,以提供網絡與塊設備的I/O性能。
KVM 支持半虛擬化驅動要求採用IBM 和 Red Hat 聯合 Linux 社區開發的VirtIO標準,它是一個與虛擬機管理程序獨立的、構建設備驅動程序的接口,允許為多個虛擬機管理程序使用一組相同的設備驅動程序,能夠實現更出色的虛擬主機互操作性。
五、性能和可伸縮性
KVM有極強的性能和可伸縮性,單虛擬主機最多支持16 個虛擬 CPU 、 256GB 內存,可運行於2565個特理CPU核、1TB以上內存的物理主機中。
2.KVM部署與安裝
2.1.軟硬體環境
常規的x86伺服器(32位或64位),要求伺服器的CPU晶片或支持AMD-V或支持Intel-VT等硬體虛擬化技術。
[root@kvm /]# cat /proc/cpuinfo | grep 'vmx smx' | less
flags : fpu vme de pse tscmsr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr ssesse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebsbts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitords_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt aeslahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid
KVM需要運行於Linux作業系統環境下,通常宿主機器是64位,KVM上面的虛擬主機可以是64位也可以是32位,如果宿主機器是32位,KVM上面的虛擬主機只能是32位。
2.2.安裝KVM及相關軟體
在Linux下通過yum命令可自動下載並安裝 KVM,操作如下:
[root@kvm /]#yum –y install kvm kmod-kvm qemukvm-qemu-img
安裝相關聯軟體包,如virt-viewer、virt-manager、libvirt、libvirt-python、python-virtinst等,命令如下:
[root@kvm /]# yum install virt-viewer virt-managerlibvirt libvirt-python python-virtinst
2.3.虛擬網絡
KVM自身沒有虛擬網絡的設置功能,主要依賴於Linux自帶的網絡工具來實現虛擬網絡搭建,常用的虛擬網絡是網橋、VLAN,常用的命令包括:brctl、ifconfig、vconfig、tunctl、route等。
情況下的multi-host配置模式。
2.3.1.brctl
brctl是一個Linux下的網橋專用工具,常見用法如下:
命令原型 | 示例 | 說明 |
brctl show | brctl show | 顯示已有網橋 |
brctl addbr <bridge> | brctl addbr br0 | 增加網橋br0 |
brctl delbr <bridge> | brctl delbr br0 | 刪除網橋br0 |
brctl addif <bridge> <device> | brctl addif br0 eth0 | 將接口eth0接到網橋br0 |
brctl delif <bridge> <device> | brctl delif br0 eth0 | 從網橋上刪除一個接口 |
2.3.2.橋接操作
常規的網橋操作是先查看物理網卡,去除網卡上已有的IP位址,建立網橋,將網橋綁定物理網卡,配置網橋的IP位址,命令如下所示:
[root@kvm /]# ifconfig -a |grep eth
eth0 Linkencap:Ethernet HWaddr 90:fb:a6:14:cd:42
[root@kvm /]# brctl addbr br0
[root@kvm /]#brctl addif br0 eth0
[root@kvm /]# ifconfig eth0 0.0.0.0
[root@kvm /]# ifconfig br0 192.168.1.51 up
此時查看網絡設備,可以發現多了一台網橋:
[root@kvm /]# ifconfig -a |grep Ethernet
br0 Linkencap:Ethernet HWaddr 2a:24:d3:aa:99:e7
eth0 Linkencap:Ethernet HWaddr 90:fb:a6:14:cd:42
另:如果想刪除網橋可以猜用如下辦法,即先停用網橋再執行刪除操作:
[root@kvm /]# brctl delbr br0
bridge br0 is still up; can't delete it
[root@kvm /]# ifconfig br0 down
[root@kvm /]# brctl delbr br0
為了方便用戶操作,這裡給出一個開機腳本,用於配置網橋:
[root@kvm /]#vi br0.sh
#!/bin/bash
# change eth0 to your network interface(eg. eth1)
ifconfig lo 127.0.0.1 up
if [ ! -z "`ifconfig -a | grep br0`" ]; then
ifconfig br0down
brctl delif br0eth0
brctl delbr br0
fi
brctl addbr br0
brctl addif br0 eth0
ifconfig eth0 0.0.0.0 up
ifconfig br0 192.168.1.51 up
route add default gw 192.168.1.1
exit 0
當然也可以寫到網卡的配置文件中,在/etc/sysconfig/network-scripts/目錄下建立ifcfg-br0(br0為網橋接口名稱),配置網橋0:
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.1.51
netmask 255.255.255.0
gateway 192.168.1.1
bridge_ports eth0
2.4.虛擬主機
2.4.1.kvm常用命令
kvm是虛擬主機創建與管理命令,其基本參數如下:
參數 | 示例 | 說明 |
-hda | -hda /data/windows.img | 指定windows.img作為硬碟鏡像 |
-cdrom | -hda /data/windows.iso | 指定windows.iso作為光碟鏡像 |
-boot | -boot c | 從硬體啟動 |
-boot d | 從光碟啟動 | |
-m | -m 512 | 分配512M內存給虛擬系統 |
-vnc | -vnc :0 | 作為vnc伺服器 |
-cpu | -cpu ? | 列出支持的CPU |
-cpu core2duo | 指定CPU為core2duo | |
-smp | -smp 2 | 指定虛擬機有2個CPU |
-net | -net nic | 為虛擬機網卡(默認為tap0) |
-net tap | 系統分配tap設備(默認為tap0) | |
-net nic -net tap | 將虛擬機的網卡eth0連接真機里的tap0 |
2.4.2.安裝作業系統
通過kvm-img生成鏡像文件:
[root@kvm /]# kvm-img create windows2003-x86.img 25G -f"vmdk"
通過kvm命令安裝系統:
[root@kvm /]# kvm -boot d -m 512-hda ~/kvm/windows2003-x86.img -cdrom~/software/wzmb2003.iso
運行系統:
[root@kvm /]#qemu- kvm -boot c -m 512 -hda~/kvm/windows2003-x86.img -net nic -net tap
可以發現多了一個網絡設備tap0,這是系統自動創建的。
[root@kvm /]# ifconfig -a |grep Ethernet
br0 Linkencap:Ethernet HWaddr 2a:24:d3:aa:99:e7
eth0 Linkencap:Ethernet HWaddr 90:fb:a6:14:cd:42
tap0 Linkencap:Ethernet HWaddr 2a:24:d3:aa:99:e7
在計算機網絡中,TUN與TAP是作業系統內核中的虛擬網絡設備。不同於普通靠硬體網路板卡實現的設備,這些虛擬的網絡設備全部用軟體實現,並向運行與作業系統上的軟體提供與硬體的網絡設備完全相同的功能。TAP 等同於一個乙太網設備,它操作第二層數據包如乙太網數據幀。TUN模擬了網絡層設備,操作第三層數據包比如IP數據封包。
作業系統通過TUN/TAP設備向綁定該設備的用戶空間的程序發送數據,反之,用戶空間的程序也可以像操作硬體網絡設備那樣,通過TNU/TAP設備發送數據。在後種情況下,TUN/TAP設備向作業系統的網絡棧投遞(或「注入」)數據包,從而模擬從外部接受數據的過程。
2.4.3.遠程登錄
如果虛擬機是linux,那麼就用ssh;如果是windows,那麼就用rdesktop。
[root@kvm /]# rdesktop -uusername -p passwd 192.168.1.52 -f &
用Ctrl-Alt-Enter可從全屏中切回來。