1、什么是云计算?

云计算是一种基于网络产生的新型的商业模式。
云计算可以让我们像使用水电一样使用IT服务。
通俗的讲,云,是网络、互联网的一种比喻说法,即互联网与建立互联网所需要的底层基础设施的抽象体。“计算”指的是一台足够强大的计算机提供的计算服务(包括各种功能,资源,存储)。“云计算”可以理解为:通过互联网可以使用足够强大的计算机为用户提供的服务,这种服务的使用量可以使用统一的单位来描述

2、云计算的特点

  1. 按需自助服务:按照自己的需要购买产品
    2. 广泛的网络接入:随时随地可以通过网络接入
    3. 资源池化:将计算、存储、网络不同的资源放在不同的资源池中
    4. 快速弹性伸缩:按照自己的需求可以将资源进行扩容和缩减
    5. 可计量服务:按照自己使用的时间和使用的资源进行付费

    3、云计算的定义

    美国国家标准与技术研究院定义:云计算是一种模型,它可以实现随时随地、便捷的、随需应变的从可配置计算资源共享池中获取所需的资源(例如网络、服务器、存储、应用及服务),资源能够快速供应并释放。使管理资源的工作量和服务提供商的交互减小到最低限度。
    云计算不是技术,而是一种模型
    通过云计算,用户可以使用的资源包括网络、服务器、存储、应用及服务等,这些资源全部属于IT领域,云计算的木匾就是让大众像获取水电一样获取到IT服务;
    资源的使用可以随时随地,前提是网络可达;

    4、云计算的起源与发展

    云计算的发展史就是互联网和计算模型的发展史。
    起源:
    发展:
    1.0:面向数据中心管理员的IT基础设施资源虚拟化阶段
    2.0:面向基础设施云租户和云用户的资源服务化与管理自动化阶段
    3.0:面向企业IT应用开发者及管理维护者的企业应用架构的分布式微服务化和企业数据架构的互联网化重构及大数据智能化阶段

    5、云计算的模式

    公有云:通常是由云服务商提供搭建的,从用户角度来说,只需要购买云计算资源或者服务,而云计算所用到的硬件及相应的管理工作都由第三方服务商负责。公有云的资源向公众开放,使用公有云需依赖互联网。
    私有云:私有云通常部署在企业或单位内部,运行在私有云上的 数据全部保存在企业自由的数据中心内,如果需要访问这些数据,就需要经过部署在数据中心入口的防火墙,这样可以在最大程度上保护数据。
    混合云:混合云是一种比较灵活的云计算模式,他可能包含了公有云、私有云或者行业云的两种或者两种以上,用户的业务可以根据需求在这集中云上切换。
    行业云:是由行业内或某个区域内起主导作用或者掌握关键资源的组织建立和维护,以公开或者半公开的方式,向行业内部或相关组织和公众提供有偿或无偿服务的云平台。
    服务模式:
    Iaas:基础设施既服务,基础设施由云服务商提供,其它由用户自营,
    Paas:平台既服务,基础设施层和平台层由云服务商提供
    Saas:软件既服务

虚拟化

1、虚拟化是什么

  1. 虚拟化和云计算不一样,虚拟化是一种技术,使用虚拟化我们可以在一台物理服务器上模拟出多个独立的服务器来。通常应用程序需要安装在操作系统上,而一台物理服务器只能同时运行一个操作系统,使用了虚拟化之后,每个模拟出来的服务器都可以有自己独立的操作系统,这样就相当于在一台服务器上同时运行了多个操作系统。<br /> 虚拟化的本质就是将原先的物理设备进行逻辑化,转化成一个文件夹或者文件,实现软硬件的解耦。

2、计算虚拟化发展史

image.png
虚拟化常用名词:
Guest OS:虚拟机操作系统
Guest Machine:虚拟出来的虚拟机
Hypervisor:虚拟化软件层/虚拟机监控机
Host OS:运行在物理机上的OS
Host Machine:物理机

3、计算虚拟化的分类

根据Hypervisor的不同类型,我们将虚拟化跟为Ⅰ型和Ⅱ型两种。
Ⅰ型虚拟化:裸金属虚拟化,Hypervisor直接调用硬件资源,不需要底层Host OS,在Ⅰ型虚拟化中可以将Hypervisor看作是一个定制的Host OS,除了起到VMM的作用外,一般不能再其上安装其它应用。Hypervisor主要实现两个基本功能:首先是识别、捕获和相应虚拟机发出的CPU特权指令或保护指令,其次它负责 处理虚拟机队列和调度,并将物理硬件的处理结果返回给相应的虚拟机。也就是说Hypervisor负责所有的资源及虚拟环境。VMM可以看作是一个为虚拟化而产生的完整操作系统,管理所有资源(CPU、内存和I/O设备)。VMM承担管理资源的重任,并向上提供虚拟机VM用于运行Guest OS的环境,因此VMM还负责虚拟环境的创建和管理。
Ⅰ型虚拟化特点:
优点:虚拟机不依赖操作系统,支持多种操作系统和多种应用
缺点:虚拟化层内核开发难度大
image.png
Ⅱ型虚拟化:宿主机虚拟化。此模型的物理资源由Host OS管理,实际的虚拟化功能由VMM提供,而VMM作为底层操作系统(Windows或Linux)上的一个普通应用程序,用过其创建相应的虚拟机,共享底层服务器资源。VMM通过调用Host OS的服务来获得资源,实现CPU、内存和I/O设备的虚拟化。VMM创建出虚拟机VM后,通常将VM作为Host OS的一个进程参与调度。
Ⅱ型虚拟化特点
优点:简单、易于实现
缺点:安装和运行应用程序依赖于主机操作系统对设备的支持。管理开销较大,性能损耗大。

4、虚拟化的特点

1、分区:分区意味着虚拟化层为多个虚拟机划分服务器资源的能力,每个虚拟机可以同时运行一个单独的操作系统(相同或不同的操作系统),使您能够在一台服务器上运行多个应用程序,每个操作系统只能看到虚拟化层为其提供的“虚拟硬件”(虚拟网卡、CPU、内存),使它误以为运行在自己的专用服务器上。
分区解决了两个方面的问题:

  • 每个分区划分资源配额,防止虚拟化超配额使用资源
  • 每个虚拟机单独安装操作系统,彼此互不影响。

2、隔离:通过分区所创建的多个虚拟机之间采用逻辑隔离措施,防止互相影响。
隔离解决的问题:

  • 一个虚拟机的崩溃或故障不会影响同一服务器上的其他虚拟机
  • 一个虚拟机中的病毒、蠕虫等,与其他虚拟机相隔离,就像每个虚拟机都位于单独的物理机服务器上一样。

3、封装:封装意味着将整个虚拟机存储在独立物理硬件的一组文件中。只需要复制几个文件就可以随时随地根据需要复制、保存和移动虚拟机。对虚拟机的迁移而言,最重要的就是封装特性,封装也是虚拟化所有本质特性中最为重要的特性。这都是因为虚拟机成为独立于硬件的文件,那么虚拟机就可以具备迁移和热插拔等特性,这些也都和虚拟机封装特征息息相关。
4、相对硬件独立:虚拟机封装为独立文件后,虚拟机迁移只需要把虚拟机设备文件和配置文件或磁盘文件复制到另一台主机上运行即可,而不用关心底层硬件的类型是否兼容,这就是相对硬件的独立性。

5、计算虚拟化

1、CPU虚拟化
主机操作系统发出的指令一般分为两种类型:特权指令和普通指令
特权指令:是指用在操作和管理关键系统资源的指令,这些指令只在最高权限上才能够运行,必须在Ring 0级别以上才能运行的指令。
普通指令:与特权指令相对的是普通指令,这些指令才CPU普通权限级别上就能够运行。
虚拟化环境中还有一种敏感指令:敏感指令是指修改虚拟机的与运行模式或宿主机状态的指令。
全虚拟化:将所以从虚拟机发出的操作系统请求转发到虚拟机监视器(VMM),虚拟机监视器对请求进行二进制翻译,如果发现是特权指令或敏感指令,则陷入到VMM模拟执行,然后调度到CPU特权级别上执行,如果只是应用程序指令则在CPU非特权级别上执行。
优点:不修改虚拟机操作系统,虚拟机的可以执行和兼容性较强,支持广泛的操作系统。
缺点:运行时修改Guest OS二进制代码,性能损耗较大,并引入了新的复杂性,导致VMM开发难度较大。
image.pngimage.png
半虚拟化:修改虚拟机操作系统Guest OS,让虚拟机操作系统能够意识到自己是被虚拟化的,虚拟机操作系统会“超级调用(Hypercall)”Hypervisor层来代替虚拟化中的敏感指令,从而实现虚拟化,而其他应用程序等非敏感或非特权请求则直接在CPU非特权级别上执行。
优点:Guest OS可以同时支持多个不同的操作系统,并提供与原始系统相近的性能。
缺点:半虚拟化中的Host OS只支持修改开源的操作系统,被修改过的虚拟机操作系统Guest OS 可以移植性较差。
硬件辅助虚拟化:物理CPU直接支持虚拟化功能,并且可以识别出敏感指令。为CPU增加了新的执行模式——root模式,可以让虚拟机监视器VMM运行在ROOT模式下,而root模式位于CPU指令级别Ring 0下。特权和敏感指令自动在Hypervisor上执行。
2、内存虚拟化
物理主机在使用内存地址空间时,需要满足两点要求:

  • 内存地址都是从物理地址0开始的
  • 内存地址空间都是连续分配的

内存虚拟化就是把物理级的真实物理内存统一管理,包装成多份虚拟的内存给若干虚拟机使用,核心在于引入一层新的地址空间——客户机物理地址空间,虚拟机以为自己运行在真实的物理地址空间中,实际上它是通过VMM访问真实的物理地址的,在VMM中保存的是客户及地址空间和物理地址空间之间的映射表。
image.png
image.png
三种地址内存:虚拟机内存地址、物理级内存地址、机器内存地址。
虚拟机Guest OS控制虚拟地址到客户内存物理地址的映射,但是虚拟机Guest OS不能直接访问实际机器内存,因此Hypervisor需要负责映射客户物理内存到实际机器内存。
3、I/O虚拟化
全虚拟化:通过VMM为虚拟机模拟出一个真实设备类似的虚拟I/O设备,当虚拟机对I/O设备发起I/O请求时,VMM截获虚拟机下发的I/O访问请求,再由VMM将真实的访问请求发送到物理设备进行处理。
优点:虚拟机无论使用任何类型的操作系统,都不需要为I/O虚拟化做任何修改,就可以让多个虚拟机直接使用物理服务器的I/O设备。
缺点:VMM需要实时截获每个虚拟机下发的I/O请求,截获请求后模拟倒真实的I/O设备中,实时监控和操作都是通过CPU运行软件程序来实现的,因此会给服务器带来较严重呃呃性能损耗。
半虚拟化:需要建立一个特权级别的虚拟机,既特权虚拟机。半虚拟化方式要求各个虚拟机运行前端驱动程序,当需要访问I/O设备时,虚拟机通过前端驱动程序把I/O请求发送给特权虚拟机,有特权虚拟机的后端驱动收集每个虚拟机发出的I/O请求,再由后端驱动对多个I/O请求进行分时分通道处理。特权虚拟机运行真实的物理I/O设备驱动,将I/O请求发送给物理I/O设备,I/O设备处理完成后再将结果返回给虚拟机。
优点:主动让虚拟机将I/O请求发送给特权虚拟机,再由特权虚拟机访问真实的I/O设备,这就减少了VMM的性能损耗。
缺点:需要修改虚拟机操作系统,改变操作系统对自身I/O请求处理方式,将I/O请求全部发送给特权虚拟机处理,这就要求虚拟机操作系统必须是可以被修改的。
硬件辅助虚拟化:硬件支持虚拟化,将I/O设备驱动直接安装在虚拟机操作系统中,不需要对操作系统进行任何修改即可使用。

6、主流的计算虚拟化

云计算是为用户随时随地可获取的IT服务,是一种商业模式或者服务模式,而虚拟化是一种技术手段,时云计算实现的重要手段之一。
开源虚拟化:KVM、XEN
闭源虚拟化:Hyper-v、VMware、vSphere、FusionSphere
KVM是全虚拟化,而XEN同时支持半虚拟化和全虚拟化。KVM是Linux内核中的一个模块,用来实现CPU和内存的虚拟化,是Linux的一个进程,而其他的I/O设备需要QEMU来实现。XEN和KVM不同,他直接运行在硬件上,然后在其之上运行虚拟机,XEN中的虚拟机分为两类:Domain0和DomainU,Domain0是一个特权虚拟机,具有直接访问硬件和管理其它普通虚拟机DomainU的权限,在其它虚拟机启动前,Domain0需要先启动。DomainU是破铜虚拟机,不能直接访问硬件资源,所有的操作都需要通过前端驱动的方式转给Domain0,再由 Domain0完成具体的操作后将结果返回给DomainU。

7、KVM

KVM,全称是Kernel-based Virtual Machine(基于内核的虚拟机),是一种典型的II型全虚拟化,它之所以叫做基于内核的虚拟机,是因为KVM本身是一个Linux内核模块,当安装有Linux系统的物理机安装了这个模块后,就变成了Hypervisor,而且还不会影响原先在该Linux上运行的其它应用程序,而且每个虚拟机都是进程,可以直接用kill命令杀掉。
普通的Linux安装了KVM模块后,会增加三种运行模式:

  • ·Guest Mode:游客模式,此模式主要是指虚拟机,包括虚拟机的CPU、内存、磁盘等虚拟设备,该模式被置于一种受限的CPU模式下运行;
  • User Mode:用户空间,此模式下运行的主要是QEMU,它用来为虚拟机模拟执行I/O类的操作请求;
  • ·Kernel Mode:内核空间,此模式下可以真正操作硬件,当Guest OS执行I/O类操作或特权指令操作时,需要向用户模式提交请求,然后由用户模式再次发起硬件操作请求给内核模式,从而真正操作硬件。

KVM体系一般包括三部分:KVM内核模块、QEMU和管理工具,其中KVM内核模块和QEMU是KVM的核心组件,
image.png
KVM内核模块是KVM虚拟机的核心部分,其主要功能是初始化CPU硬件,打开虚拟化模式,然后将Geust Machine运行在虚拟机模式下,并为虚拟客户机的运行提供一定的支持。
KVM模块中,实现虚拟化功能的是kvm.ko,还包括一个和处理器强相关的模块如kvm-intel.ko或kvm-amd.ko,KVM本身不能实现任何模拟功能,它仅仅是提供了一个/dev/kvm接口,这个接口可被宿主机用来主要负责vCPU的创建、虚拟内存的地址空间分配、vCPU寄存器的读写以及vCPU的运行。所以kvm.ko只提供了CPU和内存的虚拟化,但是一个虚拟机除了CPU和内存外,还需要网卡、硬盘等其它的I/O设备,这时候就需要另外一个组件——QEMU了,KVM核心模块和QEMU一起才能构成一个完整的虚拟化技术
其实QEMU原本不是KVM的一部分,它是一个通用的开源的使用纯软件来实现的虚拟化模拟器,Guest OS以为自己在与硬件进行交互,其实真正交互的是QEMU,然后再通过QEMU与硬件交互,这就意味着所有与硬件的交互都需要经过QEMU,所以使用QEMU进行模拟的性能比较低。QEMU本身可以模拟CPU和内存,在KVM中,只使用QEMU来模拟IO设备,KVM的开发者将其改造成了QEMU-KVM。
在QEMU-KVM中,KVM运行在内核空间,QEMU运行在用户空间,Guest OS下发指令时,与CPU和内存相关的指令会通过QEMU-KVM中的/ioctl调用/dev/kvm,从而将这部分指令交给内核模块来完成,从QEMU的角度来看,这样做也可以加速虚拟化。其它的I/O操作则由QEMU-KVM中的QEMU来实现,KVM加上QEMU后才是完整意义上的虚拟化。
QEMU-KVM还提供了原生工具来对虚拟机的创建、修改和删除等进行管理,Libvirt是目前使用最为广泛的管理KVM虚拟机的工具和API。
Libvirt也是一个开源项目,它是一个非常强大的管理工具,被管理的虚拟化平台可以是KVM,也可以是Xen、VMware以及Hyper-V等等。Libvirt是一套由C语言开发的API,其它的语言,比如Java、Python、Perl等,可以通过调用Libvirt的API去管理各个虚拟化平台。Libvirt可以被很多应用使用,除了本身的virsh命令集外,Virt-manager、Virt-viewer、Virt-install都可以通过Libvirt管理KVM虚拟机。
虚拟机磁盘操作流程:
image.png
1 虚拟机中的磁盘设备发起一次I/O操作请求;
2 KVM模块中的I/O Trap Code(I/O捕获程序)将这个I/O操作请求捕获到,进行相应的处理,然后将处理后的请求放到I/O共享页中;
3 KVM模块会通知QEMU,告诉它有新的I/O操作请求放到了共享页中;
4 QEMU收到通知后,到共享页中获取该I/O操作请求的具体信息;
5 QEMU对该请求进行模拟,同时根据I/O操作请求的信息调用运行在内核态的设备驱动,进行真正的I/O操作;
6 通过设备驱动对物理硬件执行真正的I/O操作;
7 QEMU将执行后的结果返回到共享页中,同时通知KVM模块已完成此次I/O操作;
8 I/O捕获程序从共享页中读取返回的结果;
9 I/O捕获程序将操作结果返回给虚拟机;
10 虚拟机将结果返回给发起操作的应用程序。
注意第2、3、7步, KVM其实除了捕获和通知,并没有对I/O操作做任何的修改,既然什么都没有修改,那么我们能不能把这一步去掉呢,所以就开发出了新的virtio技术。
Virtio具体的操作流程:
image.png
1 同样是由虚拟机发起I/O操作请求;
2 与使用默认模型不一样,这个I/O操作请求不会经过I/O捕获程序,而是直接以前后端的形式放到环形缓冲区,同时KVM模块通知后端驱动;
3 QEMU到环形缓冲区获取到操作请求的具体信息;
4 后端驱动直接调用真实的物理设备驱动进行具体的I/O操作;
5 由真实的设备驱动完成I/O操作;
6 QEMU将处理结果返回到环形缓冲区,并由KVM模块通知前端驱动;
7 前端驱动从环形缓冲区获取到此次I/O操作的结果;
8 前端驱动将结果返回给发起操作的应用程序。
Virtio优点:

  • 节省QEMU模拟时所需的硬件资源;
  • 缩短I/O请求的路径,提高虚拟化设备的性能;

缺点:有些比较老的或不常用的设备,无法使用Virtio,只能使用QEMU方式进行模拟。

FusionCompute

1、FusionCompute是什么

FusionCompute是FusionSphere虚拟化套件中必选组件,是云操作系统软件,主要负责硬件资源的虚拟化,以及对虚拟资源、业务资源、用户资源的集中管理,它采用虚拟计算、虚拟存储、虚拟网络等技术,完成计算资源、存储资源、网络资源的虚拟化。同时通过统一的接口,对这些虚拟资源进行集中调度和管理,降低业务的运行成本,保证系统的安全性和可靠性,协助运营商和企业构筑安全、绿色、节能的云数据中心。

2、FusionCompute组成

CNA(Compute Node Agent 计算节点代理):

  • 提供虚拟计算功能
  • 管理计算节点上的虚拟机
  • 管理计算节点上的计算、存储、网络资源

VRM(Virtual Resource Manager 虚拟资源管理器):

  • 管理集群内的块存储资源
  • 管理集群内的网络资源(IP/VLAN),为虚拟机分配IP地址。
  • 管理集群内虚拟机的生命周期以及虚拟机在计算节点上的分布和迁移。
  • 管理集群内资源的动态调整
  • 通过对虚拟资源、用户数据的统一管理,对外提供弹性计算、存储、IP等服务
  • 通过提供统一的操作系统管理接口,操作维护人员通过WebUI远程访问

VRM和CNA都有管理的作用,CNA管理的是本节点上的虚拟机和资源,而VRM是从集群或者整个资源池的层面进行管理。如果VRM对某个虚拟机进行修改或者其它生命周期的操作时,需要将命令下发给CNA节点,再由CNA去执行。操作完成后CNA再把结果返回给VRM,有VRM记录到数据库种。所以尽量不要到CNA上执行虚拟机或其他资源的修改操作,一避免造成VRM数据库中的记录与实际不匹配的情况。