KVM虛擬化技術


KVM虛擬化技術

Qemu-kvm創建和管理虛擬機

一.KVM簡介

KVM(名稱來自英語:Kernel-basedVirtual Machine的縮寫,即基於內核的虛擬機),是一種用於Linux內核中的虛擬化基礎設施,可以將Linux內核轉化為一個hypervisor。KVM在2007年2月被導入Linux 2.6.20核心中,以可加載核心模塊的方式被移植到FreeBSD及illumos上。

KVM在具備Intel VT或AMD-V功能的x86平台上運行。它也被移植到S/390,PowerPC與IA-64平台上。在Linux內核3.9版中,加入ARM架構的支持。

關於KVM:

1).KVM是開源軟件,全稱是kernel-based virtual machine(基於內核的虛擬機)。
2).是x86架構且硬件支持虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。
3).它包含一個為處理器提供底層虛擬化 可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
4).KVM還需要一個經過修改的QEMU軟件(qemu-kvm),作為虛擬機上層控制和界面。
5).KVM能在不改變linux或windows鏡像的情況下同時運行多個虛擬機,(它的意思是多個虛擬機使用同一鏡像)並為每一個虛擬機配置個性化硬件環境(網卡、磁盤、圖形適配器……)。
6).在主流的Linux內核,如2.6.20以上的內核均已包含了KVM核心。

KVM 與 vbox的區別:
vbox 是由 qemu 改寫而成,包含大量qemu 代碼。

1).可以使用於"不支持"虛擬化技術的cpu。
2).值得說的一點:vbox 在圖形方面比較好,能進行2D 3D加速;但cpu控制不理想(估計是因為圖形支持的緣故);操作上有獨立的圖形界面,易於上手。

kvm 是linux內核包含的東西,使用qemu作為上層管理(命令行)。

1).要求cpu 必須支持虛擬化。
2).性能:作為服務器很好,可是圖形能力十分的差。即使放電影,圖像也是像刷油漆一樣,一層一層的。
3).cpu使用率控制很好。
4).控制上比較簡潔,功能比較豐富:比如使用“無敵功能”所有更改指向內存,你的鏡像永遠保持干凈。“母鏡像”功能讓你擁有n個獨立快照點。還有很多參數。另外,kvm作為內核級的虛擬機,剛開始發展關注的公司比較多——但是還沒有達到商業應用的水平。

總體而言:在支持虛擬化的情況下,vbox 和 kvm 的性能差不多,主要是面向對象不同:kvm適用於服務器,vbox適用於桌面應用。

qemu 全稱Quick Emulator。是獨立虛擬軟件,能獨立運行虛擬機(根本不需要kvm)。kqemu是該軟件的加速軟件。kvm並不需要qemu進行虛擬處理,只是需要它的上層管理界面進行虛擬機控制。虛擬機依舊是由kvm驅動。所以,大家不要把概念弄錯了,盲目的安裝qemu和kqemu。qemu使用模擬器

KVM內存管理
KVM繼承了Linux系統管理內存的諸多特性,比如,分配給虛擬使用的內存可以被交換至交換空間、能夠使用大內存頁以實現更好的性能,以及對NUMA的支持能夠讓虛擬機高效訪問更大的內存空間等。
KVM基於Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技術可以支持更新的內存虛擬功能,這可以降低CPU的占用率,並提供較好的吞吐量。
此外,KVM還借助於KSM(Kernel Same-pageMerging)這個內核特性實現了內存頁面共享。KSM通過掃描每個虛擬機的內存查找各虛擬機間相同的內存頁,並將這些內存頁合並為一個被各相關虛擬機共享的單獨頁面。在某虛擬機試圖修改此頁面中的數據時,KSM會重新為其提供一個新的頁面副本。實踐中,運行於同一台物理主機上的具有相同GuestOS的虛擬機之間出現相同內存頁面的概率是很的,比如共享庫、內核或其它內存對象等都有可能表現為相同的內存頁,因此,KSM技術可以降低內存占用進而提高整體性能。

相關連接:
KVM的官方地址:http://www.linux-kvm.org/page/Main_Page
KVM的Howto文檔:http://www.linux-kvm.org/page/HOWTO
Kqemu源碼地址:http://sourceforge.net/projects/kqemu/
Qemu下載地址:http://wiki.qemu.org/Main_Page

二.KVM虛擬化平台構建

1.安裝准備
查看你的硬件是否支持虛擬化。命令:

#egrep '(vmx|svm)' /proc/cpuinfo

 

enter description here

vmx.png

 

注意:要有 vmx 或 svm 的標識才行。總的說來,AMD在虛擬化方面作得更好一些。

2.安裝KVM
由於Linux內核已經將KVM收錄了,在安裝系統時已經加入了KVM,我們只需要在命令行模式下啟用KVM即可:
啟用KVM模塊

modprobe kvm

功能區分intel/amd的啟用:

  1. modpobe kvm-intel 
  2. lsmod |grep kvm 
  3. kvm_intel 55496 0 
  4. kvm 337772 1 kvm_intel 

3.KVM虛擬機創建和管理所依賴的組件介紹
KVM虛擬機的創建依賴qemu-kvm:
雖然kvm的技術已經相當成熟而且可以對很多東西進行隔離,但是在某些方面還是無法虛擬出真實的機器。比如對網卡的虛擬,那這個時候就需要另外的技術來做補充,而qemu-kvm則是這樣一種技術。它補充了kvm技術的不足,而且在性能上對kvm進行了優化。

我們還可以使用virt-manager,virt-viewer來管理虛擬機;

我們在創建和管理KVM虛擬機時還需要libvirt這個重要的組件:

它是一系列提供出來的庫函數,用以其他技術調用,來管理機器上的虛擬機。包括各種虛擬機技術,kvm、xen與lxc等,都可以調用libvirt提供的api對虛擬機進行管理。有這么多的虛擬機技術,它為何能提供這么多的管理功能那。是因為它的設計理念,它是面向驅動的架構設計。對任何一種虛擬機技術都開發設計相對於該技術的驅動。這樣不同虛擬機技術就可以使用不同驅動,而且相互直接不會影響,方便擴展。而且libvirt提供了多種語言的編程接口,可以直接通過編程,調用libvirt提供的對外接口實現對虛擬機的操作。如今流行的雲計算中的IaaS是與該庫聯系相當密切的。通過下圖可以看出它的架構設計思想。

 

enter description here

kvm.jpg

 

  1. 從該圖可以看出,在libvirtapi之上會有很多個driver,對於每一種虛擬機技術都會有一種driver,用來充當該虛擬機技術與libvirt之間的包裝接口。如此設計就可以避免libvirt需要設計各種針對不同虛擬機技術的接口,它主要關注底層的實現,提供對外接口調用,而不同的虛擬機技術通過調用libvirt提供的接口來完成自己所需要的功能。 

4.安裝KVM所需組件

yum源提供了,直接安裝:

  1. yum install -y qemu-kvm libvirt virt-manager 

安裝完成后啟動libvirtd服務:

  1. [root@luckyall network-scripts]# service libvirtd start 
  2. Starting libvirtd daemon: libvirtd: relocation error: libvirtd: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference 
  3. [FAILED] 
  4. [root@luckyall network-scripts]# Starting libvirtd daemon: libvirtd: relocation error: libvirtd: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference 

既然有個報錯。百度下發現需要升級下組件

  1. [root@luckyall network-scripts]# yum -y upgrade device-mapper-libs 

然后重新啟動libvirtd發現已經正常

 

enter description here

ifconfig.png

 

使用網橋管理命令查看:

  1. [root@luckyall ~]# brctl show 
  2. bridge name bridge id STP enabled interfaces 
  3. virbr0 8000.5254008a9355 yes virbr0-nic 

像VMware Workstation中我們需要創建物理橋接設備,可以使用virsh創建橋設備關聯網卡到橋接設備上:
需要將NetworkManager服務關閉,開機啟動也關閉:

  1. chkconfig NetworkManager off 
  2. service NetworkManager stop 

然后在創建橋接設備及關聯網卡到橋接設備上:

  1. virsh iface-bridge eth0 br0 

 

enter description here

br0.png

 

查看橋接設備:

 

enter description here

brctrshow.png

 

至此,我們的虛擬化平台就構建完畢,下面就開始在KVM虛擬化平台上創建和管理虛擬機,我們先使用qemu-kvm來創建和管理虛擬機。

三、使用qemu-kvm管理KVM虛擬機

1.Qemu-kvm介紹
Qemu是一個廣泛使用的開源計算機仿真器和虛擬機。當作為仿真器時,可以在一種架構(如PC機)下運行另一種架構(如ARM)下的操作系統和程序。而通過動態轉化,其可以獲得很高的運行效率。當作為一個虛擬機時,qemu可以通過直接使用真機的系統資源,讓虛擬系統能夠獲得接近於物理機的性能表現。qemu支持xen或者kvm模式下的虛擬化。當用kvm時,qemu可以虛擬x86、服務器和嵌入式powerpc,以及s390的系統。

QEMU 當運行與主機架構相同的目標架構時可以使用KVM。例如,當在一個x86兼容處理器上運行 qemu-system-x86 時,可以利用 KVM 加速——為宿主機和客戶機提供更好的性能。

Qemu有如下幾個部分組成:

處理器模擬器(x86、PowerPC和Sparc);
仿真設備(顯卡、網卡、硬盤、鼠標等);
用於將仿真設備連接至主機設備(真實設備)的通用設備;
模擬機的描述信息;
調試器;
與模擬器交互的用戶接口;

基於libvirt的工具如virt-manager和virt-install提供了非常便捷的虛擬機管理接口,但它們事實上上經二次開發后又封裝了qemu-kvm的工具。因此,直接使用qemu-kvm命令也能夠完成此前的任務。

2.Qemu-kvm的使用幫助

在RHEL6/CentOS6上,qemu-kvm位於/usr/libexec目錄中。由於此目錄不屬於PATH環境變量,故無法直接使用,這樣也阻止了可以直接使用qemu作為創建並管理虛擬機。如若想使用qemu虛擬機,可以通過將/usr/libexec/qemu-kvm鏈接為/usr/bin/qemu實現。

  1. ln -sv /usr/libexec/qemu-kvm /usr/bin/qemu-kvm 

qemu-kvm命令使用格式為“qemu-kvm [options] [disk_image]”,其選項非常多,不過,大致可分為如下幾類。

標准選項;
USB選項;
顯示選項;
i386平台專用選項;
網絡選項;
字符設備選項;
藍牙相關選項;
Linux系統引導專用選項;
調試/專家模式選項;
PowerPC專用選項;
Sparc32專用選項;

qemu-kvm的標准選項
qemu-kvm的標准選項主要涉及指定主機類型、CPU模式、NUMA、軟驅設備、光驅設備及硬件設備等。

  1. -name name:設定虛擬機名稱; 
  2. -M machine:指定要模擬的主機類型,如Standard PC、ISA-only PC或Intel-Mac等,可以使用“qemu-kvm -M ?”獲取所支持的所有類型; 
  3. -m megs:設定虛擬機的RAM大小; 
  4. -cpu model:設定CPU模型,如coreduo、qemu64等,可以使用“qemu-kvm -cpu ?”獲取所支持的所有模型; 
  5. -smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:設定模擬的SMP架構中CPU的個數等、每個CPU的核心數及CPU的socket數目等;PC機上最多可以模擬255顆CPU;maxcpus用於指定熱插入的CPU個數上限; 
  6. -numa opts:指定模擬多節點的numa設備; 
  7. -fda file 
  8. -fdb file:使用指定文件(file)作為軟盤鏡像,file為/dev/fd0表示使用物理軟驅; 
  9. -hda file 
  10. -hdb file 
  11. -hdc file 
  12. -hdd file:使用指定file作為硬盤鏡像; 
  13. -cdrom file:使用指定file作為CD-ROM鏡像,需要注意的是-cdrom和-hdc不能同時使用;將file指定為/dev/cdrom可以直接使用物理光驅; 
  14. -drive option[,option[,option[,...]]]:定義一個硬盤設備;可用子選項有很多。 
  15. file=/path/to/somefile:硬件映像文件路徑; 
  16. if=interface:指定硬盤設備所連接的接口類型,即控制器類型,如ide、scsi、sd、mtd、floppy、pflash及virtio等; 
  17. index=index:設定同一種控制器類型中不同設備的索引號,即標識號; 
  18. media=media:定義介質類型為硬盤(disk)還是光盤(cdrom); 
  19. snapshot=snapshot:指定當前硬盤設備是否支持快照功能:on或off; 
  20. cache=cache:定義如何使用物理機緩存來訪問塊數據,其可用值有none、writeback、unsafe和writethrough四個; 
  21. format=format:指定映像文件的格式,具體格式可參見qemu-img命令; 
  22. -boot [order=drives][,once=drives][,menu=on|off]:定義啟動設備的引導次序,每種設備使用一個字符表示;不同的架構所支持的設備及其表示字符不盡相同,在x86 PC架構上,a、b表示軟驅、c表示第一塊硬盤,d表示第一個光驅設備,n-p表示網絡適配器;默認為硬盤設備; 
  23. -boot order=dc,once=d 

qemu-kvm的顯示選項
顯示選項用於定義虛擬機啟動后的顯示接口相關類型及屬性等。

  1. -nographic:默認情況下,qemu使用SDL來顯示VGA輸出;而此選項用於禁止圖形接口,此時,qemu類似一個簡單的命令行程序,其仿真串口設備將被重定向到控制台; 
  2. -curses:禁止圖形接口,並使用curses/ncurses作為交互接口; 
  3. -alt-grab:使用Ctrl+Alt+Shift組合鍵釋放鼠標; 
  4. -ctrl-grab:使用右Ctrl鍵釋放鼠標; 
  5. -sdl:啟用SDL; 
  6. -spice option[,option[,...]]:啟用spice遠程桌面協議;其有許多子選項,具體請參照qemu-kvm的手冊; 
  7. -vga type:指定要仿真的VGA接口類型,常見類型有: 
  8. cirrus:Cirrus Logic GD5446顯示卡; 
  9. std:帶有Bochs VBI擴展的標准VGA顯示卡; 
  10. vmware:VMWare SVGA-II兼容的顯示適配器; 
  11. qxl:QXL半虛擬化顯示卡;與VGA兼容;在Guest中安裝qxl驅動后能以很好的方式工作,在使用spice協議時推薦使用此類型; 
  12. none:禁用VGA卡; 
  13. -vnc display[,option[,option[,...]]]:默認情況下,qemu使用SDL顯示VGA輸出;使用-vnc選項,可以讓qemu監聽在VNC上,並將VGA輸出重定向至VNC會話;使用此選項時,必須使用-k選項指定鍵盤布局類型;其有許多子選項,具體請參照qemu-kvm的手冊; 

i386平台專用選項

  1. -no-acpi:禁用ACPI功能,GuestOS與ACPI出現兼容問題時使用此選項; 
  2. -balloon none:禁用balloon設備; 
  3. -balloon virtio[,addr=addr]:啟用virtio balloon設備; 

網絡屬性相關選項
網絡屬性相關選項用於定義網絡設備接口類型及其相關的各屬性等信息。這里只介紹nic、tap和user三種類型網絡接口的屬性,其它類型請參照qemu-kvm手冊。

  1. -net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:創建一個新的網卡設備並連接至vlan n中;PC架構上默認的NIC為e1000,macaddr用於為其指定MAC地址,name用於指定一個在監控時顯示的網上設備名稱;emu可以模擬多個類型的網卡設備,如virtio、i82551、i82557b、i82559er、ne2k_isa、pcnet、rtl8139、e1000、smc91c111、lance及mcf_fec等;不過,不同平台架構上,其支持的類型可能只包含前述列表的一部分,可以使用“qemu-kvm -net nic,model=?”來獲取當前平台支持的類型; 
  2. -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]:通過物理機的TAP網絡接口連接至vlan n中,使用script=file指定的腳本(默認為/etc/qemu-ifup)來配置當前網絡接口,並使用downscript=file指定的腳本(默認為/etc/qemu-ifdown)來撤消接口配置;使用script=no和downscript=no可分別用來禁止執行腳本; 
  3. -net user[,option][,option][,...]:在用戶模式配置網絡棧,其不依賴於管理權限;有效選項有: 
  4. vlan=n:連接至vlan n,默認n=0; 
  5. name=name:指定接口的顯示名稱,常用於監控模式中; 
  6. net=addr[/mask]:設定GuestOS可見的IP網絡,掩碼可選,默認為10.0.2.0/8; 
  7. host=addr:指定GuestOS中看到的物理機的IP地址,默認為指定網絡中的第二個,即x.x.x.2; 
  8. dhcpstart=addr:指定DHCP服務地址池中16個地址的起始IP,默認為第16個至第31個,即x.x.x.16-x.x.x.31; 
  9. dns=addr:指定GuestOS可見的dns服務器地址;默認為GuestOS網絡中的第三個地址,即x.x.x.3; 

3.使用qemu-kvm安裝虛擬機Guest OS

測試安裝windows 2003
1)下載系統鏡像文件,我這里有個windows 2003系統,我們來試着安裝。
創建虛擬機的磁盤文件存放目錄:

  1. [root@luckyall ~]# mkdir /kvm/images -pv 
  2. mkdir: created directory `/kvm' 
  3. mkdir: created directory `/kvm/images' 

創建虛擬磁盤文件:

  1. [root@luckyall images]# qemu-img create -o preallocation=metadata -f qcow2 /kvm/images/win2003.qcow2 10G 
  2. Formatting '/kvm/images/win2003.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 preallocation='metadata'  
  3. [root@luckyall images]# ll -h /kvm/images/ 
  4. total 1.8
  5. -rw-r--r--. 1 root root 11G Dec 19 23:46 win2003.qcow2 

2)在kvm平台安裝vnc-server和tigervnc這個vncviewer

此處不做介紹
參考我的博客:http://blog.sina.com.cn/s/blog_6e470cb00102wazp.html

  1. [root@luckyall ~]# qemu-kvm -cpu host -smp 1 -name win2003 -m 512 -drive file=/kvm/images/win2003.qcow2,if=ide,format=qcow2 -drive file=/root/Downloads/win2003.iso,media=cdrom -boot dc -usbdevice tablet 
  2. VNC server running on `::1:5900' 

我們到圖形界面上進行連接:
#vncviewer :5900

 

enter description here

qemu-kvm.png

 

后續直至安裝完成即可。

也可以使用virt-manager創建和管理虛擬機,這個是圖形管理工具,再次就不再多介紹;
可參考:http://sohudrgon.blog.51cto.com/3088108/1613872


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM