1、虚拟化

  虚拟化是一种资源管理技术,是将计算机的各种资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个计算机配置环境,并重新分割、重新组合,从而达到最大化合理利用物理资源的目的。

1.1、虚拟化的优势

  1. 能够大幅度较低企业的资金成本和运维的成本;
  2. 能够最大限度减少或消除停机的现象发生;
  3. 也可以提高IT部门的整体工作效率、效益、敏捷性和响应能力;
  4. 可以加快应用和资源的快速调用;
  5. 提高了业务连续性和容灾恢复的能力;
  6. 实现了快速转移和复制虚拟服务器,提供了一种简单便捷的灾难恢复解决方案。

1.2、虚拟化类型

1.2.1、服务器虚拟化

服务器虚拟化支持将多个操作系统作为高效的虚拟机在单个物理机上运行,优势有:

  1. 提高了服务器的可用性;
  2. 提升了IT的效率、降低了运维的成本、更快的部署工作负载;
  3. 提高应用的性能,也消除了服务器数量跟着业务的增长而增加的现象,也减少了服务器部署的工作复杂性。

1.2.2、网络虚拟化

  网络虚拟化支持通过软件的形式来创建和定义网络,从而不再依赖于物理设备,例如有一些公有云厂商允许用户自己创建虚拟专用网络来访问企业的内网。   网络虚拟化可以有效保护企业的IT环境,可以防止来自互联网的各种威胁,同时用户也能够快速安全地访问企业内部的应用程序和数据。

1.2.3、桌面虚拟化

  桌面虚拟化是指对计算机的终端来进行虚拟化,可以将桌面部署为代管服务,从而使IT的组织能够更快的响应不断变化的工作场景的需求和新出现的机会,也提高了桌面的使用灵活性和安全性。   将虚拟化桌面桌面和应用更快速、轻松的交付给分支机构、外包和离岸员工以及使用平板电脑的移动员工,这样的话就可以随时随地的通过网络来访问企业的桌面系统。

1.2.4、应用虚拟化

  应用虚拟化也就是将应用程序与操作系统解耦合,为应用程序提供了一个虚拟的运行环境。在这个环境中,不仅包括应用程序的可执行文件,还包括它所依赖的运行时环境。应用虚拟化是把应用对低层的系统和硬件的依赖抽象出来,从而解决了版本不兼容的问题。

1.2.5、存储虚拟化

  存储虚拟化最通俗易懂的理解就是对存储硬件资源进行抽象化表现出来,通过将一个或多个目标服务或功能与其它附加的功能集成,提供有用的全面功能服务。现在常见的虚拟存储有NAS、SAN、Ceph等等。

1.2.6、库虚拟化

  库虚拟化是支持某操作系统上运行其他操作系统的应用程序,比如在Linux中运行Windows程序使用wine,在Mac系统上运行Windows程序使用CrossOver。

1.2.7、容器虚拟化

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

1.3、虚拟化技术分类

1.3.1、全虚拟化(full virtualization)

  全虚拟化也叫准虚拟化(native virtualization),它不做CPU和内存的模拟,只对CPU和内存做出相应的分配操作,全虚拟化还需要计算机物理硬件的支持,比如CPU能够⽀持并打开虚拟化功能,以在CPU层⾯⽀持虚拟化功能和内存虚拟化技术,因此完全虚拟化也是基于硬件辅助的虚拟化技术。   KVM是硬件辅助的虚拟化技术,主要负责比较繁琐的CPU和内存虚拟化,而Qemu则负责I/O的虚拟化,两者合作后就会各发挥自身的优势。

1.3.2、半虚拟化(para virtualization)

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

2、KVM

  KVM(Kernel-based Virtual Machine)是一个开源的系统虚拟化模块,也是基于内核和虚拟机,在X86硬件上包括虚拟化扩展(Intel VT或AMD-V),它是由提供核心虚拟化基础架构的可加载内核模块kvm.ko和处理器特定模块kvm-intel.ko或kvm-adm.ko组成,从Linux 2.6.20之后就集成在Linux的各个主要发行版本中,KVM目前已经成为学术界的主流VMM(Virtual machine monitor,虚拟机监视器)之一。

2.1、KVM的结构

image.png image.png   从上图中,可以看出KVM的底层是硬件系统,也包括CPU、内存和一些输出设备等;中间层就是Linux的内核空间,可以利用Ubuntu或者Centos等等去加载KVM的驱动,为虚拟机创建创建虚拟的CPU和内存,会通过指令进入到第一层的用户进程和客户机系统装载Guest OS并运行,真正的程序是运行在最上层的用户进程和客户机系统的,qemu利用接口libkvm通过ioctl系统调用进行内核空间。   当Guest OS发生故障时,需要暂停Guest OS并保存当前状态退出到内核空间来处理发生的故障。内核空间在处理故障时,如果不需要I/O,处理完毕可重新进入到第一层的用户进程和客户机系统;如果需要用到I/O,则需要经过qemu来处理I/O,处理完毕后进入到内核空间,再进入到第一层的用户进程和客户机系统。

2.2、KVM的优势

  KVM是一个开源的系统虚拟化模块,使用的是liunx自身的调度器管理,用kvm把多台物理机虚拟化后,组成一个大的虚拟化资源池,方便用户从资源池中按分配计算能力,提升资源的使用效率,保证多用户资源之间的隔离性,安全性。优势如下:

  1. 能够高效的利用系统资源;
  2. 快速的启动时间;
  3. 一致的运行环境;
  4. 可以持续交付和部署;
  5. 更轻松的维护和扩展;
  6. 支持多种操作系统,支持实时迁移,支持混合虚拟化;
  7. 性能和可伸缩性;
  8. 存储和客户机镜像的格式;