- 深度實踐KVM:核心技術、管理運維、性能優化與項目實施
- 肖力 汪愛偉 楊俊俊 趙德祿
- 11字
- 2018-12-31 20:46:19
第一篇 KVM技術詳解與實踐
第1章 企業虛擬化選型與KVM介紹
虛擬化技術從2008年開始越來越熱,經過一個大爆發的階段,目前已經是企業IT環境的必備技術,在許多企業里面,虛擬機的數量已經遠遠大于物理機。同許多技術一樣,虛擬化也分為開源和閉源技術。KVM就是一種開源的虛擬化技術,本章將為讀者介紹KVM技術的演進過程、KVM的發展歷史及KVM的應用場景。
1.1 KVM的前世今生
如圖1-1所示,根據OpenStack平臺上2013年10月虛擬化引擎選擇的調查統計數據, KVM已經在OpenStack平臺占到71%的份額。

圖1-1 OpenStack平臺虛擬化引擎,用戶調查結果
KVM是一種年輕的虛擬化技術,在出生的時候就吸取了其他虛擬化技術的優點,所以KVM的架構簡單,沒有歷史兼容性的包袱,性能表現優異。
本節介紹一下KVM的演進過程。
1.虛擬化技術的演變過程
虛擬化技術的演變過程可以分為軟件模擬、虛擬化層翻譯、容器虛擬化三個大的階段。
其中,虛擬化層翻譯又可以分為:
?軟件捕獲翻譯,即軟件全虛擬化。
?改造虛擬機系統內核加虛擬化層翻譯,即半虛擬化。
?硬件支持的虛擬化層翻譯,即硬件支持的全虛擬化。
下面分別介紹一下這幾種技術方式。
(1)軟件模擬的技術方式
軟件模擬是通過軟件完全模擬CPU、芯片組、磁盤、網卡等計算機硬件,如圖1-2所示。

圖1-2 QEMU的虛擬機架構
因為是軟件模擬,所以理論上可以模擬任何硬件,甚至是不存在的硬件。但是因為這種方式全部是軟件模擬硬件,所以非常低效,一般只用于研究測試的場景。采用這種技術的典型產品有Bochs、QEMU等。
(2)虛擬化層翻譯
先介紹一下X86平臺的指令集權限劃分。如圖1-3所示,X86平臺指令集劃分為4個特權模式:Ring0、Ring1、Ring2、Ring3。操作系統一般使用Ring0級別,應用程序使用Ring3級別,驅動程序使用Ring1和Ring2級別。X86平臺在虛擬化方面的一個難點就是如何將虛擬機越級的指令使用進行隔離。
VMware公司找到了最早的解決方法,圖1-4所示為對虛擬機指令的使用進行捕獲和翻譯的示意圖。

圖1-3 X86CPU指令級別

圖1-4 軟件全虛擬化方案架構
通過虛擬化引擎,捕獲虛擬機的指令,并進行處理,這也是為什么在虛擬機上雖然使用的是物理機一樣的指令,但是虛擬機不能對硬件進行操作的原因,比如重啟虛擬機不會引起宿主機的重啟。這種解決方案也叫軟件全虛擬化方案。
(3)改造虛擬機操作系統的方式
通過虛擬化引擎進行指令捕獲和翻譯的方式雖然可行,但是在虛擬化層要做大量的工作,Xen項目提供了另外一種思路,就是對虛擬機的操作系統內核進行改造,使虛擬機自己對特殊的指令進行更改,然后和虛擬化層一起配合工作,這也是Xen早期一直要使用一個特殊內核的原因,并且不支持Windows系統虛擬化。改造的虛擬機雖然使用上有限制,配置比較麻煩,但是這種方式效率非常高,這種方式也被稱為半虛擬化方案。
(4)對CPU指令進行改造
2005年,Intel推出了硬件的方案,對CPU指令進行改造,即VT-x,如圖1-5所示。VT-x增加了兩種操作模式:VMX root operation和VMX non-root operation。VMM運行在VMX root operation模式,虛擬機運行在VMX non-root operation模式。這兩種操作模式都支持Ring0~Ring3這4個特權級。

圖1-5 硬件虛擬化CPU指令說明
這種方案因為是基于硬件的,所以效率非常高,這種方案也稱為硬件支持的全虛擬化方案,如圖1-6所示?,F在的一個發展趨勢是不僅CPU指令有硬件解決方案,I/O通信也有硬件解決方案,稱為VT-d;網絡通信也有硬件解決方案,稱為VT-c。

圖1-6 硬件全虛擬化方案架構
提示
當前的虛擬化引擎,都是使用硬件支持的虛擬化解決方案。并且最新的操作系統一般都支持一些半虛擬化的特性,所以宿主機和虛擬機使用比較新的版本,性能也會好一些。
(5)容器虛擬化
容器虛擬化的原理是基于CGroups、Namespace等技術將進程隔離,每個進程就像一臺單獨的虛擬機一樣,有自己被隔離出來的資源,也有自己的根目錄、獨立的進程編號、被隔離的內存空間。基于容器的虛擬化可以實現在單一內核上運行多個實例,因此是一個更高效率的虛擬化方式。目前最熱的容器虛擬化技術就是Docker。Docker的優勢是可以將一個開發環境進行打包,很方便地在另外一個系統上運行起來,并且有版本的概念,可以在前一個版本的基礎上累加。但是Docker在生產環境的使用還需要一個過程,主要是磁盤、網絡性能上還受到很多限制。
2.KVM的歷史
KVM(Kernel-based Virtual Machine)最初是由以色列的公司Qumranet開發的。KVM在2007年2月被正式合并到Linux 2.6.20核心中,成為內核源代碼的一部分。2008年9月4日,RedHat公司收購了Qumranet,開始在RHEL中用KVM替換Xen,第一個包含KVM的版本是RHEL5.4。從RHEL6開始,KVM成為默認的虛擬化引擎。KVM必須在具備Intel VT或AMD-V功能的X86平臺上運行。它也被移植到S/390、PowerPC與IA-64平臺上。在Linux內核3.9版中,加入了對ARM架構的支持。
KVM包含一個為處理器提供底層虛擬化、可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-amd.ko),使用QEMU(QEMU-KVM)作為虛擬機上層控制工具。KVM不需要改變Linux或Windows系統就能運行。
3.KVM的架構
KVM的架構非常簡單,如圖1-7所示,KVM就是內核的一個模塊,用戶空間通過QEMU模擬硬件提供給虛擬機使用,一臺虛擬機就是一個普通的Linux進程,通過對這個進程的管理,就可以完成對虛擬機的管理。實際上德國有家公司開發了一個管理平臺Proxmox VE,就是通過對KVM進程的管理來實現對虛擬機的管理的。

圖1-7 KVM的架構
因為對進程的管理非常麻煩,RedHat發布了一個開源項目Libvirt。Libvirt有API,也有一套命令行工具,可以完成對虛擬機的管理,大多數的管理平臺都是通過Libvirt來完成對KVM虛擬機的管理的,比如OpenStack、CloudStack、OpenNebula等。
4.QEMU與KVM
QEMU是一個開源項目,實際就是一臺硬件模擬器,可以模擬許多硬件,包括X86架構處理器、AMD64架構處理器、MIPS R4000、ARM v6/v7(Cortex-A8,A9,A15)、SPARC sun3與PowerPC架構,還支持其他架構,可以從QEMU主頁獲取完整的列表。
QEMU可以在其他平臺上運行Linux的程序,可以存儲及還原虛擬機運行狀態,還可以虛擬多種設備,包括網卡、多CPU、IDE設備、軟驅、顯卡、聲卡、多種并口設備、多種串口設備、多種USB設備、PC喇叭、PS/2鍵盤鼠標(默認)和USB鍵盤鼠標、藍牙設備。
QEMU還內建DHCP、DNS、SMB、TFTP服務器。
比較有意思的是,有人還將QEMU編譯成Windows版本,在Windows平臺上也可以運行QEMU。
QEMU的好處是因為是純軟件模擬,所以可以在支持的平臺模擬支持的設備,比如還有人利用QEMU在安卓上安裝一個Windows XP虛擬機出來。
QEMU的缺點是因為是純軟件模擬,所有非常慢。QEMU 1.0的時候有一個QEMU和KVM結合的分支。KVM只是一個內核的模塊,沒有用戶空間的管理工具,KVM的虛擬機可以借助QEMU的管理工具來管理。QEMU也可以借助KVM來加速,提升虛擬機的性能。QEMU-KVM的分支版本發布了3個正式的版本1.1、1.2、1.3,隨后和QEMU的主版本合并,也就是說現在的QEMU版本默認支持KVM,QEMU和KVM已經緊密地結合起來了。
KVM的最后一個自己的版本是KVM 83,隨后和內核版本一起發布,和內核版本號保持一致,所以要使用KVM的最新版本,就要使用最新的內核。
5.Libvirt與KVM
Libvirt是一套開源的虛擬化的管理工具,主要由3部分組成:
?一套API的lib庫,支持主流的編程語言,包括C、Python、Ruby等。
?Libvirtd服務。
?命令行工具virsh。
Libvirt的設計目標是通過相同的方式管理不同的虛擬化引擎,比如KVM、Xen、HyperV、VMware ESX等。但是目前實際上多數場景使用Libvirt的是KVM,而Xen、HyperV、VMware ESX都有各自的管理工具。
Libvirt可以實現對虛擬機的管理,比如虛擬機的創建、啟動、關閉、暫停、恢復、遷移、銷毀,以及虛擬機網卡、硬盤、CPU、內存等多種設備的熱添加。
Libvirt還支持遠程的宿主機管理,只要在宿主機上啟動Libvirtd服務并做好配置,就可以通過Libvirt進行虛擬機的配置。通道可以是以下方式:
?SSH。
?TCP。
?基于TCP的TLS。
Libvirt將虛擬機的管理分為以下幾個方面:
第一,存儲池資源管理,支持本地文件系統目錄、裸設備、lvm、nfs、iscsi等方式。在虛擬機磁盤格式上支持qcow2、vmdk、raw等格式。
第二,網絡資源管理,支持Linux橋、VLAN、多網卡綁定管理,比較新的版本還支持Open vSwitch。Libvirt還支持nat和路由方式的網絡,Libvirt可以通過防火墻讓虛擬機通過宿主機建立網絡通道,和外部的網絡進行通信。
1.2 KVM與常用企業級虛擬化產品的PK
1.常用企業級虛擬化產品的比較
目前常見的企業級的虛擬化產品有4款:分別是VMware、HyperV、Xen、KVM。
(1)VMware
VMware是最早的X86平臺上的虛擬化引擎,1999年就發布了第一款產品,經過十幾年的發展和市場檢驗,產品成熟、穩定,兼容性也不錯。VMware的產品線非常全面,不僅有虛擬化的解決方案,在IaaS、SaaS、PaaS層都有自己的產品。并且VMware在網絡、存儲方面都有相關的解決方案,VMware和網絡存儲廠商在協議層面也有一些私有協議,許多主流的廠商都支持VMware一些專用的協議,和VMware一起形成了一個生態鏈。
VMware目前被EMC控股,虛擬化產品線主要有針對個人使用的VMware Workstation,針對蘋果用戶的VMware Fusion,針對企業級用戶的VMware ESXi服務器。管理工具主要是VMware vSphere套件。
VMware的產品基本上都是非開源產品,并且大部分都是收費產品,一般在傳統關鍵行業使用比較多一些,在中小型企業、互聯網行業使用得比較少一點。
(2)HyperV
HyperV是微軟的虛擬化產品,最近幾年發展非常迅速,在Windows Server 2012 R2中的HyperV支持許多非常新的虛擬化特性。HyperV必須使用64版的Windows產品,HyperV也支持Linux系統的虛擬機。
HyperV也是一款非開源的收費產品,HyperV的集群管理工具SCVMM配置非常復雜,需要配置Windows域、Windows Server集群,然后才能管理多臺宿主機。因為HyperV的成本相對比較低,所以最近幾年市場占有率也在提升,主要是一些使用Windows系統的企業使用比較多。
(3)Xen
Xen是最早的開源虛擬化引擎,由劍橋大學開發,半虛擬化的概念也是Xen最早提出的。Xen后來被思杰收購,推出了一套叫作XenServer的管理工具,XenServer于2013年年底宣布免費。Xen因為推出的時間比較長,兼容性、穩定性都不錯,目前使用Xen的主要是一些在Xen上面技術積累較多的企業。
(4)KVM
KVM比較年輕,所以出生的時候就吸取了其他虛擬化技術的優點,一開始就支持硬件虛擬化技術,沒有歷史兼容包袱。所以KVM推出來的時候,性能就非常優異。目前,KVM是OpenStack平臺上首選的虛擬化引擎。國內新一代的公有云全部采用KVM作為底層的虛擬化引擎。KVM已經成為開源解決方案的主流選擇。
2.KVM優勢
KVM的優勢主要體現在以下幾點。
(1)開源
KVM是一個開源項目,這就決定了KVM一直是開放的姿態,許多虛擬化的新技術都是首先在KVM上應用,再到其他虛擬化引擎上推廣。
虛擬化一般網絡和存儲都是難點。網絡方面,SRIOV技術就是最先在KVM上先有應用,然后再推廣到其他虛擬化引擎上。再比如SDN、Open vSwtich這些比較新的技術,都是先在KVM上得到應用。
磁盤方面,基于SSD的分層技術,都是最早在KVM上得到應用。
KVM背靠Linux這棵大樹,和Linux系統緊密結合,在Linux上的新技術都可以馬上應用到KVM上。圍繞KVM的是一個開源的生態鏈,從底層的Linux系統,到中間層的Libvirt管理工具,到云管理平臺OpenStack,莫不是如此。
(2)性能
KVM吸引許多人使用的一個動因就是性能,在同樣的硬件條件下,能提供更好的虛擬機性能,主要是因為KVM架構簡單,代碼只有2萬行,一開始就支持硬件虛擬化,這些技術特點保證了KVM的性能。
(3)免費
KVM因為是開源項目,絕大部分KVM的解決方案都是免費方案,隨著KVM的發展, KVM虛擬機越來越穩定,兼容性也越來越好,因而也就得到越來越多的應用。
(4)廣泛免費的技術支持
免費并不意味著KVM沒有技術支持。在KVM的開源社區,數量巨大的KVM技術支持者都可以提供KVM技術支持。另外,如果需要商業級支持,也可以購買紅帽公司的服務。
1.3 判斷企業是否適合使用KVM的標準
1.業務類型
目前在互聯網行業,KVM虛擬化技術是使用最廣泛的,因為互聯網行業有對新技術追求的沖動。另外中小企業也推薦使用KVM技術,因為使用KVM不需要支付額外的費用。
還有哪些企業、個人適合使用KVM呢?可以這樣總結:KVM天生就是為Linux而生的,凡是可以使用Linux的地方,就可以使用KVM,KVM天生和Linux在一起。
2.企業對成本的關注度
隨著虛擬化這幾年的快速發展,在企業的IT環境中,虛擬化已經是一個標配的技術。虛擬化帶來的好處是巨大的,虛擬化真正實現了資源池化,通過虛擬化可以將服務器資源進行切割,做到資源隨取隨用,有效節省成本,提高資源利用率。
KVM虛擬化技術經過幾年的發展,已經非常成熟,使用KVM技術更不需要在虛擬化方面支付額外的費用,可以進一步節省企業的IT成本。
3.企業對快速部署的關注度
虛擬化還有一個重要的功能就是快速部署。在宿主機層面看,虛擬機就是一個鏡像文件,要得到另外一臺虛擬機,只需要將鏡像文件復制一份就可以了,通常只有幾分鐘。而按照傳統方式部署一臺物理機,最起碼都要一個小時。通過磁盤差量的技術,甚至可以做到秒級生成虛擬機。
通過虛擬化技術,還可以實現在虛擬化層做高可用和在線遷移。虛擬化層的高可用是系統層面的高可用,比基于應用層的高可用配置要簡單很多。虛擬機的在線遷移,更是虛擬化技術的獨有手段。通過在線遷移,物理機的維護、系統的維護、網絡的維護,都可以做到不中斷服務,進一步提高了業務應用的可用性。
因為所有的虛擬機都是相同的虛擬硬件,實現了硬件層級的標準化,降低了自動化的難度,很容易搭建私有或者公有的云平臺,所以通過虛擬機技術,很容易實現以下功能:
?資源使用自動化和自助服務。
?資源池可隨時擴展。
?資源使用標準化。
?資源使用保持了很好的兼容性。
1.4 本章小結
本章介紹了虛擬化及KVM技術的演進過程,介紹了KVM技術的優勢,可以簡單地概括:凡是使用Linux系統的場景,如果上虛擬機項目,就天然適合使用KVM虛擬化技術。
下一章將介紹如何開始自己的第一臺虛擬機,在安裝第一臺虛擬機的時候有哪些地方應該注意。
- 一步一步學Spring Boot 2:微服務項目實戰
- Python快樂編程:人工智能深度學習基礎
- Docker技術入門與實戰(第3版)
- 摩登創客:與智能手機和平板電腦共舞
- Mastering Natural Language Processing with Python
- Vue.js 3.x從入門到精通(視頻教學版)
- Web Application Development with R Using Shiny(Second Edition)
- Hands-On C++ Game Animation Programming
- Python機器學習實戰
- Learning ELK Stack
- 微信小程序入門指南
- 零基礎輕松學SQL Server 2016
- R語言與網絡輿情處理
- Linux C編程:一站式學習
- Red Hat Enterprise Linux Troubleshooting Guide