CentOS 6.5安裝KVM虛擬化

來源:互聯網
上載者:User

標籤: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:

  • KVM是開源軟體,全稱是kernel-based virtual machine(基於核心的虛擬機器)。

  • 是x86架構且硬體支援虛擬化技術(如 intel VT 或 AMD-V)的Linux全虛擬化解決方案。

  • 它包含一個為處理器提供底層虛擬化 可載入的核心模組kvm.ko(kvm-intel.ko或kvm-AMD.ko)。

  • KVM還需要一個經過修改的QEMU軟體(qemu-kvm),作為虛擬機器上層控制和介面。

  • KVM能在不改變linux或windows鏡像的情況下同時運行多個虛擬機器,(它的意思是多個虛擬機器使用同一鏡像)並為每一個虛擬機器設定個人化硬體環境(網卡、磁碟、圖形卡……)。

  • 在主流的Linux核心,如2.6.20以上的核心均已包含了KVM核心。

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組件

KVM主要兩類組件組成:

◇/dev/kvm:管理虛擬機器的裝置節點,使用者空間的程式可通過其ioctl()系統調用集來完成虛擬機器的建立啟動等管理工作;它是一個字元裝置;其主要完成的操作包括:

建立虛擬機器;

為虛擬機器分配記憶體;

讀、寫VCPU的寄存器;

向VCPU注入中斷;

運行VCPU;

◇qemu進程:工作於使用者空間的組件,用於模擬PC機的I/O類硬體裝置;

    qemu全稱Quick Emulator。是獨立虛擬軟體,能獨立運行虛擬機器(根本不需要kvm)。kqemu是該軟體的加速軟體。kvm並不需要qemu進行虛擬處理,只是需要它的上層管理介面進行虛擬機器控制。虛擬機器依舊是由kvm驅動。


半虛擬化virtio組件

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/79/1E/wKioL1aJ4m_gHtXgAAB2JYuZmrU358.jpg" title="圖片1.jpg" alt="wKioL1aJ4m_gHtXgAAB2JYuZmrU358.jpg" />

    virtio半虛擬化驅動的方式,可以獲得很好的I/O效能,其效能幾乎可以達到和native(即:非虛擬化環境中的原生系統)差不多的I/O效能。所以,在使用KVM之時,如果宿主機核心和客戶機都支援virtio的情況下,一般推薦使用virtio達到更好的效能。當然,virtio的也是有缺點的,它必須要客戶機安裝特定的Virtio驅動使其知道是運行在虛擬化環境中,且按照Virtio的規定格式進行資料轉送,不過客戶機中可能有一些老的Linux系統不支援virtio和主流的Windows系統需要安裝特定的驅動才支援Virtio。不過,較新的一些Linux發行版(如RHEL 6.3、Fedora 17等)預設都將virtio相關驅動編譯為模組,可直接作為客戶機使用virtio,而且對於主流Windows系統都有對應的virtio驅動程式可供下載使用。

    virtio是對半虛擬化hypervisor中的一組通用類比裝置的抽象.該設定還允許hypervisor匯出一組通用的類比裝置,並通過一個通用的應用程式介面(API)讓它們變得可用.有了半虛擬化hypervisor之後,客體作業系統能夠實現一組通用的介面,在一組後端驅動程式之後採用特定的裝置類比.後端驅動程式不需要是通用的,因為它們只實現前端所需的行為。

KVM工具棧

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/79/20/wKiom1aJ4mXiC26oAAEjoQk443c231.jpg" title="圖片2.jpg" alt="wKiom1aJ4mXiC26oAAEjoQk443c231.jpg" />

二、KVM虛擬化平台構建

1、安裝準備

    查看你的硬體是否支援虛擬化。命令:

egrep ‘(vmx|svm)‘ /proc/cpuinfo

注意:

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

  • 我用的是VMware Workstation 10 ,並在虛擬機器的設定中開啟了CPU設定中的虛擬化引擎,選擇了 Intel VT-x/EPT 或 AMD-V/RVI(V) 這個選項;具體設定如:

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/79/1F/wKioL1aJ5SrhvuNpAADHq9wY-1s547.jpg" title="QQ20160104111616.jpg" alt="wKioL1aJ5SrhvuNpAADHq9wY-1s547.jpg" />

2、安裝KVM

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

[[email protected] ~]# modprobe kvm_intel[[email protected] ~]# lsmod |grep kvmkvm_intel              54285  0 kvm                   333172  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 是與該庫聯絡相當密切的。通過可以看出它的架構設計思想。

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/79/21/wKiom1aJ53uxzIvkAACEOQphDxo665.jpg" title="圖片1.jpg" alt="wKiom1aJ53uxzIvkAACEOQphDxo665.jpg" />

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

4、安裝KVM所需組件

yum install -y qemu-kvm libvirt virt-manager

    安裝完成後啟動 libvirtd 服務:

service libvirtd start

    會自動啟動一個橋裝置,這相當於VMware Workstation中的host-only僅主機的網路裝置;

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/79/21/wKiom1aJ6onwQ5YqAAGL0E-dHvQ836.jpg" title="QQ20160104114355.jpg" alt="wKiom1aJ6onwQ5YqAAGL0E-dHvQ836.jpg" />

    使用橋接器管理命令查看:

# brctl showbridge namebridge idSTP enabledinterfacesvirbr08000.5254006d26bbyesvirbr0-nic

    像 VMware Workstation 中我們需要建立物理橋接裝置,可以使用 virsh 建立橋裝置關連網卡到橋接裝置上:

    需要將 NetworkManager 服務關閉,開機啟動也關閉,然後在建立橋接裝置及關連網卡到橋接裝置上:

virsh iface-bridge eth0 br0

    查看橋接裝置及其他網路裝置運行情況:

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/79/22/wKiom1aJ62KwA8V2AAILlQPUpiE282.jpg" title="QQ20160104114732.jpg" alt="wKiom1aJ62KwA8V2AAILlQPUpiE282.jpg" />

    至此,我們的虛擬化平台就構建完畢,下面就開始在 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-kvm實現。

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、軟碟機裝置、光碟機裝置及硬體裝置等。

-name name:設定虛擬機器名稱;-M machine:指定要類比的主控件類型,如Standard PC、ISA-only PC或Intel-Mac等,可以使用“qemu-kvm -M ?”擷取所支援的所有類型;-m megs:設定虛擬機器的RAM大小;-cpu model:設定CPU模型,如coreduo、qemu64等,可以使用“qemu-kvm -cpu ?”擷取所支援的所有模型;-smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:設定類比的SMP架構中CPU的個數等、每個CPU的核心數及CPU的socket數目等;PC機上最多可以類比255顆CPU;maxcpus用於指定熱插拔的CPU個數上限;-numa opts:指定類比多節點的numa裝置;-fda file-fdb file:使用指定檔案(file)作為磁碟片鏡像,file為/dev/fd0表示使用物理軟碟機;-hda file-hdb file-hdc file-hdd file:使用指定file作為硬碟鏡像;-cdrom file:使用指定file作為CD-ROM鏡像,需要注意的是-cdrom和-hdc不能同時使用;將file指定為/dev/cdrom可以直接使用物理光碟機;-drive option[,option[,option[,...]]]:定義一個硬碟裝置;可用子選項有很多。  file=/path/to/somefile:硬體映像檔案路徑;  if=interface:指定硬碟裝置所串連的介面類型,即控制器類型,如ide、scsi、sd、mtd、floppy、pflash及virtio等;  index=index:設定同一種控制器類型中不同裝置的索引號,即標識號;  media=media:定義介質類型為硬碟(disk)還是光碟片(cdrom);  snapshot=snapshot:指定當前硬碟裝置是否支援快照功能:on或off;  cache=cache:定義如何使用物理機緩衝來訪問塊資料,其可用值有none、writeback、unsafe和writethrough四個;  format=format:指定映像檔案的格式,具體格式可參見qemu-img命令;-boot [order=drives][,once=drives][,menu=on|off]:定義啟動裝置的引導次序,每種裝置使用一個字元表示;不同的架構所支援的裝置及其表示字元不盡相同,在x86 PC架構上,a、b表示軟碟機、c表示第一塊硬碟,d表示第一個光碟機裝置,n-p表示網路介面卡;預設為硬碟裝置;-boot order=dc,once=d


















本文出自 “小小水滴” 部落格,請務必保留此出處http://wangzan18.blog.51cto.com/8021085/1731324

CentOS 6.5安裝KVM虛擬化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.