1. 程式人生 > >Linux學習之路-虛擬化(1)介紹20180303

Linux學習之路-虛擬化(1)介紹20180303

虛擬化

一、虛擬化:Virtualization

虛擬化技術類型:

主機虛擬化:xen, kvm, virtualbox, …

(缺陷就是總是有一層內核的管理)

容器(用戶空間隔離): lxc(LinuX Container), openvz, …

用戶空間就是根文件系統,靜態的就是文件系統樹,動態的就是進程樹

需要內核級的支持,就是內核與容器之間的管理層。

系統庫虛擬化:wine, …

可以誇平臺跑應用程序的軟件

應用程序級虛擬化:jvm, pvm,...

虛擬化技術的分類:

(1) 模擬:Emulation(虛擬機的arch與物理平臺的arch可以不相同)

Qemu, PearPC, Bochs, ...

(2) 完全虛擬化 Full Virtualization,Native Virtualization

BT/HVM

VMWare Workstation,

VirtualBox,

VMWare Server

Parallels Desktop,

KVM(hvm)

XEN(hvm)

(3) 半虛擬化(準虛擬化)

Para-Virutalization

特點:GuestOS明確知道自己運行虛擬機之上;

修改虛擬機中的內核,讓虛擬機中的內核明確知道不能直接調物理機CPU的環0,

而是調用虛擬機平臺管控器的指令,開發是針對於虛擬機平臺的開發

xen, UML(user-mode linux)

(4) 容器級虛擬化

LXC,

OpenVZ,

libcontainer

runC, rkt

Linux V Servers

Virtuozzo, ...

(5) 系統庫級別虛擬化

wine

(6) 應用程序級虛擬化

jvm, pvm, …

各種虛擬化的性能對比:

通過對比,進行推薦使用的模式

CPU、MMU 建議硬件支持的虛擬化

Network 建議半虛擬化

DiskIO 建議半虛擬化

Time 建議半虛擬化,必須使用NTP服務

技術分享圖片

主機虛擬化:

CPU:

模擬:emulation, 虛擬機的arch與物理平臺的arch可以不相同;qemu;

虛擬:virtualization

完全虛擬化(full-virt)

BT: 二進制轉換 (軟件)

BT技術:二進制轉換,能夠快速調用,提升虛擬機的性能,完全虛擬化

HVM:硬件輔助的虛擬化(硬件)

HVM:硬件輔助的虛擬化,物理機CPU的環-1上,虛擬機CPU跑在環0上

半(準)虛擬化 (para-virt)

GuestOS得明確知道自己運行於虛擬化技術

內存:

MMU virtualization:

Intel: EPT, Extended Page Table(擴展的頁表,直接從虛擬機的線性地址直接到物理機的物理地址)

AMD: NPT, Nested Page Table(嵌套的頁表)

MMU硬件:內存管理單元,加速內核分配對線性地址和物理地址的對應記錄,每次要加載頁表

shadowMMU:影子內存管理單元,虛擬的內存管理單元

TLB virtualization:

tagged TLB(標簽的TLB,不用跨虛擬機的切換在清TLB表了,需要硬件級的支持)

TLB:轉換的後援緩沖器,CPU當中的一段硬件緩存空間

Page table:頁表是要靠MMU幫助快速完成對應路由分級轉換,這樣才能快速查找

IO:

Emulation(模擬的硬盤)

Para-virtualization(半虛擬化,明確告訴虛擬機使用的是虛擬磁盤)

IO-through:IO透傳(直接給虛擬機加物理硬盤)

主機虛擬化的類型:

TYPE-I:

於硬件級別直接運行hypervisor;

xen, vmware ESX/ESXI

TYPE-II:

於硬件級別運行一個OS(Host OS),而此OS上運行一個VMM;

vmware workstation, virtualbox, kvm

Linux目前流行的開源虛擬化技術解決方案:

主機虛擬化:xen, kvm, virtualbox

容器級:lxc, libcontainer, runC, openvz

模擬器:qemu

計算機的組成:CPU(運算器、控制器)、主存(RAM)、IO(磁盤、網絡)

主板:MainBoard(提供各種總線以及各種擴展接口)

什麽是虛擬機?

我們把一組提供了計算機底層基礎結構實體的資源劃分出多個彼此間相互隔離的虛擬的資源邏輯組合。

每一個彼此之間相互隔離的邏輯組合就是一個虛擬機。

每一個虛擬機就是一個進程,拿到的內存地址就是線性地址,虛擬機上的運行的程序,認為拿到的內存就是在線性地址上的線性地址。

計算機的多任務模式,其實就是虛擬化,CPU通過把時間片分發給各應用使用。

程序就是指令加數據組成的,指令後面給的就是內存的地址

馮氏計算機體系明確說明了存儲程序體系,程序和指令是一塊都放在硬盤上或內存中的。

CPU有四類指令

環0、1、2、3(核心程度依次向外)

內核模式:運行在環0上,程序調用的特權指令(集),只能通過內核調用CPU

用戶模式:運行在環3上,程序調用的非特權指令,可以直接調用CPU

分級管理系統:快速實現查找某一文件的路由

task struct:內核級的鏈表結構,追蹤當前主機的所有進程,

Thin provision:硬盤虛擬化,超配使用,文件模擬的方式供應假硬盤的使用

網卡虛擬化:

網卡隊列,有多個虛擬機的時候,通訊的時候需要給每一個虛擬機虛擬一個網卡(擁有虛擬的mac地址),物理網卡需要設置為混雜模式,物理網卡相當於交換機(橋接模式)。

如果虛擬機不需要與外網通訊,就是僅主機模式(only host),就是用軟件實現一個交換機,虛擬主機的虛擬網卡直接連到虛擬的交換機上,物理網卡也虛擬一個虛擬的網卡,連接到虛擬的交換機上。

Nat模式,宿主機上打開核心轉發,並且做地址轉換,而且所有的虛擬機的網關指向物理機虛擬出的虛擬網卡的僅主機地址,宿主機就把轉給自己的虛擬機的請求,通過物理網卡轉出去,就是一個Nat轉發網絡。

隔離網絡模型:只能在虛擬機之間的通訊

僅主機模型:只能虛擬機之間及宿主機之前的通訊

路由模型:可以與外網通訊,但是不一定能轉發回來,但是如果打開轉發功能,就是Nat模型

跨物理機之間的虛擬機通訊使用隧道通訊,

GRE:通用路由封裝技術,把二層報文借助一個隧道轉發到另外一臺物理機上。

VLAN技術:虛擬局域網,大家在同一二層網絡,但是可以在三層隔離分開,只能支持到4093個用戶。

VxLAN技術:擴展的虛擬局域網技術,自身就帶有路由封裝的功能。

SDN技術:Software Driven Network 軟件驅動網絡,把三個平面切割分開,把其中的一個平面拿出來統一找一個中心控制。

網絡有控制平面、數據平面、傳輸平面,每一個網絡是自制系統,它自我能學習能轉發,三個平面是在同一個硬件內部封裝的。

NFV技術:網絡虛擬化技術

網絡層級:

  1. 我們需要虛擬個設備

  2. 我們要確保網絡資源可以復用的

  3. 要構建一個本機局部的虛擬網絡,僅虛擬機之間通訊,虛擬機與物理機通訊,虛擬機與外網通訊

網絡通訊,之間發送信息的就是電壓信號,高低電頻,1000M 1b/s bit (125MB/s)

雲原生應用:針對雲平臺開發

系統分為基礎架構層、數據支撐、應用層、業務層。


二、VMM-Virtual Machine Monitor

VMM(Virtual Machine Monitor,虛擬機監控器)它包括規劃、部署、管理和優化虛擬基礎結構等端到端功能。

技術分享圖片

按照VMM的實現架構分類,可以分為Hypervisor模型、宿主模型和混合模型。

1.Hypervisor模型(TYPE-I

在這種架構裏面,VMM可以視為一個具有虛擬化功能的操作系統,即管理物理資源和虛擬環境的創建、管理。

優點: 效率高; 缺點:只支持部分型號設備,需要重寫驅動或者協議。

典型產品:VMware ESX server3, Kvm

2.宿主模型(TYPE-II

宿主機OS管理物理資源,VMM作為宿主機OS的一個獨立的內核模塊來提供虛擬化功能。

VMM通過調用宿主OS的相關服務來獲取資源,創建出來的虛擬機也作為宿主OS的一個進程來參與調度。

優點:個人理解就是充分利用現有的OS的device driver,無需重寫;物理資源的管理直接利用宿主OS來完成。

缺點: 效率不夠高,安全性一般、依賴於VMM和宿主OS的安全性。

典型產品: VMware server , VMware workstation,virtual PC, virtual server,

3.混合模型

顧名思義,混合模型就是上述兩種模型的混合體。

VMM處在最底層,擁有全部物理資源,但是與Hypervisor模型不同的是,大部分I/O設備是由一個運行在特權虛擬機中的特權OS來管理的。

CPU和Memory的虛擬化依然由VMM來完成,而I/O的虛擬化則由VMM和特權OS來共同完成。

混合模型集合了上述兩種模型的優點,但是缺點就是經常需要在VMM與特權OS之間進行上下文切換,開銷較大。

典型產品: window server 2008之hyper-v, Xen,

技術分享圖片


三、XEN、KVM介紹

XEN是英國劍橋大學實驗室研發的虛擬機技術,那個時代沒有硬件支持的,直接奔著半虛擬化技術。安裝後需要重啟系統,重啟後,xen變成了Hypervisor,原來系統的內核變成了第一個虛擬機的內核。後續系統每次啟動都是啟動xen,而且xen沒有管理接口,直接把第一個虛擬機當做管理接口,而且還當做IO虛擬化的接口,xen只虛擬CPU和內存。

在這之上每個虛擬機叫一個域,第一個虛擬機編號Dom0,全稱叫做privileged domain,其他虛擬機統稱叫做DomU。

其他的虛擬機都需要通過Dom0來創建,DomU關於CPU及內存的調用都是通過xen來完成的,但是需要IO設備的時候,需要通過Dom0來完成。

Dom0需要通過qemu來實現IO模擬,qemu還是個虛擬器,IO模擬完整,內存模擬完整。

Xen需要在網上的源中 virt中加載,紅帽不支持,只能使用centos高版本的內核才能使用。

KVM是以色列的一家公司研發的,全稱叫做 kernel-based vm 基於內核的虛擬機。

kvm是個內核模塊,模塊裝載後就變成了kvm的hypervisor,用戶空間直接創建虛擬機即可,虛擬機的CPU和內存是由kvm來實現,IO還是由用戶空間的qemu來實現。

雲棧的類別:

IaaS-Infrastructure AS a Service 基礎架構級服務,代表軟件有OpenStack

PaaS-platform AS a Service 平臺級服務,可以直接跑軟件

SaaS-Service AS a Service 服務級服務

FWaaS

DBaaS 數據庫級服務

LBaaS 負載均衡級服務

...


Linux學習之路-虛擬化(1)介紹20180303