本书主要介绍了云计算关键支撑技术——虚拟化技术的原理与实践。书中在介绍虚拟化的概念分类及实现技术的基础上,给出了基于KVM和QEMU的虚拟化配置方式、原理解析和应用实践,讨论了容器虚拟化技术Docker和容器集群管理工具Kubernetes,阐述了容器虚拟化的实践应用,最后简单介绍了其他主流虚拟化技术,并对虚拟化技术的未来进行了展望。
全书共13章,主要内容包括云计算与虚拟化概述、虚拟化基础环境搭建、虚拟化实现技术、网络虚拟化实现技术、QEMU虚拟化配置、QEMU虚拟化原理、KVM内核模块解析、KVM及QEMU虚拟化应用实践、容器虚拟化技术基础、Docker高级技术、容器集群管理、其他主流虚拟化技术以及虚拟化技术未来与展望。
本书为省级“十四五”普通高等教育规划教材,内容新颖,注重技术应用和实践操作,配套资源丰富,可作为应用型本科及高职高专计算机类专业相关课程的教材或相关领域技术人员的参考书。
本书为河南省“十四五”普通高等教育规划教材。书中主要讲解了虚拟化的概念分类及实现技术,给出了基于KVM和QEMU的虚拟化配置方式、原理解析和应用实践,基于容器虚拟化技术Docker和容器集群管理工具Kubernetes,阐述了容器虚拟化的实践应用,并简单介绍了其他主流虚拟化技术。
从广义上说,云计算是与信息技术、软件、互联网相关的一种服务,是分布式计算、效用计算、负载均衡、并行计算、网络存储和虚拟化技术等计算机技术混合演进并跃升的结果。在2020年7月29日的可信云大会上,中国信息通信研究院发布《云计算发展白皮书(2020年)》。白皮书指出,未来,云计算将迎来下一个黄金十年,进入普惠发展期。云计算以服务的形态被使用已为业界所接受,当前,全球云计算市场稳定增长,我国公有云服务规模更是首超私有云。
云技术是一种能够抽象、汇集和共享整个网络中的可扩展资源的IT环境。虚拟化是一种可让用户以单个物理硬件系统为基础,创建多个模拟环境或专用资源的技术。虚拟化能将计算机的各种实体资源,如服务器、网络、内存及存储器等抽象转换后以软件的形式呈现出来,不受实体资源架设方式、地域或物理组态的限制。虚拟化的核心特点在于可以提高IT资源的使用敏捷性、灵活性和可扩展性,同时大幅节约成本。简而言之,云计算是一种环境,虚拟化是支撑云计算的一项基础技术。
近些年来,随着多核系统、集群、云计算和边缘计算的广泛部署,虚拟化技术在商业应用上的优势日益突显,不仅降低了IT成本,还增强了系统的安全性和可靠性,虚拟化的概念也逐渐深入人们日常的工作与生活中。
虚拟化技术是一套解决方案,完整的服务器虚拟化解决方案需要CPU、主板芯片组、BIOS和软件的支持。KVM(基于内核的虚拟机)作为一个主流Linux系统下、x86硬件平台上的全功能开源虚拟化解决方案,包含了一个可加载的内核模块kvm.ko,用来提供虚拟化核心架构和处理器规范。从Linux Kernel 2.6.20版本开始,KVM作为Linux内核的一个模块,就包含在Linux内核代码之中,负责虚拟机的创建、虚拟机内存的分配、虚拟CPU寄存器的读/写以及虚拟CPU的运行等。但是操作虚拟机仅有KVM模块是不够的,还必须有一个运行于用户空间的工具,KVM开发者选择了开源虚拟化软件QEMU。QEMU是一款开源的硬件模拟器及虚拟机监控器。QEMU用于模拟各种硬件资源,提供I/O设备模型以及访问外设的途径,libkvm是KVM提供给QEMU的应用程序接口。KVM和QEMU的结合,成就了基于KVM的虚拟化技术。
基于KVM的虚拟化技术的虚拟机会占用较多的硬件资源,需要进一步提高服务器的资源利用率。随着虚拟化技术的发展,出现了“轻量级”的容器虚拟化技术,其中最流行的就是Docker。Docker利用Linux容器技术实现类似虚拟机的功能,可以用更少的硬件资源给用户提供更多的计算资源。Docker本身不是容器,它是创建容器的工具,是应用容器引擎。传统虚拟机通过虚拟硬件并在其上运行操作系统,然后在操作系统上运行所需应用进程。Docker容器与虚拟机不同,它不需要操作系统,只需应用软件必要的库资源和环境设置即可运行;应用进程直接运行于宿主机内核,容器没有自己的内核,也没有进行硬件虚拟。Docker因此变得高效、轻量,并保证部署在任何环境中的软件都能始终如一地运行。
Docker虽然好用,但面对强大的集群和成千上万的容器,想要将Docker用于具体的业务,对Docker的容器进行编排、管理和调度是很困难的。人们需要一套管理系统,能对Docker及容器进行更高级、更灵活的管理。于是,Kubernetes应运而生。Kubernetes是基于容器的集群管理平台(K8s是Kubernetes的缩写,用8替代了8个字母“ubernete”),是一个可移植的、可扩展的开源平台,Google在2014年将其开源。Kubernetes用于管理容器化的工作负载和服务,可以快速部署和扩展应用,可促进声明式配置和自动化。Kubernetes支持各种形式的云计算平台,且能自动部署、自动重启、自动伸缩和扩展。
本书对云计算中关键的虚拟化技术进行了深入的分析,在虚拟化概念的基础上,进行了虚拟化技术分类,阐述了CPU、内存、网络等虚拟化实现技术。书中首先以KVM和QEMU为例,讲解了服务器虚拟化的详细配置方式和虚拟化原理,进行了基于KVM虚拟化的应用实践;然后对流行的容器虚拟化技术Docker进行了详细分析;接着简要介绍了容器集群管理工具Kubernetes;最后介绍了其他主流虚拟化技术,并对虚拟化技术的未来进行了展望。
本书内容新颖,注重技术应用和实践操作,旨在培养掌握KVM和QEMU虚拟化技术、Docker技术和Kubernetes技术,并能够进行云计算领域虚拟化技术使用与开发的工程技术人员。在对每章内容的组织上,本书注重基础理论知识和实践动手能力的结合,在保证云计算虚拟化基础理论系统性的同时,把QEMU配置、Docker使用和配置、Kubernetes使用和配置等实践操作融入相关章节中,促进“教、学、做”一体化教学模式的实现。
本书由张世海和韩义波担任主编,邢静宇和刘斌担任副主编,单平平、张政为参编。其中,第1章、第10章、第12章中从第12.1节至第12.2节由韩义波编写,第2章、第8章、第11章、第12章中从12.3节至第12.6节由邢静宇编写,第3章、第5章、第13章由刘斌编写,第6章、第9章由单平平编写,第4章、第7章由张政编写,张世海负责全书的统筹及校对。
本书所提供的配套资源文件,读者可登录西安电子科技大学出版社网站(http://www.xduph.com)下载。
本书在编写过程中得到了很多同事和朋友的大力支持,一些同行专家及相关行业人士也提出了很多宝贵意见,在此一并表示感谢。
虚拟化技术是一个比较新的技术和领域,尽管编委会成员在本书编写过程中付出了很多努力,但限于编者的水平,书中不足之处在所难免。读者如有意见和建议,可随时联系我们。我们的邮箱为xingjingyu@nyist.edu.cn,我们会积极听取您的意见建议,密切跟踪虚拟化技术新的发展动向,在本书再版时修改。
本书为河南省“十四五”普通高等教育规划教材。
张世海 韩义波
2021年12月1日
第1章 云计算与虚拟化概述 1
1.1 云计算基础 2
1.1.1 云计算的起源与发展现状 2
1.1.2 云计算的定义与典型应用 6
1.1.3 云计算的体系架构 9
1.1.4 云计算的部署模型 10
1.1.5 云计算的服务模式 10
1.1.6 云计算安全 11
1.2 虚拟化技术基础 12
1.2.1 虚拟化技术的定义与作用 12
1.2.2 虚拟化技术的发展 13
1.2.3 虚拟化技术的分类 17
1.3 云计算与虚拟化的关系 23
本章小结 24
本章习题 24
第2章 虚拟化基础环境搭建 25
2.1 虚拟化基础环境介绍 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 基础网络的配置 37
2.5.3 源的更改 43
2.5.4 允许root用户远程登录 45
2.5.5 安装VMware Tools 47
本章小结 48
本章习题 48
第3章 虚拟化实现技术 49
3.1 系统虚拟化架构 50
3.2 处理器虚拟化实现技术 52
3.2.1 vCPU 53
3.2.2 Intel VT-x 54
3.2.3 AMD SVM 55
3.3 内存虚拟化实现技术 55
3.3.1 Intel EPT 57
3.3.2 AMD NPT 58
3.4 I/O虚拟化实现技术 59
3.4.1 Intel VT-d 60
3.4.2 IOMMU 62
3.4.3 SR-IOV 63
3.4.4 Virtio 65
本章小结 67
本章习题 67
第4章 网络虚拟化实现技术 68
4.1 SDN 69
4.1.1 SDN概述 69
4.1.2 SDN网络架构 70
4.1.3 OpenFlow关键组件 72
4.1.4 OpenFlow消息类型 75
4.1.5 OpenFlow应用 77
4.2 NFV 79
4.2.1 NFV概述 79
4.2.2 NFV与SDN的关系 80
4.2.3 NFV体系架构 81
4.2.4 NFV部署方式 82
4.2.5 NFV应用案例 84
4.3 Mininet 85
4.3.1 Mininet概述 85
4.3.2 Mininet系统架构 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架构与组件 95
4.5 OpenStack Neutron 96
4.5.1 OpenStack Neutron概述 96
4.5.2 OpenStack Neutron网络架构 97
本章小结 98
本章习题 98
第5章 QEMU虚拟化配置 99
5.1 KVM与QEMU环境构建 100
5.1.1 KVM与QEMU关系 100
5.1.2 宿主机环境的验证与配置 101
5.1.3 QEMU编译与安装 104
5.1.4 KVM与QEMU虚拟化
环境验证 107
5.2 QEMU基本命令 110
5.3 CPU配置 112
5.3.1 CPU设置的基本参数 112
5.3.2 CPU模型 116
5.4 内存配置 118
5.4.1 内存设置的基本参数 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 网络配置 140
5.6.1 网桥模式 143
5.6.2 NAT模式 148
本章小结 151
本章习题 152
第6章 QEMU虚拟化原理 153
6.1 QEMU运行模式 154
6.2 QEMU软件构成 154
6.2.1 QEMU源码架构 155
6.2.2 QEMU线程事件模型 161
6.2.3 Libkvm模块 167
6.2.4 Virtio组件 167
6.3 QEMU内存模型 170
6.4 QEMU的PCI总线与设备 172
6.4.1 PCI结构简介 172
6.4.2 QEMU的PCI总线 172
6.4.3 QEMU的PCI-PCI桥 173
6.4.4 QEMU的PCI设备 174
本章小结 179
本章习题 179
第7章 KVM内核模块解析 180
7.1 KVM内核模块概述 181
7.1.1 KVM模块架构 181
7.1.2 Makefile文件分析 182
7.1.3 KVM内核源码结构 183
7.2 KVM API 185
7.2.1 KVM API概述 185
7.2.2 KVM API的结构体 186
7.2.3 System ioctl调用 189
7.2.4 VM ioctl调用 189
7.2.5 vCPU ioctl调用 190
7.3 KVM内核模块数据结构 193
7.3.1 kvm结构体 193
7.3.2 kvm_vcpu结构体 195
7.3.3 kvm_x86_ops结构体 198
7.4 KVM内核模块执行流程 199
7.4.1 初始化流程 200
7.4.2 虚拟机创建流程 203
7.4.3 CPU虚拟化流程 206
7.4.4 内存虚拟化流程 211
7.4.5 客户机异常处理流程 215
本章小结 216
本章习题 216
第8章 KVM及QEMU虚拟化应用实践 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的配置与开发 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虚拟化应用案例
——基于Python的轻量级KVM
虚拟机管理系统 262
8.4.1 主要函数介绍 263
8.4.2 程序源码 264
8.4.3 程序操作步骤 267
本章小结 270
本章习题 271
第9章 容器虚拟化技术基础 272
9.1 容器虚拟化概述 273
9.1.1 容器技术的前世今生 273
9.1.2 容器基本原理 274
9.1.3 Docker起源及架构 280
9.2 Docker安装与部署 282
9.2.1 Docker的安装 283
9.2.2 镜像加速 287
9.3 Docker镜像 288
9.3.1 Docker镜像基础 288
9.3.2 构建镜像 290
9.3.3 查看镜像 295
9.3.4 分发镜像 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容器基础 307
9.5.2 创建与启动容器 308
9.5.3 查看容器 310
9.5.4 分发容器 311
9.5.5 进入容器内部 312
9.5.6 容器其他操作 314
9.6 Docker网络 315
9.6.1 Docker网络基础 315
9.6.2 Docker网络模式 316
9.6.3 Bridge模式下容器间互连 322
9.6.4 Bridge模式下容器与外部
网络连接 325
本章小结 327
本章习题 327
第10章 Docker高级技术 328
10.1 Docker数据管理 329
10.1.1 数据卷及其常见操作 329
10.1.2 数据卷容器及其常见操作 333
10.1.3 备份、恢复和迁移数据卷 334
10.2 Docker日志与监控 336
10.2.1 Docker默认日志记录 336
10.2.2 使用Docker工具监测容器 338
10.2.3 使用cAdvisor监控容器 339
10.3 Docker安全 341
10.3.1 Linux内核安全模块 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实战 358
10.5 Docker Machine 360
10.5.1 Docker Machine简介 360
10.5.2 Docker Machine常见命令 362
10.5.3 Docker Machine实战 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
本章小结 372
本章习题 372
第11章 容器集群管理 373
11.1 容器集群管理技术 374
11.1.1 容器技术的发展 374
11.1.2 容器集群管理的优势 374
11.2 Docker Swarm概述 375
11.2.1 Docker Swarm简介 375
11.2.2 Docker Swarm的关键概念 376
11.2.3 Docker Swarm的常见命令 377
11.3 Docker Swarm集群搭建与实践 378
11.3.1 Docker Swarm集群搭建 378
11.3.2 Docker Swarm集群服务创建 380
11.3.3 Docker Swarm集群服务扩容 380
11.3.4 Docker Swarm集群节点离开 381
11.3.5 Docker Swarm集群服务
滚动升级 382
11.4 Kubernetes概述 384
11.4.1 Kubernetes简介 384
11.4.2 Kubernetes组件 385
11.4.3 Kubernetes的重要概念 387
11.4.4 Kubernetes功能与架构 391
11.5 Kubernetes集群搭建与实践 392
11.5.1 安装前的准备 392
11.5.2 安装Master节点 392
11.5.3 部署Master节点 396
11.5.4 安装Node节点 398
11.5.5 将Node节点加入集群 399
11.5.6 部署Kubernetes的
第一个应用 400
本章小结 402
本章习题 403
第12章 其他主流虚拟化技术 404
12.1 VMware 405
12.1.1 VMware简介 405
12.1.2 VMware产品分类 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的架构 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
本章小结 431
本章习题 431
第13章 虚拟化技术未来与展望 432
13.1 容器和虚拟机的发展 432
13.2 虚拟机内运行容器的发展 434
13.3 以容器为核心的云计算时代 435
13.4 虚拟化技术的发展趋势 436
本章小结 437
本章习题 437
参考文献 438