官术网_书友最值得收藏!

第一篇 KVM技術(shù)詳解與實(shí)踐

第1章 企業(yè)虛擬化選型與KVM介紹

虛擬化技術(shù)從2008年開始越來越熱,經(jīng)過一個(gè)大爆發(fā)的階段,目前已經(jīng)是企業(yè)IT環(huán)境的必備技術(shù),在許多企業(yè)里面,虛擬機(jī)的數(shù)量已經(jīng)遠(yuǎn)遠(yuǎn)大于物理機(jī)。同許多技術(shù)一樣,虛擬化也分為開源和閉源技術(shù)。KVM就是一種開源的虛擬化技術(shù),本章將為讀者介紹KVM技術(shù)的演進(jìn)過程、KVM的發(fā)展歷史及KVM的應(yīng)用場景。

1.1 KVM的前世今生

如圖1-1所示,根據(jù)OpenStack平臺(tái)上2013年10月虛擬化引擎選擇的調(diào)查統(tǒng)計(jì)數(shù)據(jù), KVM已經(jīng)在OpenStack平臺(tái)占到71%的份額。

圖1-1 OpenStack平臺(tái)虛擬化引擎,用戶調(diào)查結(jié)果

KVM是一種年輕的虛擬化技術(shù),在出生的時(shí)候就吸取了其他虛擬化技術(shù)的優(yōu)點(diǎn),所以KVM的架構(gòu)簡單,沒有歷史兼容性的包袱,性能表現(xiàn)優(yōu)異。

本節(jié)介紹一下KVM的演進(jìn)過程。

1.虛擬化技術(shù)的演變過程

虛擬化技術(shù)的演變過程可以分為軟件模擬、虛擬化層翻譯、容器虛擬化三個(gè)大的階段。

其中,虛擬化層翻譯又可以分為:

?軟件捕獲翻譯,即軟件全虛擬化。

?改造虛擬機(jī)系統(tǒng)內(nèi)核加虛擬化層翻譯,即半虛擬化。

?硬件支持的虛擬化層翻譯,即硬件支持的全虛擬化。

下面分別介紹一下這幾種技術(shù)方式。

(1)軟件模擬的技術(shù)方式

軟件模擬是通過軟件完全模擬CPU、芯片組、磁盤、網(wǎng)卡等計(jì)算機(jī)硬件,如圖1-2所示。

圖1-2 QEMU的虛擬機(jī)架構(gòu)

因?yàn)槭擒浖M,所以理論上可以模擬任何硬件,甚至是不存在的硬件。但是因?yàn)檫@種方式全部是軟件模擬硬件,所以非常低效,一般只用于研究測試的場景。采用這種技術(shù)的典型產(chǎn)品有Bochs、QEMU等。

(2)虛擬化層翻譯

先介紹一下X86平臺(tái)的指令集權(quán)限劃分。如圖1-3所示,X86平臺(tái)指令集劃分為4個(gè)特權(quán)模式:Ring0、Ring1、Ring2、Ring3。操作系統(tǒng)一般使用Ring0級別,應(yīng)用程序使用Ring3級別,驅(qū)動(dòng)程序使用Ring1和Ring2級別。X86平臺(tái)在虛擬化方面的一個(gè)難點(diǎn)就是如何將虛擬機(jī)越級的指令使用進(jìn)行隔離。

VMware公司找到了最早的解決方法,圖1-4所示為對虛擬機(jī)指令的使用進(jìn)行捕獲和翻譯的示意圖。

圖1-3 X86CPU指令級別

圖1-4 軟件全虛擬化方案架構(gòu)

通過虛擬化引擎,捕獲虛擬機(jī)的指令,并進(jìn)行處理,這也是為什么在虛擬機(jī)上雖然使用的是物理機(jī)一樣的指令,但是虛擬機(jī)不能對硬件進(jìn)行操作的原因,比如重啟虛擬機(jī)不會(huì)引起宿主機(jī)的重啟。這種解決方案也叫軟件全虛擬化方案。

(3)改造虛擬機(jī)操作系統(tǒng)的方式

通過虛擬化引擎進(jìn)行指令捕獲和翻譯的方式雖然可行,但是在虛擬化層要做大量的工作,Xen項(xiàng)目提供了另外一種思路,就是對虛擬機(jī)的操作系統(tǒng)內(nèi)核進(jìn)行改造,使虛擬機(jī)自己對特殊的指令進(jìn)行更改,然后和虛擬化層一起配合工作,這也是Xen早期一直要使用一個(gè)特殊內(nèi)核的原因,并且不支持Windows系統(tǒng)虛擬化。改造的虛擬機(jī)雖然使用上有限制,配置比較麻煩,但是這種方式效率非常高,這種方式也被稱為半虛擬化方案。

(4)對CPU指令進(jìn)行改造

2005年,Intel推出了硬件的方案,對CPU指令進(jìn)行改造,即VT-x,如圖1-5所示。VT-x增加了兩種操作模式:VMX root operation和VMX non-root operation。VMM運(yùn)行在VMX root operation模式,虛擬機(jī)運(yùn)行在VMX non-root operation模式。這兩種操作模式都支持Ring0~Ring3這4個(gè)特權(quán)級。

圖1-5 硬件虛擬化CPU指令說明

這種方案因?yàn)槭腔谟布?,所以效率非常高,這種方案也稱為硬件支持的全虛擬化方案,如圖1-6所示。現(xiàn)在的一個(gè)發(fā)展趨勢是不僅CPU指令有硬件解決方案,I/O通信也有硬件解決方案,稱為VT-d;網(wǎng)絡(luò)通信也有硬件解決方案,稱為VT-c。

圖1-6 硬件全虛擬化方案架構(gòu)

提示

當(dāng)前的虛擬化引擎,都是使用硬件支持的虛擬化解決方案。并且最新的操作系統(tǒng)一般都支持一些半虛擬化的特性,所以宿主機(jī)和虛擬機(jī)使用比較新的版本,性能也會(huì)好一些。

(5)容器虛擬化

容器虛擬化的原理是基于CGroups、Namespace等技術(shù)將進(jìn)程隔離,每個(gè)進(jìn)程就像一臺(tái)單獨(dú)的虛擬機(jī)一樣,有自己被隔離出來的資源,也有自己的根目錄、獨(dú)立的進(jìn)程編號、被隔離的內(nèi)存空間?;谌萜鞯奶摂M化可以實(shí)現(xiàn)在單一內(nèi)核上運(yùn)行多個(gè)實(shí)例,因此是一個(gè)更高效率的虛擬化方式。目前最熱的容器虛擬化技術(shù)就是Docker。Docker的優(yōu)勢是可以將一個(gè)開發(fā)環(huán)境進(jìn)行打包,很方便地在另外一個(gè)系統(tǒng)上運(yùn)行起來,并且有版本的概念,可以在前一個(gè)版本的基礎(chǔ)上累加。但是Docker在生產(chǎn)環(huán)境的使用還需要一個(gè)過程,主要是磁盤、網(wǎng)絡(luò)性能上還受到很多限制。

2.KVM的歷史

KVM(Kernel-based Virtual Machine)最初是由以色列的公司Qumranet開發(fā)的。KVM在2007年2月被正式合并到Linux 2.6.20核心中,成為內(nèi)核源代碼的一部分。2008年9月4日,RedHat公司收購了Qumranet,開始在RHEL中用KVM替換Xen,第一個(gè)包含KVM的版本是RHEL5.4。從RHEL6開始,KVM成為默認(rèn)的虛擬化引擎。KVM必須在具備Intel VT或AMD-V功能的X86平臺(tái)上運(yùn)行。它也被移植到S/390、PowerPC與IA-64平臺(tái)上。在Linux內(nèi)核3.9版中,加入了對ARM架構(gòu)的支持。

KVM包含一個(gè)為處理器提供底層虛擬化、可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-amd.ko),使用QEMU(QEMU-KVM)作為虛擬機(jī)上層控制工具。KVM不需要改變Linux或Windows系統(tǒng)就能運(yùn)行。

3.KVM的架構(gòu)

KVM的架構(gòu)非常簡單,如圖1-7所示,KVM就是內(nèi)核的一個(gè)模塊,用戶空間通過QEMU模擬硬件提供給虛擬機(jī)使用,一臺(tái)虛擬機(jī)就是一個(gè)普通的Linux進(jìn)程,通過對這個(gè)進(jìn)程的管理,就可以完成對虛擬機(jī)的管理。實(shí)際上德國有家公司開發(fā)了一個(gè)管理平臺(tái)Proxmox VE,就是通過對KVM進(jìn)程的管理來實(shí)現(xiàn)對虛擬機(jī)的管理的。

圖1-7 KVM的架構(gòu)

因?yàn)閷M(jìn)程的管理非常麻煩,RedHat發(fā)布了一個(gè)開源項(xiàng)目Libvirt。Libvirt有API,也有一套命令行工具,可以完成對虛擬機(jī)的管理,大多數(shù)的管理平臺(tái)都是通過Libvirt來完成對KVM虛擬機(jī)的管理的,比如OpenStack、CloudStack、OpenNebula等。

4.QEMU與KVM

QEMU是一個(gè)開源項(xiàng)目,實(shí)際就是一臺(tái)硬件模擬器,可以模擬許多硬件,包括X86架構(gòu)處理器、AMD64架構(gòu)處理器、MIPS R4000、ARM v6/v7(Cortex-A8,A9,A15)、SPARC sun3與PowerPC架構(gòu),還支持其他架構(gòu),可以從QEMU主頁獲取完整的列表。

QEMU可以在其他平臺(tái)上運(yùn)行Linux的程序,可以存儲(chǔ)及還原虛擬機(jī)運(yùn)行狀態(tài),還可以虛擬多種設(shè)備,包括網(wǎng)卡、多CPU、IDE設(shè)備、軟驅(qū)、顯卡、聲卡、多種并口設(shè)備、多種串口設(shè)備、多種USB設(shè)備、PC喇叭、PS/2鍵盤鼠標(biāo)(默認(rèn))和USB鍵盤鼠標(biāo)、藍(lán)牙設(shè)備。

QEMU還內(nèi)建DHCP、DNS、SMB、TFTP服務(wù)器。

比較有意思的是,有人還將QEMU編譯成Windows版本,在Windows平臺(tái)上也可以運(yùn)行QEMU。

QEMU的好處是因?yàn)槭羌冘浖M,所以可以在支持的平臺(tái)模擬支持的設(shè)備,比如還有人利用QEMU在安卓上安裝一個(gè)Windows XP虛擬機(jī)出來。

QEMU的缺點(diǎn)是因?yàn)槭羌冘浖M,所有非常慢。QEMU 1.0的時(shí)候有一個(gè)QEMU和KVM結(jié)合的分支。KVM只是一個(gè)內(nèi)核的模塊,沒有用戶空間的管理工具,KVM的虛擬機(jī)可以借助QEMU的管理工具來管理。QEMU也可以借助KVM來加速,提升虛擬機(jī)的性能。QEMU-KVM的分支版本發(fā)布了3個(gè)正式的版本1.1、1.2、1.3,隨后和QEMU的主版本合并,也就是說現(xiàn)在的QEMU版本默認(rèn)支持KVM,QEMU和KVM已經(jīng)緊密地結(jié)合起來了。

KVM的最后一個(gè)自己的版本是KVM 83,隨后和內(nèi)核版本一起發(fā)布,和內(nèi)核版本號保持一致,所以要使用KVM的最新版本,就要使用最新的內(nèi)核。

5.Libvirt與KVM

Libvirt是一套開源的虛擬化的管理工具,主要由3部分組成:

?一套API的lib庫,支持主流的編程語言,包括C、Python、Ruby等。

?Libvirtd服務(wù)。

?命令行工具virsh。

Libvirt的設(shè)計(jì)目標(biāo)是通過相同的方式管理不同的虛擬化引擎,比如KVM、Xen、HyperV、VMware ESX等。但是目前實(shí)際上多數(shù)場景使用Libvirt的是KVM,而Xen、HyperV、VMware ESX都有各自的管理工具。

Libvirt可以實(shí)現(xiàn)對虛擬機(jī)的管理,比如虛擬機(jī)的創(chuàng)建、啟動(dòng)、關(guān)閉、暫停、恢復(fù)、遷移、銷毀,以及虛擬機(jī)網(wǎng)卡、硬盤、CPU、內(nèi)存等多種設(shè)備的熱添加。

Libvirt還支持遠(yuǎn)程的宿主機(jī)管理,只要在宿主機(jī)上啟動(dòng)Libvirtd服務(wù)并做好配置,就可以通過Libvirt進(jìn)行虛擬機(jī)的配置。通道可以是以下方式:

?SSH。

?TCP。

?基于TCP的TLS。

Libvirt將虛擬機(jī)的管理分為以下幾個(gè)方面:

第一,存儲(chǔ)池資源管理,支持本地文件系統(tǒng)目錄、裸設(shè)備、lvm、nfs、iscsi等方式。在虛擬機(jī)磁盤格式上支持qcow2、vmdk、raw等格式。

第二,網(wǎng)絡(luò)資源管理,支持Linux橋、VLAN、多網(wǎng)卡綁定管理,比較新的版本還支持Open vSwitch。Libvirt還支持nat和路由方式的網(wǎng)絡(luò),Libvirt可以通過防火墻讓虛擬機(jī)通過宿主機(jī)建立網(wǎng)絡(luò)通道,和外部的網(wǎng)絡(luò)進(jìn)行通信。

1.2 KVM與常用企業(yè)級虛擬化產(chǎn)品的PK

1.常用企業(yè)級虛擬化產(chǎn)品的比較

目前常見的企業(yè)級的虛擬化產(chǎn)品有4款:分別是VMware、HyperV、Xen、KVM。

(1)VMware

VMware是最早的X86平臺(tái)上的虛擬化引擎,1999年就發(fā)布了第一款產(chǎn)品,經(jīng)過十幾年的發(fā)展和市場檢驗(yàn),產(chǎn)品成熟、穩(wěn)定,兼容性也不錯(cuò)。VMware的產(chǎn)品線非常全面,不僅有虛擬化的解決方案,在IaaS、SaaS、PaaS層都有自己的產(chǎn)品。并且VMware在網(wǎng)絡(luò)、存儲(chǔ)方面都有相關(guān)的解決方案,VMware和網(wǎng)絡(luò)存儲(chǔ)廠商在協(xié)議層面也有一些私有協(xié)議,許多主流的廠商都支持VMware一些專用的協(xié)議,和VMware一起形成了一個(gè)生態(tài)鏈。

VMware目前被EMC控股,虛擬化產(chǎn)品線主要有針對個(gè)人使用的VMware Workstation,針對蘋果用戶的VMware Fusion,針對企業(yè)級用戶的VMware ESXi服務(wù)器。管理工具主要是VMware vSphere套件。

VMware的產(chǎn)品基本上都是非開源產(chǎn)品,并且大部分都是收費(fèi)產(chǎn)品,一般在傳統(tǒng)關(guān)鍵行業(yè)使用比較多一些,在中小型企業(yè)、互聯(lián)網(wǎng)行業(yè)使用得比較少一點(diǎn)。

(2)HyperV

HyperV是微軟的虛擬化產(chǎn)品,最近幾年發(fā)展非常迅速,在Windows Server 2012 R2中的HyperV支持許多非常新的虛擬化特性。HyperV必須使用64版的Windows產(chǎn)品,HyperV也支持Linux系統(tǒng)的虛擬機(jī)。

HyperV也是一款非開源的收費(fèi)產(chǎn)品,HyperV的集群管理工具SCVMM配置非常復(fù)雜,需要配置Windows域、Windows Server集群,然后才能管理多臺(tái)宿主機(jī)。因?yàn)镠yperV的成本相對比較低,所以最近幾年市場占有率也在提升,主要是一些使用Windows系統(tǒng)的企業(yè)使用比較多。

(3)Xen

Xen是最早的開源虛擬化引擎,由劍橋大學(xué)開發(fā),半虛擬化的概念也是Xen最早提出的。Xen后來被思杰收購,推出了一套叫作XenServer的管理工具,XenServer于2013年年底宣布免費(fèi)。Xen因?yàn)橥瞥龅臅r(shí)間比較長,兼容性、穩(wěn)定性都不錯(cuò),目前使用Xen的主要是一些在Xen上面技術(shù)積累較多的企業(yè)。

(4)KVM

KVM比較年輕,所以出生的時(shí)候就吸取了其他虛擬化技術(shù)的優(yōu)點(diǎn),一開始就支持硬件虛擬化技術(shù),沒有歷史兼容包袱。所以KVM推出來的時(shí)候,性能就非常優(yōu)異。目前,KVM是OpenStack平臺(tái)上首選的虛擬化引擎。國內(nèi)新一代的公有云全部采用KVM作為底層的虛擬化引擎。KVM已經(jīng)成為開源解決方案的主流選擇。

2.KVM優(yōu)勢

KVM的優(yōu)勢主要體現(xiàn)在以下幾點(diǎn)。

(1)開源

KVM是一個(gè)開源項(xiàng)目,這就決定了KVM一直是開放的姿態(tài),許多虛擬化的新技術(shù)都是首先在KVM上應(yīng)用,再到其他虛擬化引擎上推廣。

虛擬化一般網(wǎng)絡(luò)和存儲(chǔ)都是難點(diǎn)。網(wǎng)絡(luò)方面,SRIOV技術(shù)就是最先在KVM上先有應(yīng)用,然后再推廣到其他虛擬化引擎上。再比如SDN、Open vSwtich這些比較新的技術(shù),都是先在KVM上得到應(yīng)用。

磁盤方面,基于SSD的分層技術(shù),都是最早在KVM上得到應(yīng)用。

KVM背靠Linux這棵大樹,和Linux系統(tǒng)緊密結(jié)合,在Linux上的新技術(shù)都可以馬上應(yīng)用到KVM上。圍繞KVM的是一個(gè)開源的生態(tài)鏈,從底層的Linux系統(tǒng),到中間層的Libvirt管理工具,到云管理平臺(tái)OpenStack,莫不是如此。

(2)性能

KVM吸引許多人使用的一個(gè)動(dòng)因就是性能,在同樣的硬件條件下,能提供更好的虛擬機(jī)性能,主要是因?yàn)镵VM架構(gòu)簡單,代碼只有2萬行,一開始就支持硬件虛擬化,這些技術(shù)特點(diǎn)保證了KVM的性能。

(3)免費(fèi)

KVM因?yàn)槭情_源項(xiàng)目,絕大部分KVM的解決方案都是免費(fèi)方案,隨著KVM的發(fā)展, KVM虛擬機(jī)越來越穩(wěn)定,兼容性也越來越好,因而也就得到越來越多的應(yīng)用。

(4)廣泛免費(fèi)的技術(shù)支持

免費(fèi)并不意味著KVM沒有技術(shù)支持。在KVM的開源社區(qū),數(shù)量巨大的KVM技術(shù)支持者都可以提供KVM技術(shù)支持。另外,如果需要商業(yè)級支持,也可以購買紅帽公司的服務(wù)。

1.3 判斷企業(yè)是否適合使用KVM的標(biāo)準(zhǔn)

1.業(yè)務(wù)類型

目前在互聯(lián)網(wǎng)行業(yè),KVM虛擬化技術(shù)是使用最廣泛的,因?yàn)榛ヂ?lián)網(wǎng)行業(yè)有對新技術(shù)追求的沖動(dòng)。另外中小企業(yè)也推薦使用KVM技術(shù),因?yàn)槭褂肒VM不需要支付額外的費(fèi)用。

還有哪些企業(yè)、個(gè)人適合使用KVM呢?可以這樣總結(jié):KVM天生就是為Linux而生的,凡是可以使用Linux的地方,就可以使用KVM,KVM天生和Linux在一起。

2.企業(yè)對成本的關(guān)注度

隨著虛擬化這幾年的快速發(fā)展,在企業(yè)的IT環(huán)境中,虛擬化已經(jīng)是一個(gè)標(biāo)配的技術(shù)。虛擬化帶來的好處是巨大的,虛擬化真正實(shí)現(xiàn)了資源池化,通過虛擬化可以將服務(wù)器資源進(jìn)行切割,做到資源隨取隨用,有效節(jié)省成本,提高資源利用率。

KVM虛擬化技術(shù)經(jīng)過幾年的發(fā)展,已經(jīng)非常成熟,使用KVM技術(shù)更不需要在虛擬化方面支付額外的費(fèi)用,可以進(jìn)一步節(jié)省企業(yè)的IT成本。

3.企業(yè)對快速部署的關(guān)注度

虛擬化還有一個(gè)重要的功能就是快速部署。在宿主機(jī)層面看,虛擬機(jī)就是一個(gè)鏡像文件,要得到另外一臺(tái)虛擬機(jī),只需要將鏡像文件復(fù)制一份就可以了,通常只有幾分鐘。而按照傳統(tǒng)方式部署一臺(tái)物理機(jī),最起碼都要一個(gè)小時(shí)。通過磁盤差量的技術(shù),甚至可以做到秒級生成虛擬機(jī)。

通過虛擬化技術(shù),還可以實(shí)現(xiàn)在虛擬化層做高可用和在線遷移。虛擬化層的高可用是系統(tǒng)層面的高可用,比基于應(yīng)用層的高可用配置要簡單很多。虛擬機(jī)的在線遷移,更是虛擬化技術(shù)的獨(dú)有手段。通過在線遷移,物理機(jī)的維護(hù)、系統(tǒng)的維護(hù)、網(wǎng)絡(luò)的維護(hù),都可以做到不中斷服務(wù),進(jìn)一步提高了業(yè)務(wù)應(yīng)用的可用性。

因?yàn)樗械奶摂M機(jī)都是相同的虛擬硬件,實(shí)現(xiàn)了硬件層級的標(biāo)準(zhǔn)化,降低了自動(dòng)化的難度,很容易搭建私有或者公有的云平臺(tái),所以通過虛擬機(jī)技術(shù),很容易實(shí)現(xiàn)以下功能:

?資源使用自動(dòng)化和自助服務(wù)。

?資源池可隨時(shí)擴(kuò)展。

?資源使用標(biāo)準(zhǔn)化。

?資源使用保持了很好的兼容性。

1.4 本章小結(jié)

本章介紹了虛擬化及KVM技術(shù)的演進(jìn)過程,介紹了KVM技術(shù)的優(yōu)勢,可以簡單地概括:凡是使用Linux系統(tǒng)的場景,如果上虛擬機(jī)項(xiàng)目,就天然適合使用KVM虛擬化技術(shù)。

下一章將介紹如何開始自己的第一臺(tái)虛擬機(jī),在安裝第一臺(tái)虛擬機(jī)的時(shí)候有哪些地方應(yīng)該注意。

主站蜘蛛池模板: 贵溪市| 邻水| 信阳市| 宣威市| 即墨市| 偃师市| 大丰市| 馆陶县| 贺兰县| 梓潼县| 昌邑市| 开化县| 礼泉县| 闵行区| 宁晋县| 龙陵县| 马鞍山市| 天津市| 黑水县| 东阿县| 香河县| 水富县| 论坛| 嘉黎县| 栖霞市| 简阳市| 广宗县| 本溪| 罗源县| 连云港市| 宁明县| 繁峙县| 宁乡县| 黄大仙区| 巩义市| 大邑县| 临沧市| 新源县| 乌鲁木齐县| 西峡县| 军事|