深入理解虛擬化
-
虛擬化管理程序Hypervisor(VMM),位于虛擬機(jī)與底層硬件設(shè)備之間的虛擬層,直接運(yùn)行于硬件設(shè)備之上,負(fù)責(zé)對硬件資源進(jìn)行抽象,為上層虛擬機(jī)提供運(yùn)行環(huán)境所需資源,并使每個(gè)虛擬機(jī)都能夠互不干擾、相互獨(dú)立地運(yùn)行于同一個(gè)系統(tǒng)中。
-
計(jì)算虛擬化,針對CPU和內(nèi)存資源虛擬化技術(shù)。
-
網(wǎng)絡(luò)虛擬化,針對網(wǎng)絡(luò)鏈路資源虛擬化技術(shù)。
-
IO虛擬化,針對IO資源虛擬化技術(shù)。
-
存儲虛擬化,針對磁盤存儲資源虛擬化技術(shù)。
|
全虛擬化
|
硬件輔助虛擬化
|
操作系統(tǒng)協(xié)助/半虛擬化
|
實(shí)現(xiàn)技術(shù) |
二進(jìn)制翻譯,BT 和直接執(zhí)行
|
遇到特權(quán)指令轉(zhuǎn)到root模式執(zhí)行
|
Hyper call
|
客戶操作系統(tǒng)修改/兼容性 |
無需修改客戶操作系統(tǒng),最佳兼容性
|
無需修改客戶操作系統(tǒng),最佳兼容性
|
客戶操作系統(tǒng)需要修改來支持hypercall,因此它不能運(yùn)行在物理硬件本身或其他的hypervisor上,兼容性差,不支持Windows
|
性能 |
差
|
全虛擬化下,CPU需要在兩種模式之間切換,帶來性能開銷;但是,其性能在逐漸逼近半虛擬化。
|
好。半虛擬化下CPU性能開銷幾乎為0,虛機(jī)的性能接近于物理機(jī)。
|
應(yīng)用廠商 |
VMware Workstation/QEMU/Virtual PC
|
VMware ESXi/Microsoft Hyper-V/Xen 3.0/KVM
|
Xen
|
- Guest:客戶機(jī)系統(tǒng),包括CPU(vCPU)、內(nèi)存、驅(qū)動(Console、網(wǎng)卡、I/O 設(shè)備驅(qū)動等),被 KVM 置于一種受限制的 CPU 模式下運(yùn)行。
- KVM:運(yùn)行在內(nèi)核空間,提供CPU 和內(nèi)存的虛級化,以及客戶機(jī)的 I/O 攔截。Guest 的 I/O 被 KVM 攔截后,交給 QEMU 處理。
- QEMU:修改過的為 KVM 虛機(jī)使用的 QEMU 代碼,運(yùn)行在用戶空間,提供硬件 I/O 虛擬化,通過 IOCTL /dev/kvm 設(shè)備和 KVM 交互。
處理器 | CPU 虛擬化 | 內(nèi)存虛擬化 | PCI Pass-through |
Intel | VT-x | VPID,EPT | VT-d |
AMD | AMD-V | ASID,NPT | IOMMU |
內(nèi)存虛擬化
-
AMD 平臺上的 NPT (Nested Page Tables) 技術(shù)
-
Intel 平臺上的 EPT (Extended Page Tables)技術(shù)
I/O虛擬化
-
I/O設(shè)備盡量使用準(zhǔn)虛擬化(virtio 和 vhost_net)
-
如果需要實(shí)時(shí)遷移,不能使用 SR-IOV
-
對更高I/O要求又不需要實(shí)時(shí)遷移的,可以使用 SR-IOV
-
每種方案都有優(yōu)勢和不足,在特定環(huán)境下其性能有可能反而下降,因此在生產(chǎn)環(huán)境中使用各種虛擬化方式前需要經(jīng)過完整測試
-
在傳統(tǒng)網(wǎng)絡(luò)環(huán)境中,一臺物理主機(jī)包含一個(gè)或多個(gè)網(wǎng)卡(NIC),要實(shí)現(xiàn)與其他物理主機(jī)之間的通信,需要通過自身的 NIC 連接到外部的網(wǎng)絡(luò)設(shè)施,如交換機(jī)上。
-
這種架構(gòu)下,為了對應(yīng)用進(jìn)行隔離,往往是將一個(gè)應(yīng)用部署在一臺物理設(shè)備上,這樣會存在兩個(gè)問題,
-
datapath是負(fù)責(zé)數(shù)據(jù)交換的內(nèi)核模塊,其從網(wǎng)口讀取數(shù)據(jù),并快速匹配Flowtable中的流表項(xiàng),成功的直接轉(zhuǎn)發(fā),失敗的上交
vswitchd處理。它在初始化和
port binding的時(shí)候注冊鉤子函數(shù),把端口的報(bào)文處理接管到內(nèi)核模塊。
-
vswitchd是一個(gè)守護(hù)進(jìn)程,是ovs的管理和控制服務(wù),通過unix socket將配置信息保存到
ovsdb,并通過
netlink和內(nèi)核模塊交互。
-
ovsdb則是
ovs的數(shù)據(jù)庫,保存了
ovs配置信息。
虛擬網(wǎng)絡(luò)實(shí)現(xiàn)技術(shù)-Overlay
虛擬網(wǎng)絡(luò)實(shí)現(xiàn)技術(shù)-Overlay
當(dāng)前主流overlay技術(shù)是 GRE 和 VXLAN技術(shù). 通過增加擴(kuò)展報(bào)文頭來實(shí)現(xiàn)虛擬網(wǎng)絡(luò)在物理網(wǎng)絡(luò)之上傳輸報(bào)文。
GRE
網(wǎng)絡(luò)虛擬化使用通用路由封裝 (NVGRE) 作為虛擬化 IP 地址的機(jī)制。在 NVGRE 中,虛擬機(jī)的數(shù)據(jù)包封裝在另一個(gè)數(shù)據(jù)包中。此新 NVGRE 格式數(shù)據(jù)包的標(biāo)頭具有相應(yīng)的源和目標(biāo)提供程序區(qū)域 (PA) IP 地址。此外,它還具有 VSID (24 位虛擬子網(wǎng) ID) ,該 ID 存儲在新數(shù)據(jù)包的 GRE 標(biāo)頭中。
VXLAN????????????????????????????????
Virtual eXtensible Local Area Network (VXLAN) 是一種將2層報(bào)文封裝到UDP包(Mac in UDP)中進(jìn)行傳輸?shù)囊环N封裝協(xié)議。VXLAN主要是由Cisco推出的,VXLAN的包頭有一個(gè)24bit的ID段,即意味著1600萬個(gè)獨(dú)一無二的虛擬網(wǎng)段,這個(gè)ID通常是對UDP端口采取偽隨機(jī)算法而生成的(UDP端口是由該幀中的原始MAC Hash生成的)。這樣做的好處是可以保證基于5元組的負(fù)載均衡,保存VM之間數(shù)據(jù)包的順序。
容器網(wǎng)絡(luò)實(shí)現(xiàn)
CNI(Container Network Interface) 是 google 和 CoreOS 主導(dǎo)制定的容器網(wǎng)絡(luò)標(biāo)準(zhǔn),它 是在 RKT 網(wǎng)絡(luò)提議 的基礎(chǔ)上發(fā)展起來的,綜合考慮了靈活性、擴(kuò)展性、IP分配、多網(wǎng)卡等因素。CNI旨在為容器平臺提供網(wǎng)絡(luò)的標(biāo)準(zhǔn)化。不同的容器平臺(比如目前的 Kubernetes、Mesos 和 RKT)能夠通過相同的接口調(diào)用不同的網(wǎng)絡(luò)組件。這個(gè)協(xié)議連接了兩個(gè)組件:容器管理系統(tǒng)和網(wǎng)絡(luò)插件,具體的事情都是插件來實(shí)現(xiàn)的,包括:創(chuàng)建容器網(wǎng)絡(luò)空間(network namespace)、把網(wǎng)絡(luò)接口(interface)放到對應(yīng)的網(wǎng)絡(luò)空間、給網(wǎng)絡(luò)接口分配 IP 等。
Kubernetes本身并不負(fù)責(zé)網(wǎng)絡(luò)通信,Kubernetes提供了容器網(wǎng)絡(luò)接口CNI(Container Network Interface),具體的網(wǎng)絡(luò)通信交給CNI插件來負(fù)責(zé),開源的CNI插件非常多,像Flannel、Calico等
容器網(wǎng)絡(luò)實(shí)現(xiàn)
存儲虛擬化
存儲虛擬化(Storage Virtualization)最通俗的理解就是對存儲硬件資源進(jìn)行抽象化表現(xiàn)。構(gòu)建具有統(tǒng)一邏輯視圖的存儲資源池供用戶按需使用。存儲虛擬化將各個(gè)分散的存儲系統(tǒng) 進(jìn)行整合和統(tǒng)一管理,并提供了方便用戶調(diào)用資源的接口。另外,存儲虛擬化能夠?yàn)楹罄m(xù)的系統(tǒng)擴(kuò)容提供便 利,使資源規(guī)模動態(tài)擴(kuò)大時(shí)無需考慮新增的物理存儲資源(如不同型號的存儲設(shè)備)之間可能存在的差異。
實(shí)現(xiàn)
存儲虛擬化的實(shí)現(xiàn)方式:
(1) 裸金屬 邏輯卷
(2) 存儲設(shè)備虛擬化
(3) 主機(jī)存儲虛擬化 文件系統(tǒng)
存儲虛擬化分類
文件、塊和對象是三種以不同的方式來保存、整理和呈現(xiàn)數(shù)據(jù)的存儲格式。這些格式各有各的功能和限制。
-
文件存儲會以文件和文件夾的層次結(jié)構(gòu)來整理和呈現(xiàn)數(shù)據(jù);
-
塊存儲會將數(shù)據(jù)拆分到任意劃分且大小相同的卷中;
-
對象存儲會管理數(shù)據(jù)并將其鏈接至關(guān)聯(lián)的元數(shù)據(jù)。
-
塊存儲:即提供裸的塊設(shè)備服務(wù),裸設(shè)備什么都沒有,需要用戶自己創(chuàng)建分區(qū)、創(chuàng)建文件系統(tǒng)、掛載到操作系統(tǒng)才能用,掛一個(gè)塊存儲設(shè)備到操作系統(tǒng),相當(dāng)于插一個(gè)新U盤。只實(shí)現(xiàn)了read、write、ioctl等接口。SAN、LVM、Ceph RBD、OpenStack Cinder等都屬于塊存儲服務(wù)。
-
文件存儲:可以簡單理解為分布式文件系統(tǒng),通常實(shí)現(xiàn)了POSIX接口,不需要安裝文件系統(tǒng),直接像NFS一樣掛載到操作系統(tǒng)就能用。典型的文件存儲如NAS、HDFS、CephFS、GlusterFS、OpenStack Manila等。
-
對象存儲:提供Web存儲服務(wù),通過HTTP協(xié)議訪問,只需要Web瀏覽器即可使用,不需要掛載到本地操作系統(tǒng),實(shí)現(xiàn)的接口如GET、POST、DELETE等,典型的對象存儲如百度網(wǎng)盤、S3、OpenStack Swift、Ceph RGW等。
虛擬化管理工具
虛擬化管理工具是指與虛擬化環(huán)境及背后的實(shí)體硬件對接的軟件,它的作用是簡化資源管理、分析數(shù)據(jù)并簡化運(yùn)維。每個(gè)虛擬化管理系統(tǒng)都各不相同,但大多數(shù)系統(tǒng)都會提供簡單的用戶界面,還能簡化虛擬機(jī)(VM)創(chuàng)建流程、監(jiān)控虛擬環(huán)境、分配資源、編譯報(bào)告,以及自動執(zhí)行規(guī)則。
libvirt是一套用于管理硬件虛擬化的開源API、守護(hù)進(jìn)程與管理工具。此套組可用于管理KVM、Xen、VMware ESXi、QEMU及其他虛擬化技術(shù)。libvirt內(nèi)置的API廣泛用于云解決方案開發(fā)中的虛擬機(jī)監(jiān)視器編排層(Orchestration Layer)。
- EOF -