第一章 虚拟化简介

1.1 云计算概述

1.1.1 什么是云计算

  1. 云计算
    • 定义:是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

1.1.2 云计算的历史

  1. 2006年8月,亚马逊( Amazon )发布了 “弹性计算云” ( Elastic Compute Cloud );
  2. 2008年10月,微软宣布了名为 Azure 的云计算产品,并在2010年2月正式发布 Windows Azure;
  3. 2008年4月,谷歌发布了 Google App Engine Beta ,但直到2013年12月,其 Google Compute Engine 对标 AWS EC2 才正式可用。
  4. 2010年7月, NASA 和 Rackspace 共同发布了著名的开源项目 OpenStack ;
  5. 从国内看,2009年,阿里巴巴率先成立了阿里云部门,一开始只对内服务于其自身的电商业务。2011年7月,阿里云才开始正式对外销售云服务。

1.1.3 云计算的几种服务模型

云计算的模型是以服务为导向的,根据提供的服务层次不同,可分为:IaaS ( Infrastructure as a Service ,基础架构即服务)、PaaS ( Platform as a Service ,平台即服务)、SaaS ( Software as a Service ,软件及服务 )。它们提供的服务越来越抽象,用户实际控制的范围也越来越小,如下图所示。

云计算服务层次模型

  1. SaaS,软件即服务

    云服务提供商提供给客户直接使用软件服务,如 Google Docs、Microsoft CRM、Salesforce.com 等。用户不必自己维护软件本身,只管使用软件提供的服务。用户为该软件提供的服务付费。

  2. PaaS,平台即服务

    云服务提供商提供给客户开发、运维应用程序的运行环境,用户负责维护自己的应用程序,但并不掌控操作系统、硬件、以及运作的网络基础架构。如 Google App Engine 等。平台是指应用程序运行环境。通常,这类用户在云环境中运维的应用程序会再提供软件服务给他的下级客户。用户为自己的程序的运行环境付费。

  3. IaaS,基础设施即服务

    用户有更大的自主权,能控制自己的操作系统、网络连接(虚拟的)、硬件(虚拟的)环境等,云服务提供商提供的是一个虚拟的主机环境。如 Google Compute Engine、AWS EC2 等。用户为一个主机环境付费。

以上几种模型,无论是哪种云计算服务模型,虚拟化( Virtualization )都是其基础。

1.2 虚拟化技术

1.2.1 什么是虚拟化

  1. 维基百科的定义:” In computing , virtualization refers to the act of creating a virtual ( rather than actual ) version of something , including virtual computer hardware platforms , storage devices , and computer network resources . “ 在计算机领域,虚拟化指创建某事物的虚拟(而非实际)版本,包括虚拟的计算机硬件平台、存储设备,以及计算机网络资源。

    可见,虚拟化是一种资源管理技术,它将计算机的各种实体资源( CPU、内存、存储、网络等)予以抽象和转化出来,并提供分割、重新组合,以达到最大化利用物理资源的目的。

1.2.2 软件虚拟化和硬件虚拟化

  1. 软件虚拟化技术
    • 软件虚拟化,顾名思义,就是通过软件模拟来实现 VMM 层,通过纯软件的环境来模拟执行客户机里的指令。
    • 最纯粹的软件虚拟化实现当属 QEMU 。
  2. 硬件虚拟化技术
    • 硬件虚拟化技术就是指计算机硬件本身提供能力让客户机指令独立执行,而不需要(严格来说是不完全需要)VMM 截获重定向。

1.2.3 半虚拟化和全虚拟化

  1. 半虚拟化
  2. 全虚拟化

1.2.4 Type1 和 Type2 虚拟化

  1. Type1(类型1)Hypervisor 也叫 native 或 bare-metal Hypervisor 。这类虚拟化层直接运行在硬件之上,没有所谓的宿主机操作系统。他们直接控制硬件资源以及客户机。典型地如 Xen 和 VMware ESX。
  2. Type2(类型2)Hypervisor 运行在一个宿主机操作系统之上,如 VMware Workstation ;或系统里,如 KVM。这类 Hypervisor 通常就是宿主机操作系统的一个应用程序,像其他应用程序一样受宿主机操作系统的管理。比如 VMware Workstation 就是运行在 Windows 或者 Linux 操作系统上的一个程序而已。客户机是在宿主机操作系统上的一个抽象,通常抽象为进程。

1.3 KVM 简介

1.3.1 KVM 的历史

  1. KVM 全称是 Kernel-based Virtual Machine ,即基于内核的虚拟机,是采用硬件虚拟化技术的全虚拟化解决方案。
  2. 为了简化开发,Avi Kivity 并没有选择从底层开始新写一个 Hypervisor ,而是选择了基于 Linux kernel ,通过加载模块使 Linux kernel 本身变成一个 Hypervisor 。
  3. 2006年10月,在先后完成了基本功能、动态迁移以及主要的性能优化之后,Qumranet 正式对外宣布了 KVM 诞生。同月,KVM 模块的源代码被正式纳入 Linux kernel ,成为内核源代码的一部分。

1.3.2 KVM 的功能概览

KVM 从诞生开始就定位于基于硬件虚拟化支持的全虚拟化实现。它以内核模块的形式加载之后,就将 Linux 内核变成了一个 Hypervisor ,但硬件管理等还是通过 Linux kernel 来完成的,所以它是一个典型的 Type 2 Hypervisor,如下图所示。

KVM功能框架

  • 一个 KVM 客户机对应于一个 Linux 进程,每个 vCPU 则是这个进程下的一个线程,还有单独处理 I/O 的线程,也在一个线程组内。所以,宿主机上各个客户机是由宿主机内核像调度普通进程一样调度的,即可以通过 Linux 的各种进程调度的手段来实现不同客户机的权限限定、优先级等功能。
  • 客户机缩看到的硬件设备是 QEMU 模拟出来的(不包括 VT-d 穿透的设备),当客户机对模拟设备进行操作时,由 QEMU 截获并转换为对实际的物理设备(可能设置都不实际物理的存在)的驱动操作来完成。

下面介绍一些 KVM 的功能特性:

  1. 内存管理

    • KVM 依赖 Linux 内核进行内存管理。
  2. 存储和客户机镜像的格式

    • 严格来说,这是 QEMU 的功能特性。
    • KVM 能有使用 Linux 支持的任何存储来存储虚拟机镜像,包括具有 IDE、SCSI 和 SATA 的本地磁盘,网络附件存储( NAS )(包括 NFS 和 SAMBA/CIFS ),或者支持 iSCSI 和光纤通道的 SAN 。多路径 I/O 可用于改进存储吞吐量和提供冗余。
    • 由于 KVM 是 Linux 内核的一部分,他可以利用所有领先存储供应商都支持的一种成熟且可靠的存储基础架构,他的存储堆栈在生产部署方面具有良好的记录。
    • KVM 还支持全局文件系统( GFS2 )等共享文件系统上的虚拟机镜像,以允许客户机镜像在多个宿主机之间共享或使用逻辑卷共享。
  3. 实时迁移

    • KVM 支持实时迁移,这提供了在宿主机之间转移正在运行的客户机而不中断服务的能力。
    • 除了实时迁移,KVM 还支持将客户机的当前状态(快照,snapshot )保存到磁盘,以允许存储并在以后恢复它。
  4. 设备驱动程序

    • KVM 支持混合虚拟化,其中半虚拟化的驱动程序安装在客户机操作系统中,允许虚拟机使用优化的 I/O 接口而不使用模拟的设备,从而为网络和块设备提供高性能的 I/O 。
    • KVM 也支持 Intel 的 VT-d 技术,通过将宿主机的 PCI 总线上的设备透传( pass-through )给客户机,让客户机可以直接使用原生的驱动程序高效地使用这些设备。这种使用是几乎不需要 Hypervisor 的介入的。
  5. 性能和可伸缩性

    • KVM 也继承了 Linux 的性能和可伸缩性。

1.3.3 KVM 的现状

  • KVM 已经成为 OpenStack 用户选择的最主流的 Hypervisor ,据资料显示 KVM 占到了 87% 以上的部署份额,并且还会继续增大。
  • KVM 已经主宰了公有云部署的 Hypervisor 市场;而在私有云部署方面,尤其是大公司内部私有云部署,还是 VMware 的地盘,目前受到 HyperV 的竞争。

1.3.4 KVM 的展望

  1. 大规模部署尚有挑战
  2. 实时性
  3. 安全是永恒的主题/话题
  4. 性能调优

1.4 其他的虚拟化解决方案简介

1.4.1 Xen

  • Xen 的出现要早于 KVM ,可以追溯到20世纪90年代,当时硬件虚拟化还没有出现,所以 Xen 最开始采用的是半虚拟化的解决方案。

  • Xen 在架构上是一个典型的 Type 1 Hypervisor ,与 KVM 形成鲜明对比,如下图所示。严格来说,它没有宿主机的概念,而是由 Xen Hypervisor( VMM )完全管控硬件,但用户却看不见、摸不着它,只能通过特殊的 0 号虚拟机( Dom 0 ),通过其中 x1 工具栈( tool stack )与 Xen Hypervisor 交互来管理其他普通虚拟机( DomU )。0 号虚拟机是一个运行修改过的半虚拟化的内核的 Linux 虚拟机。

  • 从架构上,Xen 的虚拟化方案既利用了 Linux 内核的 IO 部分( DOM 0 的内核),将 Linux 内核的 CPU、内存管理等核心部分排除在外由自己接手( Xen Hypervisor ),所以,一开始就受到了 Linux 内核开发人员的抵制,致使 Linux 内核作为 Dom0 对 Xen 的支持部分一直不能合入 Linux 内核社区。一直到 2010 年,在采用基于内核的 PVOPs 方式大量重写了 Xen 代码以后,才勉强合入 Linux 内核社区。2011年。从 Linux 内核 2.6.37 版本开始,正式支持 Xen Dom0 。

1.4.2 VMware

VMware 成立于1998年,是最早专注于虚拟化商业软件并成功的公司。直到近几年,在公有云兴起的背景下,VMware 开始受到 KVM 和 Xen 等开源项目以及微软 Azure/HyperV 的挑战。VMware 最初是一对夫妇等几个人创立的,2004 年被 EMC 收购。2016 年 EMC 又被 Dell 收购,所以现在 VMware 是 Dell 旗下的子公司。

  1. VMware Workstation

    VMware Workstation 是桌面级虚拟化产品,运行在 Windows、Linux 和 Mac 操作系统上,是 Type 2 Hypervisor 。

  2. VMware ESXi

    VMware ESXi 是服务器级的虚拟化软件,与 Workstation 不同,它直接运行在硬件平台上,是 Type 1 Hypervisor 。在架构上与 Xen 有些相像,是现在 VMware 的拳头产品,大多数大公司的私有云都是用她搭建的。

1.4.3 HyperV

  1. 与 VMware 一样,HyperV 也是闭源的商业软件。微软从 Windows 8/Windows Server 2008 开始,用它来取代原来的 Virtual PC ,成为 Server OS 版本自带的平台虚拟化软件。

  2. HyperV 在架构上与 Xen 类似,也是 Type 1 Hypervisor。

1.4.4 Container

  1. Container 严格来说与前面提到的虚拟化软件不是一个大类,首先,它不是某个虚拟化软件,而是某类软件的统称,包括 Docker 和 LXC 等;其次,它不是硬件平台级的虚拟化技术,而是软件运行环境的虚拟化,是一种操作系统级的虚拟化技术,与前面提到的不是一个层次的。
  2. Container 技术利用了 Linux kernel 提供的 cgroup、namespace 等机制,将应用之间隔离起来,好像自己是操作系统上的唯一一个应用似的。而 Linux kernel 除了封装出这些应用单独的运行环境以外,还可以控制分配给各个应用的资源配额,比如 CPU 利用率、内存、网络带宽等。
  3. 与平台虚拟化技术相比,Container 技术省去了启动和维护整个虚拟客户机的开箱(硬件初始化、Kernel boot 、init 等),因而它非常轻量级,非常适用于 PaaS 服务模型。但另一方面,由于各个 Contained instance 其实还是共用一个 OS 、一个 Kernel ,所以安全性比不上平台虚拟化技术。

总而言之,Container 和 KVM 等平台虚拟化技术,目前还是各有所长,还处在相互取长补短的过程中。结合这篇博客对容器技术进行更加形象的了解:十分钟明白什么是容器技术 - 腾讯云+社区 - 博客园

第二章 KVM 原理简介

2.1 硬件虚拟化技术

通过前面的介绍,大家已经知道 KVM 虚拟化必须依赖于硬件辅助的虚拟化技术。最早的硬件虚拟化技术出现在 1972 年的大型机 IBM System/370 系统上,而真正让硬件虚拟化技术“走入寻常百姓家”的是 2005年年末 Intel 发布的 VT-x 硬件虚拟化技术,以及 AMD 与 2006 年发布的 AMD-V 。

2.1.1 CPU 虚拟化

  1. Intel 在处理器级别提供了对虚拟化技术的支持,被称为 VMX( virtual-machine extensions )。有两种 VMX 操作模式:VMX 根操作( root operation )与 VMX 非根操作( non-root operation )。

2.1.2 内存虚拟化

  1. 内存虚拟化的目的是给虚拟客户机操作系统提供一个从 0 地址开始的连续物理内存空间,同时在多个客户机之间实现隔离和调度。
  2. 在虚拟化环境中,内存地址的访问会主要涉及以下 4 个基础概念:
    1. 客户机虚拟地址,GVA( Guest Virtual Address )
    2. 客户机物理地址,GPA( Guest Physical Address )
    3. 宿主机虚拟地址,HVA( Host Virtual Address )
    4. 宿主机物理地址,HPA( Host Physical Address )

2.1.3 I/O 虚拟化

  1. 在虚拟化的架构下,虚拟机监控器必须支持来自客户机的 I/O 请求。通常情况下有以下 4 种 I/O 虚拟化方式。

    1. 设备模拟
    2. 前后端驱动接口
    3. 设备直接分配
    4. 设备共享分配
    优点 缺点
    设备模拟 兼容性好,不需要额外驱动 1. 性能较差
    2. 模拟设备的功能特性支持不够多
    前后端接口 性能有所提升 1. 兼容性差一些:依赖客户机中安装特定驱动
    2. I/O 压力大时,后端驱动的 CPU 资源占用较高
    设备直接分配 性能非常好 1. 需要硬件设备的特性支持
    2. 单个设备只能分配一个客户机
    3. 很难支持动态迁移
    设备共享分配 1. 性能非常好
    2. 单个设备可共享
    1. 需要设备硬件的特性支持
    2. 很难支持动态迁移

2.1.4 Intel 虚拟化技术发展

虚拟化技术从最初纯软件的虚拟化技术,逐步发展到硬件虚拟化技术的支持,时至今日硬件虚拟化技术已经比较成熟。

Intel 硬件虚拟化技术大致分为如下 3 个类别(这个顺序也基本上是相应技术出现的时间先后顺序):

  1. VT-x 技术:是指 Intel 处理器中进行的一些虚拟化技术支持,包括 CPU 中引入的最基础的 VMX 技术,使得 KVM 等硬件虚拟化基础的出现称为可能。同时也包括内存虚拟化的硬件支持 EPT、VPID 等技术。
  2. VT-d 技术:是指 Intel 的芯片组的虚拟化技术支持,通过 Intel IOMMU 可以实现对设备直接分配的支持。
  3. VT-c 技术:是指 Intel 的 I/O 设备相关的虚拟化技术支持,主要包含两个技术:
    1. 借助虚拟机设备队列( VMDq )最大限度提高 I/O 吞吐率,VMDq 由 Intel 网卡中的专用硬件来完成;
    2. 借助虚拟机直接互连( VMDc )大幅提升虚拟化性能,VMDc 主要就是基于 SR-IOV 标准将单个 Intel 网卡产生多个 VF 设备,用来直接分配给客户机。

2.2 KVM 架构概述

  1. KVM 虚拟化的核心主要由以下两个模块组成:
    1. KVM 内核模块,它属于标准 Linux 内核的一部分,是一个专门提供虚拟化功能的模块,主要负责 CPU 和内存的虚拟化,包括:客户机的创建、虚拟内存的分配、CPU 执行模式的切换、vCPU 寄存器的访问、vCPU 的执行。
    2. QEMU 用户态工具,它是一个普通的 Linux 进程,为客户机提供设备模拟的功能,包括 BIOS、PCI/PCIE 总线、磁盘、网卡、显卡、声卡、键盘、鼠标等。同时它通过 ioctl 系统调用与内核态的 KVM 模块进行交互。
    KVM虚拟化架构

2.3 KVM 内核模块

  1. KVM 内核模块是标准 Linux 内核的一部分,由于 KVM 的存在让 Linux 本身就变成了一个 Hypervisor ,可以原生地支持虚拟化功能。目前,KVM 支持多种处理器平台,它支持最常见的以 Intel 和 AMD 为代表的 x86 和 x86_64 平台,也支持 PowerPC、S/390、ARM 等非 x86 架构的平台。

  2. KVM 模块是 KVM 虚拟化的核心模块,它在内核中由两部分组成

    1. 一个是处理器架构无关的部分,用 lsmod 命令中可以看到,叫作 kvm 模块;
    2. 另一个是处理器架构相关的部分,在 Intel 平台上就是 kvm_intel 这个内核模块。

    KVM 的主要功能是初始化 CPU 硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。

2.4 QEMU 用户态设备模拟

QEMU 原本就是一个著名的开源虚拟机软件项目,而不是 KVM 虚拟化软件的一部分。

  1. 与 KVM 不同,QEMU 最初实现的虚拟机是一个纯软件的实现,通过二进制翻译来实现虚拟化客户机中的 CPU 指令模拟,所以性能比较低。
  2. 但是,其优点是跨平台,QEMU 支持在 Linux、Windows、FreeBSD、Solaris、MacOs 等多种操作系统上运行,能支持在 QEMU 本身编译运行的平台上就实现虚拟机的功能,甚至可以支持客户机与宿主机并不是同一个架构(比如在 x86 平台上运行 ARM 客户机)。
  3. 作为一个存在已久的虚拟机监控软件,QEMU 的代码中有完整的虚拟机实现,包括处理器虚拟化、内存虚拟化,以及 KVM 也会用到的虚拟设备模拟(比如网卡、显卡、存储控制器和硬盘等)。

2.5 与 QEMU/KVM 结合的组件

  1. vhost-net
  2. Open vSwitch
  3. DPDK
  4. SPDK
  5. Ceph
  6. libguestfs

2.6 KVM 上层管理工具

  1. libvirt
  2. virsh
  3. virt-manager
  4. OpenStack

2.7 额外网上学习拓展

  1. x86 CPU 的保护环

    x86 CPU 的保护环

  2. 无硬件辅助的全虚拟化

    无硬件辅助的全虚拟化

  3. 半虚拟化

    半虚拟化

  4. 硬件辅助的全虚拟化

    硬件辅助的全虚拟化

  5. 容器技术

    容器技术

    容器技术

  6. libvirt 与 KVM

    libvirt与KVM

  7. KVM 参考资料

    KVM 参考资料

第三章 构建 KVM 环境

3.1 硬件系统的配置

第四章 KVM 管理工具

4.1 libvirt

4.1.1 libvirt 简介

  1. libvirt 是用于管理虚拟化平台的开源的应用程序接口( API )、后台程序(守护进程)和管理工具,它不仅提供了对虚拟化客户机的管理,也提供了对虚拟化网络和存储的管理;
  2. libvirt 包括一个 API 库,一个守护进程( libvirtd ),和一个命令行实用程序( virsh );
  3. libvirt 支持多种虚拟化方案,既支持包括 KVM、QEMU、Xen、VMwear、VirtualBox、Hyper-V 等在内的多种虚拟化方案,也支持 OpenVZ、LXC 等 Linux 容器虚拟化系统,还支持用户态 Linux( UML )的虚拟化;
  4. 它支持 C、C++、Python、Perl、Java、Ruby、PHP 等多种语言;
  5. libvirt 的一些主要功能如下:
    • VM management(虚拟机管理):各种虚拟机生命周期的操作,如:启动、停止、暂停、保存、恢复和迁移等;多种不同类型设备的热插拔操作,包括磁盘、网络接口、内存、CPU等。
    • Remote machine support(支持远程连接):Libvirt 的所有功能都可以在运行着 libvirt 守护进程的机器上执行,包括远程机器。通过最简便且无需额外配置的 SSH 协议,远程连接可支持多种网络连接方式。
    • Storage management(存储管理):任何运行 libvirt 守护进程的主机都可以用于管理多种类型的存储:创建多种类型的文件镜像(qcow2,vmdk,raw,…),挂载 NFS 共享,枚举现有 LVM 卷组,创建新的 LVM 卷组和逻辑卷,对裸磁盘设备分区,挂载 iSCSI 共享,以及更多……
    • Network interface management(网络接口管理):任何运行 libvirt 守护进程的主机都可以用于管理物理的和逻辑的网络接口,枚举现有接口,配置(和创建)接口、桥接、VLAN、端口绑定。
    • Virtual NAT and Route based networking(虚拟 NAT 和基于路由的网络):任何运行 libvirt 守护进程的主机都可以管理和创建虚拟网络。Libvirt 虚拟网络使用防火墙规则实现一个路由器,为虚拟机提供到主机网络的透明访问。

4.1.2 libvirt 的安装与配置

  1. libvirt 的安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 查找libvirt相关安装包
    rpm -qa | grep libvirt
    # 安装libvirt
    yum install libvirt

    # 默认采用QEMU/KVM的虚拟化方案,所以还应该安装qemu相关的软件
    # 查找qemu相关安装包
    rpm -qa | grep qemu
    # 安装qemu-kvm
    yum install qemu-kvm
  2. libvirtd 的使用

    • libvirt 架构概述

    • libvirt 是一个作为 libvirt 虚拟化管理系统中的服务器端的守护程序,要让某个节点能够利用 libvirt 进行管理(无论是本地还是远程管理),都需要在这个节点上运行 libvirtd 这个守护进程,以便让其他上层管理工具可以连接到该节点,libvirtd 负责执行其他管理工具发送给它的虚拟化管理操作指令。

      1
      2
      3
      4
      5
      6
      7
      8
      # 启动libvirtd
      systemctl start libvirtd
      # 重新启动libvirtd
      systemctl restart libvirtd
      # 不重新启动服务但重新加载配置文件(即 /etc/libvirt/libvirtd.conf 配置文件)
      systemctl reload libvirtd
      # 查询libvirtd服务的运行状态
      systemctl status libvirtd
    • 通过实践发现,对libvirtd守护进程的启动或停止,并不会直接影响正在运行中的客户机。libvirtd 在启动或重启完成时,只要客户机的 XML 配置文件是存在的,libvirtd 会自动加载这些客户的配置,获取他们的信息。

4.2 virsh

4.2.1 virsh 简介

  1. virsh 是用于管理虚拟化环境中的客户机和 Hypervisor 的命令行工具,与virt-manager 等工具类似,它也是通过调用 libvirt API 来实现虚拟化的管理的。
  2. virsh 是用 C 语言编写的一个使用 libvirt API 的虚拟化管理工具。virsh 程序的源代码在 libvirt 项目源代码的 tools 目录下,实现 virsh 工具最核心的一个源代码文件是 virsh.c 。

4.2.2 virsh 常用命令

  1. 一些简单的操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # 输入virsh命令,进入virsh命令行界面
    virsh
    # Welcome to virsh, the virtualization interactive terminal.
    # Type: 'help' for help with commands
    # 'quit' to quit
    # virsh # list......在这里输入一系列命令,如下

    # 查看客户机列表
    list
    list --all
    # 启动客户机
    start centos6.5
    # 优雅关闭客户机
    shutdown centos6.5
    # 强制关闭客户机
    destroy centos6.5
    # 设置自动运行
    autostart centos6.5
    # 暂停客户机
    suspend centos6.5
    # 查看客户机的UUID
    domuuid centos6.5
    #ef647a1a-a45e-4a9c-b51c-98b3e78415a2
    # 恢复暂停的客户机
    resume ef647a1a-a45e-4a9c-b51c-98b3e78415a2
    # 退出virsh命令行界面
    exit

    通过实验知道,暂停客户机并不会释放资源,会占用一定的资源,恢复后内存里面的数据还在;每个客户机都有指定的 ID ,名称或 UUID 这样的唯一标识来指定特定的客户机,对客户机进行操作时,可以使用三者中的任意标识来对其操作。

4.3 virt-manager

virt-manager 的使用,请查看 4.6 KVM 初步实战里的 4.6.3 在 CentOS 环境下使用 virt-manager 创建虚拟机

4.4 virt-viewer、virt-install、virt-top 和 libguestfs

4.4.2 virt-install

virt-install 的使用,请查看 4.6 KVM 初步实战里的 4.6.4 在 CentOS 环境下使用 virt-install 创建虚拟机

4.5 云计算管理平台

4.5.1 OpenStack 简介

4.5.2 ZStack 简介

4.6 KVM 初步实战 ▲

KVM 安装、创建虚拟机、安装虚拟机管理工具

4.6.1 在 CentOS 7 环境下安装虚拟化软件包组

1
2
3
4
5
6
7
8
9
10
# 安装虚拟机监控器
yum group install "Virtualization Hypervisor"
# 安装虚拟化平台
yum group install "Virtualization Platform"
# 安装虚拟化工具
yum group install "Virtualization Tools"
# 安装虚拟化组件
yum group install "Virtualization Client"
# 安装可视化图形桌面(选装)
yum group install "Gnome Desktop"

4.6.2 KVM 远程管理

  1. 远程工具

    • SSH
    • VNC( Virtual Network Console )虚拟网络控制台
      • 分服务端和客户端
    • X-Windows ( Xming )
  2. VNC 的安装与使用

    • CentOS 下 VNC Server 的安装

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      # 查看安装环境
      cat /etc/redhat-release
      # CentOS Linux release 7.6.1810 (Core)

      # 查看是否安装了VNC相关的组件
      rpm -qa | grep vnc
      # tigervnc-license-1.8.0-13.el7.noarch
      # tigervnc-server-minimal-1.8.0-13.el7.x86_64
      # gtk-vnc2-0.7.0-3.el7.x86_64
      # gvnc-0.7.0-3.el7.x86_64

      rpm -qi gvnc

      # 安装VNC服务端
      yum install tigervnc-server
      # 查看配置文件路径
      rpm -qc tigervnc-server
      # /etc/sysconfig/vncservers
      # 查看VNC Server配置文件信息
      cat /etc/sysconfig/vncservers
      # THIS FILE HAS BEEN REPLACED BY /lib/systemd/system/vncserver@.service
      cat /lib/systemd/system/vncserver@.service

      # VNC密码配置
      vncpasswd
      # 查看vnc进程
      ps aux | grep vnc
      # 启动VNC Server
      vncserver
      # 启动完成后再查看下vnc进程
    • 在 Windows 环境下使用 VNC Viewer 远程连接 CentOS 虚拟机

      • 安装 VNC Viewer 客户端

        VNC Viewer 下载官网:https://www.realvnc.com/en/connect/download/viewer/

      • 在地址栏输入虚拟机的IP地址加端口号 1

        例如:192.168.91.131:1,登录验证密码是 VNC Server 设置的密码,不是 Linux 系统的用户登录密码

        使用VNC Viewer连接远程机
      • 如果连接超时,检查远程机防火墙是否允许通过

        1
        2
        3
        # 防火墙配置,允许5901端口通过,配置完成后重新尝试连接
        iptables -A INPUT -p tcp --dport 5901 -j ACCEPT
        # 第一个连接是5901,第二个是5902...
  3. Xming 的安装与使用

    Xming 是一个 Windows 平台上免费的 X Window Server ,可以方便地实现在 Windows 中运行 Linux 应用程序

    • 安装 Xming

      Xming 下载地址:https://xming.en.softonic.com/download

    • Xming 的使用

      安装好后,Xming会自动启动,在电脑的右下角有该软件的图标。然后在 SSH 工具下连接虚拟机,登录后,输入 virt-manager ,会弹出一个对话框,点击是即可打开 virt-manager 的管理界面,就可以在 Windows 上面操作管理虚拟机了。(由于时间关系,Xming 的使用没有继续操作,就不截图演示了)

4.6.3 在 CentOS 环境下使用 virt-manager 创建虚拟机

  1. virt-manager 基本使用

    virt-manager 基本使用

  2. 实验环境的准备

    实验环境 准备

    • 添加新磁盘用来保存新创建的虚拟机

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      # 查看磁盘列表
      fdisk -l
      # 添加新磁盘后,发现在Linux系统中并没有找到新加的磁盘
      # 查看配置文件
      cd /sys/class/scsi_host/
      ll
      # 有三个文件,都进行扫描一下
      echo "- - -" > /sys/class/scsi_host/host0/scan
      echo "- - -" > /sys/class/scsi_host/host1/scan
      echo "- - -" > /sys/class/scsi_host/host2/scan
      fdisk -l
      # 扫描后,新加的硬盘就会出现了,接着进行磁盘分区建立文件系统等
      fdisk /dev/sdb
      p
      n
      p
      回车
      回车
      p
      t
      l
      8e
      p
      w
      # 磁盘初始化成功

      fdisk -l /dev/sdb
      pvcreate /dev/sdb1
      pvscan
      vgcreate vmvg /dev/sdb1
      vgscan
      vgdisplay vmvg
      # Free PE / Size 25599 / <100.00 GiB 记录未分配的磁盘空间
      lvcreate -n lvvm1 -l 25599 vmvg
      vgdisplay vmvg
      lvscan
      # ACTIVE '/dev/vmvg/lvvm1' [<100.00 GiB] inherit
      # 开始创建文件系统
      mkfs.ext4 /dev/vmvg/lvvm1
      # 创建mod点
      mkdir /vm
      vi /etc/fstab
      # 在文件最后添加mod配置,自动连接 /dev/vmvg/lvvm1 /vm ext4 defaults 0 0
      mount /vm
      mount
      # 最后就会看见磁盘规格信息 /dev/mapper/vmvg-lvvm1 on /vm type ext4 (rw,relatime,seclabel,data=ordered)
  3. 使用 virt-manager 创建虚拟机

    • 将镜像文件拷入到 CentOS 的磁盘中;

    • 在菜单中打开之前安装好的 virt-manager 软件;

      image-20201019135257919

    • 在 virt-manager 的顶部工具栏中,点击“ File ”——“ New Virtual Machine ”打开新建虚拟机的向导框;

      image-20201019135704994

    • 第一步,需要选择安装操作系统的镜像来源,我们选择第一个,从本地媒介中安装;

      image-20201019140446001

    • 第二步,点击浏览,从本地文件中查找并选择镜像一个文件,选择后,会自动识别出系统的类型和版本;

      image-20201019140639901

      image-20201019140712834

    • 第三步,给新建的虚拟机设置内存大小和CPU数量,根据自己的配置环境设置合适的大小;

      image-20201019141342135

    • 第四步,设置虚拟机磁盘大小,这里有两种选择,一是为虚拟机创建一个新的磁盘,磁盘大小自己在下方调整,二是自定义存储的位置;

      image-20201019141758432

      如果选择第二个,需要指定存储路径,我这里在根目录下新建了一个 vm 文件夹,将虚拟机的安装存储目标路径指定到这个文件夹下 /vm ;

      image-20201019142014866

      image-20201019142222789

      image-20201019142249597

      设置好存储位置后,会出现一个存储池的选项,为虚拟机分配存储空间;

      image-20201019142608575

      image-20201019142645280

      image-20201019142723142

    • 第五步,这个界面下,我们可以给虚拟机命名,如果勾上“Customize configuration before install”,可以对虚拟机进一步进行配置,如果不勾,就可以直接开始创建虚拟机了;网络设置默认是 NAT 模式;

      image-20201019143210048

    • 最后,点击上面的 Finish 后,就开始安装虚拟机镜像了,等待其安装完成;安装过程中,根据你安装的系统不同,有一些系统本身的配置项,一步步完成即可。

4.6.4 在 CentOS 环境下使用 virt-install 创建虚拟机

  1. 使用 virt-install 安装虚拟机概述

  2. 通过本地 ISO 文件来进行安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 创建存储空间
    qemu-img create -f qcow2 /vm/centos6.5f-disk0.qcow2 10g
    #Formatting 'centos6.5b-disk0.qcow2', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off

    # 创建虚拟机
    virt-install \
    --name=centos6.5f \
    --disk path=/vm/centos6.5f-disk0.qcow2 \
    --vcpus=1 \
    --ram=1024 \
    --cdrom=/iso/CentOS_6.5_Final.iso \
    --network=default \
    --graphics vnc,listen=0.0.0.0 \
    --os-type=linux \
    --os-variant=centos6.5
    # 运行后,会打开一个Virt Viewer的安装界面,根据界面提示安装即可

  3. 拓展:使用 KickStart 使用回答文件(模板文件)简化安装

  4. 拓展:使用 pxe 来安装虚拟机

第五章 KVM 核心基础功能

5.4 存储配置

5.4.2 qemu-img 命令

  1. qemu-img 概述

5.4.3 QEMU 支持的镜像文件格式

第六章 KVM 设备高级管理

6.1 半虚拟化驱动

6.1.10 使用半虚拟化驱动 virtio 的目的