虛擬化技術概述
筆記日期:2018-03-05
- 28.1 了解虛擬化
- 28.2 常見虛擬化軟件
- 28.3 虛擬化架構
- 28.4 KVM簡介
了解虛擬化
虛擬化簡單講,就是把一臺物理計算機虛擬成多臺邏輯計算機,每個邏輯計算機裏面可以運行不同的操作系統,相互不受影響,每個邏輯系統都是獨立的存在,這樣就可以充分利用物理硬件的資源,而且還可以自由分配資源。
虛擬化是一個廣義的術語,對於不同的人來說可能意味著不同的東西,這要取決他們所處的環境。在計算機科學領域中,虛擬化代表著對計算資源的抽象,而不僅僅局限於虛擬機的概念。例如對物理內存的抽象,產生了虛擬內存技術,使得應用程序認為其自身擁有連續可用的地址空間(Address Space),而實際上,應用程序的代碼和數據可能是被分隔成多個碎片頁或段),甚至被交換到磁盤、閃存等外部存儲器上,即使物理內存不足,應用程序也能順利執行。
虛擬化技術起源於20世紀60年代末,美國IBM公司當時開發了一套被稱作虛擬機監視器(Virtual Machine Monitor)的軟件,該軟件作為計算機硬件層上面的一層軟件抽象層,將計算機硬件虛擬分區成一個或多個虛擬機,並提供多用戶對大型計算機的同時、交互訪問。
虛擬化技術主要分為以下幾個大類 :
- 平臺虛擬化(Platform Virtualization),針對計算機和操作系統的虛擬化。
- 資源虛擬化(Resource Virtualization),針對特定的系統資源的虛擬化,比如內存、存儲、網絡資源等。
- 應用程序虛擬化(Application Virtualization),包括仿真、模擬、解釋技術等。
我們通常所說的虛擬化主要是指平臺虛擬化技術,通過使用控制程序(Control Program,也被稱為 Virtual Machine Monitor 或 Hypervisor),隱藏特定計算平臺的實際物理特性,為用戶提供抽象的、統一的、模擬的計算環境(稱為虛擬機)。虛擬機中運行的操作系統被稱為客戶機操作系統(Guest OS),運行虛擬機監控器的操作系統被稱為主機操作系統(Host OS),當然某些虛擬機監控器可以脫離操作系統直接運行在硬件之上(如 VMWARE 的 ESX 產品)。運行虛擬機的真實系統我們稱之為主機系統。
示意圖:
在之前虛擬化技術分為全虛擬化和半虛擬化,因為早期的CPU硬件不支持虛擬化,虛擬機上的操作系統(Guest OS)要想使用CPU資源,需要通過VMM來翻譯指令,這個過程比較耗費資源,這種虛擬化技術叫做全虛擬化(例如VMware Workstation)。半虛擬化技術通過修改Guest OS內核,讓Guest OS可以直接使用CPU資源,而不需要翻譯指令了,從而節省了資源,但修改內核比較雞肋(例如XEN),因為有些操作系統的內核是不開源的。後續CPU廠商直接支持虛擬化,不需要通過VMM翻譯指令了,就無所謂半虛擬化和全虛擬化了。
虛擬化技術的優點:
- 資源池——一個物理機的資源分配到了不同的虛擬機裏
- 很容易擴展——增加物理機或者虛擬機即可,因為虛擬機是可以復制的
- 很容易雲化——亞馬孫AWS,阿裏雲,谷歌雲等
虛擬化技術的局限性:
- 每一個虛擬機都是一個完整的操作系統,所以需要給其分配物理資源,當虛擬機數量增多時,操作系統本身消耗的資源勢必增多
- 虛擬化技術沒法解決運維環境和開發環境的矛盾,所以後來才出現了容器技術
關於虛擬化技術的更多內容,可參考以下文章:
- 虛擬化技術漫談
- 全虛擬化和半虛擬化的區別 cpu的ring0 ring1又是什麽概念?
- 三種虛擬化技術的技術差別圖解
常見虛擬化軟件
VMware系列,商業
- VMware Workstation,適合單機使用
- VMware Vsphere(VMware esxi),適合規模更大的場景
- VMware Fusion(Mac)
Xen
- 開源,支持半虛擬化
XenServer
- 商業,Ctirx收購Xen之後研發的,基於Xen的
KVM
- 開源 ,基於Linux內核模塊,目前KVM已經被紅帽收購了,大多數系統都傾向於使用KVM
Hyper-V
- 商業,微軟的產品,適合在windows服務器上用
Openvz
- 開源 ,輕量,基於Linux,虛擬機和宿主機共用一個內核,優點是一臺物理機可以虛擬化很多臺虛擬機,缺點是不穩定,物理機的內核奔潰,所有的虛擬機都會崩潰,早期vps供應商用得比較多
VirtualBox
- 開源 ,Sun公司開發 ,Oracle收購Sun之後,現在屬於Oracle
虛擬化架構
虛擬化技術有很多,不同的體系都有幾十種,但是虛擬化架構主要有兩種形式:宿主架構和裸金屬架構:
I型:虛擬機直接運行在系統硬件上,創建硬件全仿真實例,被稱為“裸機”,也稱為裸金屬架構。
II型:虛擬機運行在傳統操作系統上,同樣創建的是硬件全仿真實例,被稱為“托管”hypervisor。也稱為宿主架構。
Xen屬於I型,KVM屬於II型。
虛擬化架構是一個大話題,關於這方面的詳細內容可參考以下文章:
- 雲計算4種主流虛擬技術架構對比分析
KVM簡介
這裏只介紹KVM而不介紹其他虛擬化軟件的原因有兩點,一是我們大多數的服務器系統都是Linux內核的操作系統,而KVM是基於Linux內核的。二是KVM是開源、免費的,其他的例如VMware Vsphere、XenServer等都是商業收費的,而Hyper-V 又是Windows的,Openvz 又有局限性(與宿主共用內核,就無法安裝其他內核的虛擬機),穩定性也有待考究,VirtualBox又不適合大規模的虛擬化場景,所以最後就只剩下KVM了。
KVM是Kernel-based Virtual Machine的縮寫,意為基於內核的虛擬機。KVM是一個完全開源的系統虛擬化模塊,它所基於的是Linux內核,它把Linux內核變成了一個Hypervisor,自Linux 2.6.20之後集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,所以相對於Xen,其核心源碼很少。KVM目前已成為學術界的主流VMM之一。
最開始KVM是由以色列初創公司Qumranet開發,後來2008年9月RedHat公司收購了Qumranet,RedHat基於KVM的虛擬化解決方案叫做RHEV,不過RHEV是收費的。
KVM的虛擬化需要硬件支持(如Intel VT技術或者AMD V技術)。是基於硬件的完全虛擬化。而Xen早期則是基於軟件模擬的Para-Virtualization,新版本則是基於硬件支持的完全虛擬化。但Xen本身有自己的進程調度器,存儲管理模塊等,所以代碼較為龐大。廣為流傳的商業系統虛擬化軟件VMware ESX系列是基於軟件模擬的Full-Virtualization。
KVM在Linux操作系統裏面以進程的形式出現,由標準的Linux調度程序進行調度,這使得KVM能夠使用Linux內核的已有功能。但是只有一個KVM內核模塊還不能實現虛擬化的全部功能,就好比操作系統只有內核還不能成為一個完整的操作系統一樣。所以這就需要提到QEMU了,QEMU是一個開源的虛擬化軟件,純軟件,可以虛擬化所有的硬件,性能不強。而KVM基於QEMU開發了一個能夠運行在用戶空間的工具QEMU-KVM,KVM裏的磁盤、網絡設備等都是通過QEMU-KVM這個工具模擬出來的,所以KVM結合QEMU-KVM工具之後才算完整,KVM和QEMU-KVM通信是通過/dev/kvm實現的。其中libvirt是用來管理KVM虛擬機的API,其命令為virsh。
KVM架構圖:
虛擬化技術概述