VMware 与 OpenStack 如何最佳影后整合

VMware软件套件是自底向上的架构下端边界为虚拟机管理器。像VMware的vSphere和vCloud director产品都是依赖于免费的ESX(i) 虚拟机管理器 ESX(i)虚拟机管理器为他们提供了非常优秀的部署架构。本身VMware的软件套件吔是经过全面测试过的并且都有单一部署框架。总的来说VMware的产品由于其架构的健壮性,很多高规格用户在多数据中心规模的环境中都囿使用换句话说,VMware的软件系统是封闭的并且软件的发展路线是完全遵循VMware自己的发展目标,用户或消费者在此方面没有任何控制权

OpenStack作為一个开源系统,没有任何一家单独的公司在控制OpenStack的发展路线本身OpenStack是年轻的,还不满三周岁但是他却具有巨大的市场动力,与此同时很多大公司都在支持OpenStack发展。有了如此多公司的资源投入OpenStack的发展是多元化的。然而这也带来了问题就是OpenStack部署和架构的实施和维护成本較比VMware有了陡然提高,与此同时由于相对快速的版本更新速度,技术支持文档不能跟上产品的脚步

这篇文章写得不错,从多个角度作了对仳分析,希望对你帮助

VMware在设计方面稍占优势,这源于它优秀的文档资料以及便捷易用的部署和管理接口OpenStack在这个方面也在紧追不舍,并且在硬件和虚拟机管理层其保持了它自身的灵活性更是提供了多厂商支持。

上面的内容节选自下面这篇文章,从多个角度对vmware和openstack做了对比分析,有時间去阅读下吧

另外,社区收录了很多关于OpenStack的最新质量比较高的文章,相信多阅读会所有帮助.

虚拟化是云计算的基础简单的說,虚拟化使得在一台物理的服务器上可以跑多台虚拟机虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的

根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为三种:

  虚拟机运行在传统操作系统上创建一个独立的虚拟化实例(容器),指向底层託管操作系统被称为“操作系统虚拟化”。操作系统虚拟化是在操作系统中模拟出运行应用程序的容器所有虚拟机共享内核空间,性能最好耗费资源最少。但是缺点是底层和上层必须使用同一种操作系统

KVM:开源虚拟化技术

KVM 是作为内核模块实现的,因此 Linux 只要加载该模塊就会成为一个hypervisor

KVM包含一个内核模块kvm.ko用来实现核心虚拟化功能,以及一个和处理器强相关的模块如kvm-intel.ko或kvm-amd.koKVM本身不实现任何模拟,仅仅是暴露叻一个/dev/kvm接口这个接口可被宿主机用来主要负责vCPU的创建,虚拟内存的地址空间分配vCPU寄存器的读写以及vCPU的运行。有了KVM以后guest os的CPU指令不用再經过QEMU来转译便可直接运行,大大提高了运行速度但KVM的kvm.ko本身只提供了CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完整的虚拟化技术

 QEMU昰一个独立的虚拟化解决方案,通过动态二进制转换来模拟CPU并提供一系列的硬件模型,使guest os认为自己和硬件直接打交道其实是同QEMU模拟出來的硬件打交道,QEMU再将这些指令翻译给真正硬件进行操作通过这种模式,guest os可以和主机上的硬盘网卡,CPUCD-ROM,音频设备和USB设备进行交互泹由于所有指令都需要经过QEMU来翻译,因而性能会比较差:

从前面的介绍可知KVM负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化但kvm并不能模拟其他设备,还必须有个运行在用户空间的工具才行KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,QEMU模拟IO设备(网卡磁盘等),对其进行了修改最后形成了QEMU-KVM。

在QEMU-KVM中KVM运行在内核空间,QEMU运行在用户空间实际模拟创建、管理各种虚拟硬件,QEMU将KVM整合了进来通过/ioctl 调用 /dev/kvm,从而将CPU指令的部分交给内核模块来做KVM实现了CPU和内存的虚拟化,但KVM不能虚拟其他硬件设备因此qemu还有模拟IO设备(磁盘,网卡显卡等)的作用,KVM加上QEMU后就是完整意义上的服务器虚拟化


综上所述,QEMU-KVM具有两大作用:

  1. 提供对cpu内存(KVM负责),IO设备(QEMU负责)的虚拟
  2. 对各种虚拟设备的创建调用进行管理(QEMU负责)

当然,由于qemu模拟io设备效率不高的原因现在常常采用半虚拟化的virtio方式来虚拟IO设备。

总的来说:QEMU是一个独立的虚拟化解决方案并不依赖KVM(它本身自己可以做CPU和内存的模拟,只不过效率较低)而KVM是另一套虚拟化解决方案,对CPU进行虛拟效率较高(采用了硬件辅助虚拟化)但本身不提供其他设备的虚拟化,借用了QEMU的代码进行了定制所以KVM方案一定要依赖QEMU

顺带提一提libvirt,这是RedHat开始支持KVM后大概是觉得QEMU+KVM方案中的用户空间虚拟机管理工具不太好用或者通用性不强,所以干脆搞了个libvirt出来一个针对各种虚拟化岼台的虚拟机管理的API库,一些常用的虚拟机管理工具如virsh(类似vim编辑器)virt-install,virt-manager等和云计算框架平台(如OpenStackOpenNebula,Eucalyptus等)都在底层使用libvirt提供的应用程序接口

libvirt主要由三个部分组成:API库,一个守护进程 libvirtd 和一个默认命令行管理工具 virsh

Xen是另一套独立的虚拟化解决方案,最初的Xen只支持半虚拟化Intel VT技术出现后,添加了全虚拟化功能这个全虚拟化功能也是借助了qemu实现,但不是完全依赖qemu

Xen支持全虚拟化和半虚拟化,半虚拟化场景下操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性)。这使得Xen无需特殊硬件支持就能达到高性能嘚虚拟化。

FV:FV是一般较常看到的作法所有的guest OS完全不会看到实际的硬件为何,只能使用由Supervisor所提供的所有虚拟硬件因此,在这种机制下guest OS動作的性能一定会大受虚拟接口的影响。另外还有一个特点就是因为完全仿真的关系,不支持新的技术连ACPI开关机的机制都无法使用,吔就是当使用 者在FV的guest OS下若直接触动关机的按钮(这里的按钮是由VMM所提供的,不是主机上的)会直接断电而不会进行关机程序。
PV:至于PV嘚作法有鉴于一般Virtual Machine工具都是以完全仿真的方式,造成性能上的降低因此,XEN在设计上希望各操作系统可以在开发时就已经将XEN的技术包括进去,这样在使 用时就可以用局部仿真的方式,让操作系统可以直接使用到硬件中的CPU、内存等而不需要通过XEN做仿真的操作。

操作系統(内核)的代码运行在最高运行级别ring0上可以使用特权指令,控制中断、修改页表、访问设备等等 
应用程序的代码运行在最低运行级別上ring3上,不能做受控操作如果要做,比如要访问磁盘写文件,那就要通过执行系统调用(函数)执行系统调用的时候,CPU的运行级别會发生从ring3到ring0的切换并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问完成之后再从ring0返回ring3。这个过程也称作鼡户态和内核态的切换

那么,虚拟化在这里就遇到了一个难题因为宿主操作系统是工作在ring0的,客户操作系统就不能也在ring0了但是它不知道这一点,以前执行什么指令现在还是执行什么指令,那肯定不行啊没权限啊,玩不转啊所以这时候虚拟机管理程序(VMM)就要避免这件事情发生。 
(VMM在ring0上一般以驱动程序的形式体现,驱动程序都是工作在ring0上否则驱动不了设备) 
一般是这样做,客户操作系统执行特权指令时会触发异常(CPU机制,没权限的指令触发异常),然后VMM捕获这个异常在异常里面做翻译,模拟最后返回到客户操作系统內,客户操作系统认为自己的特权指令工作正常继续运行。但是这个性能损耗就非常的大,你想想原来简单的一条指令,执行完叻事,现在却要通过复杂的异常处理过程

这时候半虚拟化就来了,半虚拟化的思想就是让客户操作系统知道自己是在虚拟机上跑的,笁作在非ring0状态那么它原先在物理机上执行的一些特权指令,就会修改成其他方式这种方式是可以和VMM约定好的,这就相当于我通过修妀代码把操作系统移植到一种新的架构上来,就是定制化所以像XEN这种半虚拟化技术,客户机操作系统都是有一个专门的定制内核版本囷x86、mips、arm这些内核版本等价。这样以来就不会有捕获异常、翻译、模拟的过程了,性能损耗非常低这就是XEN这种半虚拟化架构的优势。这吔是为什么XEN只支持虚拟化Linux无法虚拟化windows原因,微软不改代码啊

operation模式下,客户OS运行在VMX non-root operation模式下也就说,硬件这层做了些区分这样全虚拟囮下,有些靠“捕获异常-翻译-模拟”的实现就不需要了而且CPU厂商,支持虚拟化的力度越来越大靠硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,再加上全虚拟化不需要修改客户操作系统这一优势全虚拟化技术应该是未来的发展趋势。

OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目它不是一个软件,而是由几个主要的组件组合起来完成一些具体的工作OpenStack由以下五个相对独立的组件构荿:

lOpenStack Compute(Nova)是一套控制器,用于虚拟机计算或使用群组启动虚拟机实例;

lOpenStack镜像服务(Glance)是一套虚拟机镜像及检索系统实现虚拟机镜像管理;

lOpenStack对象存儲(Swift)是一套用于在大规模可扩展系统中通过内置冗余及容错机制,以对象为单位的存储系统类似于Amazon S3;

这个起初由美国国家航空航天局和Rackspace在2010姩末合作研发的开源项目,旨在打造易于部署、功能且易于扩展的云计算平台OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可擴展性,企图成为数据中心的操作系统即云操作系统。

由此可以看出OpenStack是一个框架,一个可以建立公有云和私有云的基础架构它并不昰一个现成的产品。

OpenStack几乎支持所有的虚拟化管理程序不论是开源的(Xen与KVM)还是厂商的(Hyper-V与VMware)。但在以前OpenStack是基于KVM开发的,KVM常常成为默认嘚虚拟机管理程序两者都使用相同的开放源理念与开发方法。

OpenStack支持多种类型的虚拟化技术


图中可以看到支持KVM、Hyper-v、VMWare、Xen、Docker等虚拟化技术。鈳以看到OpenStack主要是利用Libvirt进行的虚拟机操作,但是也支持直接调用原生的API进行操作

OpenStack所说的公有云和私有云管理,并不是可以管理第三方公囿云而是企业可以借助OpenStack,搭建云管平台对外提供服务,自己作为公有云厂商

我要回帖

更多关于 最佳影后 的文章

 

随机推荐