传统数据中心往往会面临服务器资源利用率低、初始化成本高和自动化能力差等问题,为了应对这一难题,逐渐衍生出虚拟化。

  1. 虚拟化

1.1 名词释义

    虚拟化(Virtualization)是一个广义的术语,它是计算机技术中心的⼀种资源管理技术,能将单台计算机的各种实体资源(如CPU、内存、磁盘空间等)予以抽象、转换后呈现出来,并可供分割、组合为⼀个或多个计算机配置环境,应用程序可以在相互独立的空间里运行而不会受到其它独立空间的影响,以达到最⼤化合理利⽤物理资源的⽬的。

1.2 虚拟化的优势

    虚拟化的优势主要包括以下几个方面:

    ①能够大幅降低企业的资⾦成本和运维成本;

    ②最⼤限度减少或消除停机现象的发生;

    ③能够提⾼IT部⻔的整体⼯作效率、效益、敏捷性和响应能⼒;

    ④能够加快应⽤和资源的调配速度;

    ⑤能提⾼业务连续性和灾难恢复能⼒;

    ⑥实现更高的工作负载移动性;

    ⑦实现更高的性能和资源可用性;

    ⑧实现运维自动化。

    从这些可以看出虚拟化技术可以使IT部⻔更轻松地进⾏管理以及降低拥有成本和运维成本。

1.3 虚拟化类型

1.3.1 服务器虚拟化

    服务器虚拟化支持在单个物理服务器上运行多个不同类型的虚拟服务器,其优势包括:

    ①减少企业业务增长带来的服务器数量剧增现象和服务器部署工作复杂性;

    ②提供了服务器和应用的性能;

    ③提高了IT部门的工作效率,减少了企业的支出。

1.3.2 网络虚拟化

    网络虚拟化支持通过软件的形式来创建和定义网络,而不再依赖于物理设备,例如一些公有云厂商允许用户自己创建虚拟专用网络来访问企业的内网。

    网络虚拟化可以有效保护企业的IT环境,防止来自互联网的各种威胁,同时使用户也能够快速安全地访问企业内部的应用程序和数据。

1.3.3 桌面虚拟化

    桌面虚拟化指的是对计算机的终端进行虚拟化,可以将桌面部署为代管服务,以提高桌面使用的灵活性和安全性。

    企业将虚拟化桌面与应用快速、轻松地交给分支机构、外包和离岸员工以及使用平板电脑的移动员工,从而能够随时随地的通过网络来访问企业的桌面系统。

1.3.4 应用虚拟化

    应用虚拟化可以将应用程序和操作系统解耦合,为应用程序提供一个良好、稳定的虚拟运行环境,应用虚拟化能有效解决应用程序对系统和硬件的依赖,解决版本不兼容的问题。

1.3.5 存储虚拟化

    存储虚拟化指的是对存储硬件资源进行抽象化表现,它能将一个或多个服务与功能同其它的附加功能进行整合集成,统一提供有用的全面性功能,常见的存储虚拟化包括SAN、NAS和Ceph等。

1.3.6 库虚拟化

    库虚拟化支持在某一操作系统上运行其它操作系统的应用程序,例如在linux上运⾏Windows程序使⽤wine,在mac系统运⾏windows程序使⽤CrossOver等。

1.3.7 容器虚拟化

    hypervisor虚拟化技术会存在一些性能和资源使用效率的问题,为了解决这一问题,容器虚拟化技术应运而生。容器虚拟化可以有效地将单个操作系统中的资源划分到孤立的组当中,以便更好地在孤立的组之间平衡有冲突的资源使用需求。

    容器虚拟化技术被称为下一代虚拟化技术,典型的就是docker、Linux Container和pouch等。

1.4 虚拟化技术分类

    虚拟化技术分类包括全虚拟化、半虚拟化和硬件辅助虚拟化三类。

1.4.1 全虚拟化

    全虚拟化(full virtualization)又可称为准虚拟化(native virtualization),在CPU和内存方面,全虚拟化不做模拟,而是只做相应的分配等操作。全虚拟化需要计算机物理硬件的支持,比如CPU能够⽀持并打开虚拟化功能,以在CPU层⾯⽀持虚拟化功能和内存虚拟化技术,因此完全虚拟化也是基于硬件辅助的虚拟化技术。

1.4.2 半虚拟化

    半虚拟化(para virtualization)要求子操作系统(Guest OS)的内核知道自己是运行在虚拟环境中的,因此Guest OS的系统架构必须是和宿主机的系统架构相同的,并且要求对Guest OS的内核做相应的修改。半虚拟化只支持开源内核的系统,不支持闭源的系统,比较常见的半虚拟化就是早期的Xen,不过Xen从3.0版本开始也可以利用硬件虚拟化技术来支持完全虚拟化,可以在平台上不加修改地运行Linux、Windows等系列的操作系统。

1.4.3 硬件辅助虚拟化

    硬件辅助虚拟化需要借助计算机硬件的支持,主要是指计算机的处理器,从而实现高效的虚拟化。


  1. KVM

    KVM(Kernel-based Virtual Machine)是一个开源的系统虚拟化模块,它是基于内核的虚拟机,在x86硬件上包含虚拟化扩展(Intel VT或AMD-V),能针对Linux的完全虚拟化提供解决方案。KVM由提供核心虚拟化基础架构的可加载内核模块kvm.ko和处理器特定模块kvm-intel.ko或kvm-amd.ko组成,从Linux2.6.20版本开始集成在Linux的各个主要发行版本中,目前已成为学术界的主流VMM(virtual machine monitor,虚拟机监视器)之一。

2.1 KVM结构

    KVM结构如下图所示:

详解虚拟化和KVM_kvm

    在KVM原理图中,底层为硬件系统,包括处理器、内存和输入输出设备等;中间层为Linux内核空间,利用CentOS或Ubuntu等去加载KVM驱动,为虚拟机创建虚拟CPU(vCPU)和内存,通过指令进入到第一层的用户进程和客户机系统装载Guest OS并运行;真正的程序是运行在最上层的用户进程和客户机系统的,qemu利用接口libkvm通过ioctl系统调用进行内核空间。

    当Guest OS发生异常时,需要暂停Guest OS并保存当前状态退出到内核空间来处理异常。内核空间在处理异常时,如果不需要I/O,处理完毕可重新进入到第一层的用户进程和客户机系统;如果需要用到I/O,则需要经过qemu来处理I/O,处理完毕后进入到内核空间,再进入到第一层的用户进程和客户机系统。

2.2 KVM优势

    KVM是Linux的一部分,Linux也是KVM的一部分,Linux有的,KVM全都有,并且KVM的一些优势让它成为了企业的首选虚拟机监控程序。

2.2.1 安全性

    KVM利用安全增强型Linux(SELinux)和安全虚拟化(sVirt)组合起来加强虚拟机的安全性和隔离性,SELinux在虚拟机周围建立安全边界,sVirt则拓展了SELinux的功能,使强制访问控制(MAC)安全机制应用到客户虚拟机,并且预防手动标记错误。

2.2.2 存储

    KVM能够使用Linux支持的存储包括某些本地磁盘和网络附加磁盘(NAS),还可以利用多路径I/O来增强存储并提供冗余能力。KVM还支持共享文件系统,因此虚拟机镜像可以由多个主机共享,磁盘镜像支持精简置备,可以按需分配存储,不必预先备妥一切。

2.2.3 硬件支持

    KVM可以使用多种多样的认证Linux兼容硬件平台,由于硬件供应商经常助力内核开发,所以Linux内核中通常能快速采用最新的硬件功能。

2.2.4 内存管理

    KVM继承了Linux的内存管理功能,包括非统一内存访问和内核同页合并。虚拟机的内存可以交换,也可以通过大型宗卷支持来提高性能,还可由磁盘文件共享或支持。

2.2.5 实时迁移

    KVM支持实时迁移,也就是能够在物理主机之间去移动运行中的虚拟机,而不会造成服务终端。虚拟机保持开机状态,网络连接保持活跃,各个嘤嘤也会在虚拟机重新定位期间正常运行。KVM也会保存虚拟机的当前状态,从而存储下来供日后回复使用。

2.2.6 性能和可扩展性

    KVM继承了Linux的性能,针对客户机和请求数量的增长进行扩展,满足负载的需求。KVM可让要求最苛刻的应用工作负载实现虚拟化,而这也是许多企业虚拟化设备的基础,如数据中心和私有云等(通过OpenStack)

2.2.7 调度和资源控制

    在KVM模型中,虚拟机是一种Linux进程,由内核进行调度和管理。通过Linux调度程序,可对分配给Linux进程的资源进行精细的控制,并且保障特定进程的服务质量。在KVM中,这包括完全公平的调度程序、控制组、网络命名空间和实时扩展。

2.2.8 更低延迟,更高优先级

    Linux内核提供实时扩展,允许基于虚拟机的应用以更低的延迟、更高的优先级来运行(相对于裸机恢复)。内核也将需要长时间计算的集成划分为更小的组件,在进行响应的调度和处理。