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





