計算虛擬化就是在虛擬系統和底層硬件之間抽象出CPU和內存等,以供虛擬機使用。計算虛擬化技術需要模擬出一套操作系統的運行環境,在這個環境你可以安裝Windows也是可以安裝Linux,這些操作系統被稱作Guest OS。他們相互獨立,互不影響(相對的,因為當主機資源不足會出現競爭等問題,導致運行緩慢等問題)。
計算虛擬化可以將主機單個物理核虛擬出多個vcpu,這些vcpu本質上就是運行的進程,考慮到系統調度,所以并不是虛擬的核數越多越好;內存相似的,把物理機上面內存進行邏輯劃分出多個段,供不同的虛擬機使用,每個虛擬機看到的都是自己獨立的一個內存。除了這些還需要模擬網絡設備、BIOS等。這個虛擬化軟件叫做hypervisor,著名的有ESXI、xen、KVM等,通常分為兩種,第一種是直接部署到物理服務器上面的,
由于直接部署到裸機上面,hypervisor需要自帶各種硬件驅動,虛擬機的所有操作都需要經過hypervisor。還有另一種虛擬化hypervisor,以KVM最為流行(個人電腦上面安裝的virtualbox以及workstations也是),它們依賴與宿主機操作系統,這樣的好處就是可以充分利用宿主機的各種資源管理以及驅動,但效率上面會打一些折扣。下圖是KVM的在使用IO時候的流程圖。
當然也可以從全虛擬化、半虛擬化、硬件輔助虛擬化的角度去說,現在數據中心基本都是硬件輔助虛擬化了,全虛擬化就是完全靠軟件模擬、半虛擬需要修改操作讓其知道自己運行在虛擬環境中、硬件輔助由硬件為每個Guest OS提供一套寄存器、Guest OS可以直接運行在特權級,這樣提高效率。
雖然當前數據中心商用的虛擬化軟件仍然以VMware的ESXI為主,但在OpenStack的推動下,KVM正在慢慢追趕,并且KVM是開源的,下面簡單介紹一下KVM。KVM是基于內核的,從內核2.6以后就自帶了,可以運行在x86和power等主流架構上。 KVM主要是CPU和內存的虛擬化,其它設備的虛擬化和虛擬機的管理則需要依賴QEMU完成。一個虛擬機本質上就是一個進程,運行在QEMU-KVM進程地址空間,KVM(內核空間)和qemu(用戶空間)相結合一起向用戶提供完整的虛擬化環境。
2. 網絡虛擬化
網絡虛擬化是一種重要的網絡技術,該技術可在物理網絡上虛擬多個相互隔離的虛擬網絡,不依賴于底層物理連接,能夠動態變化網絡拓撲,提供多租戶隔離,從而使得不同用戶之間使用獨立的網絡資源切片變成可能,從而提高網絡資源利用率,實現彈性的網絡。這里面目前最為火熱的即軟件定義網絡(Software Defined Network, SDN),SDN的出現使得網絡虛擬化的實現更加靈活和高效,同時網絡虛擬化也成為SDN應用中的重量級應用。其核心技術OpenFlow通過將網絡設備控制面與數據面分離開來,從而實現了網絡流量的靈活控制,使網絡作為管道變得更加智能。
通過SDN實現網絡虛擬化包括物理網絡管理,網絡資源虛擬化和網絡隔離三部分。而這三部分內容往往通過專門的中間層軟件完成,我們稱之為網絡虛擬化平臺。虛擬化平臺需要完成物理網絡的管理和抽象虛擬化,并分別提供給不同的租戶。此外,虛擬化平臺還應該實現不同租戶之間的相互隔離,保證不同租戶互不影響。虛擬化平臺的存在使得租戶無法感知到網絡虛擬化的存在,也即虛擬化平臺可實現用戶透明的網絡虛擬化。
(1)虛擬化平臺
虛擬化平臺是介于數據網絡拓撲和租戶控制器之間的中間層。面向數據平面,虛擬化平面就是控制器;而面向租戶控制器,虛擬化平臺就是數據平面。所以虛擬化平臺本質上具有數據平面和控制層面兩種屬性。在虛擬化的核心層,虛擬化平臺需要完成物理網絡資源到虛擬資源的虛擬化映射過程。面向租戶控制器,虛擬化平臺充當數據平面角色,將模擬出來的虛擬網絡呈現給租戶控制器。從租戶控制器上往下看,只能看到屬于自己的虛擬網絡,而并不了解真實的物理網絡。而在數據層面的角度看,虛擬化平臺就是控制器,而交換機并不知道虛擬平面的存在。所以虛擬化平臺的存在實現了面向租戶和面向底層網絡的透明虛擬化,其管理全部的物理網絡拓撲,并向租戶提供隔離的虛擬網絡。
網絡虛擬化平臺示意圖
虛擬化平臺不僅可以實現物理拓撲到虛擬拓撲“一對一”的映射,也應該能實現物理拓撲“多對一”的映射。而由于租戶網絡無法獨占物理平面的交換機,所以本質上虛擬網絡實現了“一虛多”和“多虛一”的虛擬化。此處的“一虛多”是指單個物理交換機可以虛擬映射成多個虛擬租戶網中的邏輯交換機,從而被不同的租戶共享;“多虛一”是指多個物理交換機和鏈路資源被虛擬成一個大型的邏輯交換機。即租戶眼中的一個交換機可能在物理上由多個物理交換機連接而成。