本書主要介紹了云計算關(guān)鍵支撐技術(shù)——虛擬化技術(shù)的原理與實踐。書中在介紹虛擬化的概念分類及實現(xiàn)技術(shù)的基礎(chǔ)上,給出了基于KVM和QEMU的虛擬化配置方式、原理解析和應(yīng)用實踐,討論了容器虛擬化技術(shù)Docker和容器集群管理工具Kubernetes,闡述了容器虛擬化的實踐應(yīng)用,最后簡單介紹了其他主流虛擬化技術(shù),并對虛擬化技術(shù)的未來進行了展望。
全書共13章,主要內(nèi)容包括云計算與虛擬化概述、虛擬化基礎(chǔ)環(huán)境搭建、虛擬化實現(xiàn)技術(shù)、網(wǎng)絡(luò)虛擬化實現(xiàn)技術(shù)、QEMU虛擬化配置、QEMU虛擬化原理、KVM內(nèi)核模塊解析、KVM及QEMU虛擬化應(yīng)用實踐、容器虛擬化技術(shù)基礎(chǔ)、Docker高級技術(shù)、容器集群管理、其他主流虛擬化技術(shù)以及虛擬化技術(shù)未來與展望。
本書為省級“十四五”普通高等教育規(guī)劃教材,內(nèi)容新穎,注重技術(shù)應(yīng)用和實踐操作,配套資源豐富,可作為應(yīng)用型本科及高職高專計算機類專業(yè)相關(guān)課程的教材或相關(guān)領(lǐng)域技術(shù)人員的參考書。
本書為河南省“十四五”普通高等教育規(guī)劃教材。書中主要講解了虛擬化的概念分類及實現(xiàn)技術(shù),給出了基于KVM和QEMU的虛擬化配置方式、原理解析和應(yīng)用實踐,基于容器虛擬化技術(shù)Docker和容器集群管理工具Kubernetes,闡述了容器虛擬化的實踐應(yīng)用,并簡單介紹了其他主流虛擬化技術(shù)。
從廣義上說,云計算是與信息技術(shù)、軟件、互聯(lián)網(wǎng)相關(guān)的一種服務(wù),是分布式計算、效用計算、負載均衡、并行計算、網(wǎng)絡(luò)存儲和虛擬化技術(shù)等計算機技術(shù)混合演進并躍升的結(jié)果。在2020年7月29日的可信云大會上,中國信息通信研究院發(fā)布《云計算發(fā)展白皮書(2020年)》。白皮書指出,未來,云計算將迎來下一個黃金十年,進入普惠發(fā)展期。云計算以服務(wù)的形態(tài)被使用已為業(yè)界所接受,當前,全球云計算市場穩(wěn)定增長,我國公有云服務(wù)規(guī)模更是首超私有云。
云技術(shù)是一種能夠抽象、匯集和共享整個網(wǎng)絡(luò)中的可擴展資源的IT環(huán)境。虛擬化是一種可讓用戶以單個物理硬件系統(tǒng)為基礎(chǔ),創(chuàng)建多個模擬環(huán)境或?qū)S觅Y源的技術(shù)。虛擬化能將計算機的各種實體資源,如服務(wù)器、網(wǎng)絡(luò)、內(nèi)存及存儲器等抽象轉(zhuǎn)換后以軟件的形式呈現(xiàn)出來,不受實體資源架設(shè)方式、地域或物理組態(tài)的限制。虛擬化的核心特點在于可以提高IT資源的使用敏捷性、靈活性和可擴展性,同時大幅節(jié)約成本。簡而言之,云計算是一種環(huán)境,虛擬化是支撐云計算的一項基礎(chǔ)技術(shù)。
近些年來,隨著多核系統(tǒng)、集群、云計算和邊緣計算的廣泛部署,虛擬化技術(shù)在商業(yè)應(yīng)用上的優(yōu)勢日益突顯,不僅降低了IT成本,還增強了系統(tǒng)的安全性和可靠性,虛擬化的概念也逐漸深入人們?nèi)粘5墓ぷ髋c生活中。
虛擬化技術(shù)是一套解決方案,完整的服務(wù)器虛擬化解決方案需要CPU、主板芯片組、BIOS和軟件的支持。KVM(基于內(nèi)核的虛擬機)作為一個主流Linux系統(tǒng)下、x86硬件平臺上的全功能開源虛擬化解決方案,包含了一個可加載的內(nèi)核模塊kvm.ko,用來提供虛擬化核心架構(gòu)和處理器規(guī)范。從Linux Kernel 2.6.20版本開始,KVM作為Linux內(nèi)核的一個模塊,就包含在Linux內(nèi)核代碼之中,負責(zé)虛擬機的創(chuàng)建、虛擬機內(nèi)存的分配、虛擬CPU寄存器的讀/寫以及虛擬CPU的運行等。但是操作虛擬機僅有KVM模塊是不夠的,還必須有一個運行于用戶空間的工具,KVM開發(fā)者選擇了開源虛擬化軟件QEMU。QEMU是一款開源的硬件模擬器及虛擬機監(jiān)控器。QEMU用于模擬各種硬件資源,提供I/O設(shè)備模型以及訪問外設(shè)的途徑,libkvm是KVM提供給QEMU的應(yīng)用程序接口。KVM和QEMU的結(jié)合,成就了基于KVM的虛擬化技術(shù)。
基于KVM的虛擬化技術(shù)的虛擬機會占用較多的硬件資源,需要進一步提高服務(wù)器的資源利用率。隨著虛擬化技術(shù)的發(fā)展,出現(xiàn)了“輕量級”的容器虛擬化技術(shù),其中最流行的就是Docker。Docker利用Linux容器技術(shù)實現(xiàn)類似虛擬機的功能,可以用更少的硬件資源給用戶提供更多的計算資源。Docker本身不是容器,它是創(chuàng)建容器的工具,是應(yīng)用容器引擎。傳統(tǒng)虛擬機通過虛擬硬件并在其上運行操作系統(tǒng),然后在操作系統(tǒng)上運行所需應(yīng)用進程。Docker容器與虛擬機不同,它不需要操作系統(tǒng),只需應(yīng)用軟件必要的庫資源和環(huán)境設(shè)置即可運行;應(yīng)用進程直接運行于宿主機內(nèi)核,容器沒有自己的內(nèi)核,也沒有進行硬件虛擬。Docker因此變得高效、輕量,并保證部署在任何環(huán)境中的軟件都能始終如一地運行。
Docker雖然好用,但面對強大的集群和成千上萬的容器,想要將Docker用于具體的業(yè)務(wù),對Docker的容器進行編排、管理和調(diào)度是很困難的。人們需要一套管理系統(tǒng),能對Docker及容器進行更高級、更靈活的管理。于是,Kubernetes應(yīng)運而生。Kubernetes是基于容器的集群管理平臺(K8s是Kubernetes的縮寫,用8替代了8個字母“ubernete”),是一個可移植的、可擴展的開源平臺,Google在2014年將其開源。Kubernetes用于管理容器化的工作負載和服務(wù),可以快速部署和擴展應(yīng)用,可促進聲明式配置和自動化。Kubernetes支持各種形式的云計算平臺,且能自動部署、自動重啟、自動伸縮和擴展。
本書對云計算中關(guān)鍵的虛擬化技術(shù)進行了深入的分析,在虛擬化概念的基礎(chǔ)上,進行了虛擬化技術(shù)分類,闡述了CPU、內(nèi)存、網(wǎng)絡(luò)等虛擬化實現(xiàn)技術(shù)。書中首先以KVM和QEMU為例,講解了服務(wù)器虛擬化的詳細配置方式和虛擬化原理,進行了基于KVM虛擬化的應(yīng)用實踐;然后對流行的容器虛擬化技術(shù)Docker進行了詳細分析;接著簡要介紹了容器集群管理工具Kubernetes;最后介紹了其他主流虛擬化技術(shù),并對虛擬化技術(shù)的未來進行了展望。
本書內(nèi)容新穎,注重技術(shù)應(yīng)用和實踐操作,旨在培養(yǎng)掌握KVM和QEMU虛擬化技術(shù)、Docker技術(shù)和Kubernetes技術(shù),并能夠進行云計算領(lǐng)域虛擬化技術(shù)使用與開發(fā)的工程技術(shù)人員。在對每章內(nèi)容的組織上,本書注重基礎(chǔ)理論知識和實踐動手能力的結(jié)合,在保證云計算虛擬化基礎(chǔ)理論系統(tǒng)性的同時,把QEMU配置、Docker使用和配置、Kubernetes使用和配置等實踐操作融入相關(guān)章節(jié)中,促進“教、學(xué)、做”一體化教學(xué)模式的實現(xiàn)。
本書由張世海和韓義波擔(dān)任主編,邢靜宇和劉斌擔(dān)任副主編,單平平、張政為參編。其中,第1章、第10章、第12章中從第12.1節(jié)至第12.2節(jié)由韓義波編寫,第2章、第8章、第11章、第12章中從12.3節(jié)至第12.6節(jié)由邢靜宇編寫,第3章、第5章、第13章由劉斌編寫,第6章、第9章由單平平編寫,第4章、第7章由張政編寫,張世海負責(zé)全書的統(tǒng)籌及校對。
本書所提供的配套資源文件,讀者可登錄西安電子科技大學(xué)出版社網(wǎng)站(http://www.xduph.com)下載。
本書在編寫過程中得到了很多同事和朋友的大力支持,一些同行專家及相關(guān)行業(yè)人士也提出了很多寶貴意見,在此一并表示感謝。
虛擬化技術(shù)是一個比較新的技術(shù)和領(lǐng)域,盡管編委會成員在本書編寫過程中付出了很多努力,但限于編者的水平,書中不足之處在所難免。讀者如有意見和建議,可隨時聯(lián)系我們。我們的郵箱為xingjingyu@nyist.edu.cn,我們會積極聽取您的意見建議,密切跟蹤虛擬化技術(shù)新的發(fā)展動向,在本書再版時修改。
本書為河南省“十四五”普通高等教育規(guī)劃教材。
張世海 韓義波
2021年12月1日
第1章 云計算與虛擬化概述 1
1.1 云計算基礎(chǔ) 2
1.1.1 云計算的起源與發(fā)展現(xiàn)狀 2
1.1.2 云計算的定義與典型應(yīng)用 6
1.1.3 云計算的體系架構(gòu) 9
1.1.4 云計算的部署模型 10
1.1.5 云計算的服務(wù)模式 10
1.1.6 云計算安全 11
1.2 虛擬化技術(shù)基礎(chǔ) 12
1.2.1 虛擬化技術(shù)的定義與作用 12
1.2.2 虛擬化技術(shù)的發(fā)展 13
1.2.3 虛擬化技術(shù)的分類 17
1.3 云計算與虛擬化的關(guān)系 23
本章小結(jié) 24
本章習(xí)題 24
第2章 虛擬化基礎(chǔ)環(huán)境搭建 25
2.1 虛擬化基礎(chǔ)環(huán)境介紹 26
2.2 VMware下載及安裝 26
2.3 CentOS ISO文件下載 30
2.4 VMware中CentOS安裝 31
2.5 CentOS基本配置 37
2.5.1 終端使用root用戶 37
2.5.2 基礎(chǔ)網(wǎng)絡(luò)的配置 37
2.5.3 源的更改 43
2.5.4 允許root用戶遠程登錄 45
2.5.5 安裝VMware Tools 47
本章小結(jié) 48
本章習(xí)題 48
第3章 虛擬化實現(xiàn)技術(shù) 49
3.1 系統(tǒng)虛擬化架構(gòu) 50
3.2 處理器虛擬化實現(xiàn)技術(shù) 52
3.2.1 vCPU 53
3.2.2 Intel VT-x 54
3.2.3 AMD SVM 55
3.3 內(nèi)存虛擬化實現(xiàn)技術(shù) 55
3.3.1 Intel EPT 57
3.3.2 AMD NPT 58
3.4 I/O虛擬化實現(xiàn)技術(shù) 59
3.4.1 Intel VT-d 60
3.4.2 IOMMU 62
3.4.3 SR-IOV 63
3.4.4 Virtio 65
本章小結(jié) 67
本章習(xí)題 67
第4章 網(wǎng)絡(luò)虛擬化實現(xiàn)技術(shù) 68
4.1 SDN 69
4.1.1 SDN概述 69
4.1.2 SDN網(wǎng)絡(luò)架構(gòu) 70
4.1.3 OpenFlow關(guān)鍵組件 72
4.1.4 OpenFlow消息類型 75
4.1.5 OpenFlow應(yīng)用 77
4.2 NFV 79
4.2.1 NFV概述 79
4.2.2 NFV與SDN的關(guān)系 80
4.2.3 NFV體系架構(gòu) 81
4.2.4 NFV部署方式 82
4.2.5 NFV應(yīng)用案例 84
4.3 Mininet 85
4.3.1 Mininet概述 85
4.3.2 Mininet系統(tǒng)架構(gòu) 86
4.3.3 Mininet安裝部署 87
4.3.4 Mininet命令行操作 90
4.4 Open vSwitch 94
4.4.1 Open vSwitch概述 94
4.4.2 Open vSwitch架構(gòu)與組件 95
4.5 OpenStack Neutron 96
4.5.1 OpenStack Neutron概述 96
4.5.2 OpenStack Neutron網(wǎng)絡(luò)架構(gòu) 97
本章小結(jié) 98
本章習(xí)題 98
第5章 QEMU虛擬化配置 99
5.1 KVM與QEMU環(huán)境構(gòu)建 100
5.1.1 KVM與QEMU關(guān)系 100
5.1.2 宿主機環(huán)境的驗證與配置 101
5.1.3 QEMU編譯與安裝 104
5.1.4 KVM與QEMU虛擬化
環(huán)境驗證 107
5.2 QEMU基本命令 110
5.3 CPU配置 112
5.3.1 CPU設(shè)置的基本參數(shù) 112
5.3.2 CPU模型 116
5.4 內(nèi)存配置 118
5.4.1 內(nèi)存設(shè)置的基本參數(shù) 118
5.4.2 大頁(HugePage) 119
5.5 存儲器配置 121
5.5.1 常見的存儲器配置 121
5.5.2 啟動順序配置 122
5.5.3 QEMU支持的鏡像文件格式 123
5.5.4 qemu-img子命令 125
5.5.5 Ubuntu客戶機鏡像制作 131
5.5.6 Windows客戶機鏡像制作 133
5.6 網(wǎng)絡(luò)配置 140
5.6.1 網(wǎng)橋模式 143
5.6.2 NAT模式 148
本章小結(jié) 151
本章習(xí)題 152
第6章 QEMU虛擬化原理 153
6.1 QEMU運行模式 154
6.2 QEMU軟件構(gòu)成 154
6.2.1 QEMU源碼架構(gòu) 155
6.2.2 QEMU線程事件模型 161
6.2.3 Libkvm模塊 167
6.2.4 Virtio組件 167
6.3 QEMU內(nèi)存模型 170
6.4 QEMU的PCI總線與設(shè)備 172
6.4.1 PCI結(jié)構(gòu)簡介 172
6.4.2 QEMU的PCI總線 172
6.4.3 QEMU的PCI-PCI橋 173
6.4.4 QEMU的PCI設(shè)備 174
本章小結(jié) 179
本章習(xí)題 179
第7章 KVM內(nèi)核模塊解析 180
7.1 KVM內(nèi)核模塊概述 181
7.1.1 KVM模塊架構(gòu) 181
7.1.2 Makefile文件分析 182
7.1.3 KVM內(nèi)核源碼結(jié)構(gòu) 183
7.2 KVM API 185
7.2.1 KVM API概述 185
7.2.2 KVM API的結(jié)構(gòu)體 186
7.2.3 System ioctl調(diào)用 189
7.2.4 VM ioctl調(diào)用 189
7.2.5 vCPU ioctl調(diào)用 190
7.3 KVM內(nèi)核模塊數(shù)據(jù)結(jié)構(gòu) 193
7.3.1 kvm結(jié)構(gòu)體 193
7.3.2 kvm_vcpu結(jié)構(gòu)體 195
7.3.3 kvm_x86_ops結(jié)構(gòu)體 198
7.4 KVM內(nèi)核模塊執(zhí)行流程 199
7.4.1 初始化流程 200
7.4.2 虛擬機創(chuàng)建流程 203
7.4.3 CPU虛擬化流程 206
7.4.4 內(nèi)存虛擬化流程 211
7.4.5 客戶機異常處理流程 215
本章小結(jié) 216
本章習(xí)題 216
第8章 KVM及QEMU虛擬化應(yīng)用實踐 217
8.1 Libvirt 218
8.1.1 Libvirt簡介 218
8.1.2 Libvirt的yum安裝 220
8.1.3 libvirtd進程 224
8.1.4 Virsh的常用命令 227
8.2 Virt-Manager 230
8.2.1 Virt-Manager的yum安裝 230
8.2.2 Virt-Manager的使用 231
8.3 基于Libvirt的配置與開發(fā) 242
8.3.1 Libvirt的配置文件 242
8.3.2 Libvirt中域的XML配置
文件含義 244
8.3.3 Libvirt API簡介 247
8.3.4 Libvirt建立到Hypervisor的
連接 248
8.3.5 Libvirt API的C語言使用示例 253
8.3.6 Libvirt API的Python語言
使用示例 259
8.4 KVM及QEMU虛擬化應(yīng)用案例
——基于Python的輕量級KVM
虛擬機管理系統(tǒng) 262
8.4.1 主要函數(shù)介紹 263
8.4.2 程序源碼 264
8.4.3 程序操作步驟 267
本章小結(jié) 270
本章習(xí)題 271
第9章 容器虛擬化技術(shù)基礎(chǔ) 272
9.1 容器虛擬化概述 273
9.1.1 容器技術(shù)的前世今生 273
9.1.2 容器基本原理 274
9.1.3 Docker起源及架構(gòu) 280
9.2 Docker安裝與部署 282
9.2.1 Docker的安裝 283
9.2.2 鏡像加速 287
9.3 Docker鏡像 288
9.3.1 Docker鏡像基礎(chǔ) 288
9.3.2 構(gòu)建鏡像 290
9.3.3 查看鏡像 295
9.3.4 分發(fā)鏡像 297
9.3.5 搜索鏡像 300
9.3.6 鏡像的其他操作 301
9.4 Docker倉庫 303
9.4.1 Docker倉庫簡介 303
9.4.2 Registry私有倉庫的搭建和
使用 305
9.5 Docker容器 307
9.5.1 Docker容器基礎(chǔ) 307
9.5.2 創(chuàng)建與啟動容器 308
9.5.3 查看容器 310
9.5.4 分發(fā)容器 311
9.5.5 進入容器內(nèi)部 312
9.5.6 容器其他操作 314
9.6 Docker網(wǎng)絡(luò) 315
9.6.1 Docker網(wǎng)絡(luò)基礎(chǔ) 315
9.6.2 Docker網(wǎng)絡(luò)模式 316
9.6.3 Bridge模式下容器間互連 322
9.6.4 Bridge模式下容器與外部
網(wǎng)絡(luò)連接 325
本章小結(jié) 327
本章習(xí)題 327
第10章 Docker高級技術(shù) 328
10.1 Docker數(shù)據(jù)管理 329
10.1.1 數(shù)據(jù)卷及其常見操作 329
10.1.2 數(shù)據(jù)卷容器及其常見操作 333
10.1.3 備份、恢復(fù)和遷移數(shù)據(jù)卷 334
10.2 Docker日志與監(jiān)控 336
10.2.1 Docker默認日志記錄 336
10.2.2 使用Docker工具監(jiān)測容器 338
10.2.3 使用cAdvisor監(jiān)控容器 339
10.3 Docker安全 341
10.3.1 Linux內(nèi)核安全模塊 341
10.3.2 Docker資源控制 345
10.4 Docker Compose 352
10.4.1 Docker Compose簡介 353
10.4.2 Docker Compose配置文件 354
10.4.3 Docker Compose常見命令 356
10.4.4 Docker Compose實戰(zhàn) 358
10.5 Docker Machine 360
10.5.1 Docker Machine簡介 360
10.5.2 Docker Machine常見命令 362
10.5.3 Docker Machine實戰(zhàn) 362
10.6 Docker API 366
10.6.1 Docker API簡介 366
10.6.2 Docker Remote API 366
10.6.3 Docker Registry API 371
本章小結(jié) 372
本章習(xí)題 372
第11章 容器集群管理 373
11.1 容器集群管理技術(shù) 374
11.1.1 容器技術(shù)的發(fā)展 374
11.1.2 容器集群管理的優(yōu)勢 374
11.2 Docker Swarm概述 375
11.2.1 Docker Swarm簡介 375
11.2.2 Docker Swarm的關(guān)鍵概念 376
11.2.3 Docker Swarm的常見命令 377
11.3 Docker Swarm集群搭建與實踐 378
11.3.1 Docker Swarm集群搭建 378
11.3.2 Docker Swarm集群服務(wù)創(chuàng)建 380
11.3.3 Docker Swarm集群服務(wù)擴容 380
11.3.4 Docker Swarm集群節(jié)點離開 381
11.3.5 Docker Swarm集群服務(wù)
滾動升級 382
11.4 Kubernetes概述 384
11.4.1 Kubernetes簡介 384
11.4.2 Kubernetes組件 385
11.4.3 Kubernetes的重要概念 387
11.4.4 Kubernetes功能與架構(gòu) 391
11.5 Kubernetes集群搭建與實踐 392
11.5.1 安裝前的準備 392
11.5.2 安裝Master節(jié)點 392
11.5.3 部署Master節(jié)點 396
11.5.4 安裝Node節(jié)點 398
11.5.5 將Node節(jié)點加入集群 399
11.5.6 部署Kubernetes的
第一個應(yīng)用 400
本章小結(jié) 402
本章習(xí)題 403
第12章 其他主流虛擬化技術(shù) 404
12.1 VMware 405
12.1.1 VMware簡介 405
12.1.2 VMware產(chǎn)品分類 405
12.2 Hyper-V 411
12.2.1 Hyper-V的功能 413
12.2.2 開啟Hyper-V 414
12.3 Xen Project 415
12.3.1 Xen Project的架構(gòu) 416
12.3.2 Xen Project的功能 417
12.3.3 Xen Project安裝 419
12.4 oVirt 422
12.4.1 oVirt的功能 422
12.4.2 oVirt安裝 424
12.5 Proxmox VE 425
12.5.1 Proxmox VE的功能 426
12.5.2 Proxmox VE的安裝 427
12.6 VirtualBox 428
12.6.1 VirtualBox的功能 428
12.6.2 Virtual Box的安裝 430
本章小結(jié) 431
本章習(xí)題 431
第13章 虛擬化技術(shù)未來與展望 432
13.1 容器和虛擬機的發(fā)展 432
13.2 虛擬機內(nèi)運行容器的發(fā)展 434
13.3 以容器為核心的云計算時代 435
13.4 虛擬化技術(shù)的發(fā)展趨勢 436
本章小結(jié) 437
本章習(xí)題 437
參考文獻 438