CPU虛擬化
一個(gè)KVM(kernel-based virtual machine)虛擬機(jī)在宿主機(jī)上就是一個(gè) qemu-kvm進(jìn)程,與其他Linux進(jìn)程一樣被調(diào)用瞒渠。 虛擬機(jī)的每個(gè)虛擬CPU則對(duì)應(yīng) qemu-kvm進(jìn)程中的一個(gè)進(jìn)程良蒸。 因此,虛擬CPU可以超過(guò)物理CPU的數(shù)量伍玖,叫CPU超配嫩痰。
內(nèi)存虛擬化
KVM通過(guò)內(nèi)存虛擬化共享物理系統(tǒng)內(nèi)存串纺,動(dòng)態(tài)分配給虛擬機(jī)。
為了在一臺(tái)機(jī)器上運(yùn)行多個(gè)虛擬機(jī)椰棘,KVM需要實(shí)現(xiàn)VA(虛擬內(nèi)存) --> PA(物理內(nèi)存) --> MA(機(jī)器內(nèi)存)的轉(zhuǎn)換纺棺,其中虛擬機(jī)OS控制VA->PA的轉(zhuǎn)換,KVM負(fù)責(zé)PA->MA的映射邪狞。
存儲(chǔ)虛擬化
KVM的虛擬化通過(guò)存儲(chǔ)池(Storage Pool)和卷(Volume)實(shí)現(xiàn)祷蝌。 存儲(chǔ)池是宿主機(jī)可見的一片存儲(chǔ)空間,帆卓,可以分為多種類型杆逗。 卷是存儲(chǔ)池的一塊空間,卷在虛擬機(jī)眼中就是一塊硬盤鳞疲。 不同類型的存儲(chǔ)池:
1. 目錄類型
文件目錄是最常見的存儲(chǔ)池。 目錄是一個(gè)存儲(chǔ)池蠕蚜,默認(rèn)是 /var/lib/libvirt/images/ 目錄里的一個(gè)文件就是一個(gè)卷尚洽。
使用文件做卷的優(yōu)點(diǎn):
存儲(chǔ)方便
移植性好
可復(fù)制
可遠(yuǎn)程訪問(wèn)
KVM支持多種卷格式:
raw: 默認(rèn)格式,鏡像什么格式靶累,卷就是什么格式
qcow2: cow即寫時(shí)復(fù)制(copy on write)腺毫,節(jié)省空間癣疟,支持AES加密。
vmdk:是VMWare 的虛擬磁盤格式潮酒,VM虛擬機(jī)可以直接在KVM上運(yùn)行
vdi: 是VirtualBox的虛擬磁盤格式
2. 邏輯卷管理(Logical Volume Manager)類型
宿主機(jī)上的VG(Volume Group)中的LV(Logical Volume)作為虛擬磁盤分配給虛擬機(jī)使用睛挚,只能作為數(shù)據(jù)盤,不能作為啟動(dòng)盤急黎,因?yàn)樗鼪](méi)有MBR引導(dǎo)記錄扎狱。 這種情形,主機(jī)的VG就是存儲(chǔ)池勃教,LV就是卷淤击。
3. 其他類型
KVM還支持 iSCSI, Ceph等多種類型的存儲(chǔ)池。
網(wǎng)絡(luò)虛擬化
基本概念
假設(shè)宿主機(jī)有1塊物理網(wǎng)卡en0
, 運(yùn)行著一個(gè)虛擬機(jī)VM1故源。那問(wèn)題是如何讓VM1訪問(wèn)外網(wǎng)呢污抬? a):將物理網(wǎng)卡直接分配給虛擬機(jī),但這樣會(huì)導(dǎo)致宿主機(jī)和其他的虛擬機(jī)沒(méi)有網(wǎng)絡(luò)連接了绳军。 b):給虛擬機(jī)分配一個(gè)虛擬網(wǎng)卡vnet0
, 通過(guò)Linux Bridge br0 將 en0和vnet0連接起來(lái)印机。這個(gè)是實(shí)際采用的方案。
Linux Bridge可以看做是物理接口和虛擬接口的轉(zhuǎn)發(fā)器门驾。
如果添加虛擬機(jī)VM2射赛,自然也給它分配虛擬網(wǎng)卡vet0
, 這兩塊虛擬網(wǎng)卡都通過(guò) br0 和en0通信,并且虛擬機(jī)之前是可以直接通信的猎唁。因此br0就充當(dāng)了兩臺(tái)虛擬機(jī)的出口網(wǎng)關(guān)咒劲。
1. VLAN
沒(méi)有VLAN之前,連在同一交換機(jī)上的主機(jī)共享廣播域诫隅,獨(dú)占沖突域腐魂,相互之間可以直接通信。 VLAN 能夠?qū)⒁粋€(gè)交換機(jī)的端口劃分為若干個(gè)組逐纬, 使得連接在同一組中端口的主機(jī)位于同一邏輯網(wǎng)絡(luò)中蛔屹,不同VLAN間通信需要經(jīng)過(guò)三層路由。
VLAN是二層上的隔離豁生,隔離廣播指的是二層以太網(wǎng)廣播幀兔毒,和三層的IP廣播報(bào)文區(qū)別開來(lái)。
VLAN用VLAN ID 唯一標(biāo)示組甸箱,范圍是 [1, 4096]育叁。 支持VLAN的交換機(jī)因而具有兩種端口:access端口和trunk端口。 access口隸屬某一個(gè)組芍殖,只能把a(bǔ)ccess口劃分給一個(gè)VLAN組豪嗽,沒(méi)有顯式指定,默認(rèn)在0號(hào)組。 trunk口允許不同的VLAN幀通過(guò)龟梦,通常是連接兩個(gè)交換機(jī)的端口模式隐锭。
eth0
是宿主機(jī)的物理網(wǎng)卡,eth0.10
是與它連接的子設(shè)備计贰。
eth0.10就是VLAN設(shè)備钦睡,vlan id 是10。
eth0.10掛載在brvlan10
的Linux Bridge上躁倒, 虛擬機(jī)VM1的虛擬網(wǎng)卡vnet0
也掛載在 brvlan10上荞怒。
如此一來(lái),vnet0, brvlan10 和 eth0.10 都接在VLAN10 的Access口上樱溉。而eth0充當(dāng)trunk口挣输。
如果再增加一個(gè)VLAN2
那么VM2的三個(gè)虛擬接口都是接在VLAN 20 上的。對(duì)于新創(chuàng)建的虛擬機(jī)福贞,只要為它創(chuàng)建一個(gè)VLAN組撩嚼,并將其虛擬網(wǎng)卡放到這個(gè)組中,就能共享宿主機(jī)的物理網(wǎng)卡了挖帘。還有完丽,一個(gè)物理網(wǎng)卡可以為多個(gè)虛擬網(wǎng)卡服務(wù),而一個(gè)虛擬網(wǎng)卡則只能對(duì)應(yīng)于一塊物理網(wǎng)卡拇舀。即一對(duì)多關(guān)系逻族。
2. Linux Bridge + VLAN = 虛擬交換機(jī)
對(duì)LVM的網(wǎng)絡(luò)虛擬化總結(jié):
-
物理交換機(jī)存在多個(gè)VLAN, 每個(gè)VLAN擁有多個(gè)端口骄崩。
同一VLAN的主機(jī)可以互相通信聘鳞,不同VLAN端口之間相互隔離。因此交換機(jī)包含兩層功能:交換和隔離要拂。
-
Linux的VLAN設(shè)備實(shí)現(xiàn)的是隔離抠璃,但沒(méi)有交換功能。
一個(gè)VLAN母設(shè)備(如eth0)不能擁有兩個(gè)相同VLAN id的子設(shè)備脱惰。
-
Linux Bridge專門實(shí)現(xiàn)交換功能搏嗡。
將同一VLAN的子設(shè)備都掛載到一個(gè)Bridge上,設(shè)備(也就是兩臺(tái)虛擬機(jī))之間可以交換數(shù)據(jù)拉一。
所以采盒,Linux Bridge + Vlan 模擬了現(xiàn)實(shí)的二層交換機(jī)。