OpenStack、KVM、VMWare和Docker
一、虚拟化
1.什么是虚拟化
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
2.什么是虚拟化技术
虚拟化技术是一套解决方案。完整的情况需要CPU、主板芯片组、BIOS和软件的支持,例如VMM软件或者某些操作系统本身。即使只是CPU支持虚拟化技术,在配合VMM的软件情况下,也会比完全不支持虚拟化技术的系统有更好的性能。
3.虚拟化的类型
全虚拟化(Full Virtualization)
全虚拟化也成为原始虚拟化技术,该模型使用虚拟机协调guest操作系统和原始硬件,VMM在guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机。
半虚拟化(Para Virtualization)
半虚拟化是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的guest操作系统集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。半虚拟化需要guest操作系统做一些修改,使guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。
二、OpenStack与KVM、VMWare
1.OpenStack:开源管理项目
OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目。它不是一个软件,而是由几个主要的组件组合起来完成一些具体的工作。OpenStack由以下五个相对独立的组件构成:
- OpenStack Compute(Nova)是一套控制器,用于虚拟机计算或使用群组启动虚拟机实例;
- OpenStack镜像服务(Glance)是一套虚拟机镜像查找及检索系统,实现虚拟机镜像管理;
- OpenStack对象存储(Swift)是一套用于在大规模可扩展系统中通过内置冗余及容错机制,以对象为单位的存储系统,类似于Amazon S3;
- OpenStack Keystone,用于用户身份服务与资源管理以及
- OpenStack Horizon,基于Django的仪表板接口,是个图形化管理前端。
这个起初由美国国家航空航天局和Rackspace在2010年末合作研发的开源项目,旨在打造易于部署、功能丰富且易于扩展的云计算平台。OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性,企图成为数据中心的操作系统,即云操作系统。
2.KVM(Kernel-based Virtual Machine)基于内核的虚拟机
KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。
KVM最大的好处就在于它是与Linux内核集成的,所以速度很快。
3.VMWare (Virtual Machine ware)
VMWare (Virtual Machine ware)是一个“虚拟PC”虚拟机管理管理软件。它的产品可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换。而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。安装在VMware操作系统性能上比直接安装在硬盘上的系统低不少,因此,比较适合学习和测试。
三、OpenStack与VMWare
1.设计
VMware软件套件是自底向上的架构,下端边界为虚拟机管理器。像VMware的vSphere和vCloud director产品都是依赖于免费的ESX(i) 虚拟机管理器, ESX(i)虚拟机管理器为他们提供了非常优秀的部署架构。
VMware的软件系统是封闭的,并且软件的发展路线是完全遵循VMware自己的发展目标,用户或消费者在此方面没有任何控制权。
OpenStack作为一个开源系统,没有任何一家单独的公司在控制OpenStack的发展路线。
2.功能
(1)VMware vMotion
vMotion是vSphere DRS、DPM和主机维护三大功能的合集。其中虚拟机动态迁移允许将一台虚拟机在零关机的情况下由一台宿主机迁移到另一台上,这原本是需要共享存储的支持的,但在vSphere 5.1中,VMware已经不需要通过共享存储实现动态迁移了。当一台虚拟机由一个宿主机迁移到另一个上时,虚拟机的内存状态和数据都要同步迁移过去。如果是共享存储的情况,实际上数据是不需要进行迁移的,只需要变化指向数据存储的链接而已。这在加速了迁移速度的同时也减少了在复制过程中网络的负载。
(2)OpenStack 动态迁移
KVM动态迁移允许一个虚拟机由一个虚拟机管理器迁移到另一个,说的详细一点,你可以来来回回将一台虚拟机在AMD架构主机与Intel架构主机上进行迁移,但是需要注意的是,64位的虚拟主机只能被迁移到64位的宿主机上,但是32位的则有32位和64位两种选择。在动态迁移过程中,不能再对虚拟机进行操作,但是虚拟机内的用户还是可以在虚拟机内部继续进行工作的。KVM主要还是依赖于共享存储,某种程度上,这相对来说是需要一些资金投入的。
(3)OpenStack块存储迁移
在OpenStack当中,KVM支持块存储迁移,这也就是说虚拟机迁移不是必须需要共享存储的支持的。在块迁移的场景下,虚拟机的内存状态与数据都将被迁移,但是迁移操作也需要消耗两端的CPU资源并且操作花费时间较比共享存储来说要长一些。在某些用户场景当中,如果我们比较关注于主机的可维护性,并且不想花费过多经费,那么应用块存储迁移将是好的解决方案。同时,如果在没有共享存储的环境中,我们想对计算节点进行内核维护、安全升级,那么保证虚拟机服务不被打断,块存储迁移也是理想选择。
(4)VMware DRS 和 DPM
基于vMotion,DRS可以动态监控虚机机及宿主机的当前使用状况,并且为宿主机的负载均衡提供支持。
基于vMotion, DPM将虚拟机从低负载宿主机迁移掉,并且关闭以达到减少电能损耗。当负载增长,DPM将宿主机重启,并且部署新的虚拟机以满足负载需要。
(5)OpenStack调度器
OpenStack包含了对于compute和volume的调度器,通过一系列的管理员设定的规则参数和过滤器,OpenStack调度器将虚拟机部署到合适的宿主机上。在过滤器方面,调度器是非常灵活的,用户可以自己完成JSON格式的过滤器,并且过滤器还包含很多预定义的过滤器。虽然OpenStack调度器非常灵活,但是还是不能完全替代DRS,原因如下:
- 调度器用于选择哪个宿主机进行虚拟机部署的静态参考数据来源于Nova的数据库。换句话说,就是发现宿主机已经有了4台虚拟机了,那么我们需要选择一个新的宿主机去部署下一台虚拟机。
- 调度器只能在虚拟机部署阶段影响部署的位置,一旦部署完成,虚拟机运行后则无法挪动虚拟机了。如果需要基于动态数据进行调度,那么调度器需要与外部监控解决方案如Nagios合作。总而言之,目前OpenStack调度器将只会对部署虚拟机环节有影响。
(6)High Availability(高可用)
在vSphere中,虚拟机级别的高可用性是允许在虚拟机或者ESX(i)主机出错时,在不同宿主机部署相同的虚拟机。这里不要和容错(FT)机制混淆,高可用的意义在于当有一些东西出错了,可以在一定时间内自我修复。高可用是在硬件出问题的时候保证虚拟机的正常个工作,如果真的出错了,那么只能在不同的ESX(i)主机上启动虚拟机,这也可能造成服务的中断。
目前并没有官方声明OpenStack支持虚拟机级别的高可用性,这个特性在Folsom版本被提出,但是后续又被放弃了。目前OpenStack有一个孵化项目Evacuate, 其作用是为OpenStack提供虚拟机级别高可用支持。
(7)Fault Tolerance(容错)
VMware容错机制是通过监控虚拟机的状态和所有变化,将这些变化同步到第二台备份ESX(i)服务器之上。容错的概念在于无论是主还是从宿主机出现问题,只要一方能正常工作,那么宿主机上的虚拟机都保持正常工作。
在OpenStack中没有针对于容错的功能,并且截至目前也没有计划去完成这些功能。未来,KVM也不再支持镜像操作功能。
四、OpenStack与Docker
OpenStack和Docker之间是很好的互补关系。Docker的出现能让IaaS层的资源使用得更加充分,因为Docker相对虚拟机来说更轻量,对资源的利用率会更加充分。
Docker主要针对Paas平台,是以应用为中心。OpenStack主要针对Iaas平台,以资源为中心,可以为上层的PaaS平台提供存储、网络、计算等资源。
OpenStack项目的层级关系
- 第一层是基础设施层,这一层主要包含Nova、Glance和Keystone,如果我们要想得到最基本的基础设施的服务,必须安装部署这三个项目。
- 第二层是扩展基础设施层,这一层可以让我们得到更多跟基础设施相关的高级服务,主要包含Cinder、Swift、Neutron、Designate和Ironic等,其中Cinder提供块存储,Swift提供对象存储,Neutron提供网络服务,Designate提供DNS服务,Ironic提供裸机服务。
- 第三层是可选的增强特性,帮用户提供一些更加高级的功能,主要包含Ceilometer、Horizon和Barbican,其中Ceilometer提供监控、计量服务,Horizon提供用户界面,Barbican提供秘钥管理服务。
- 第四层主要是消费型服务,所谓的消费型服务,主要是指第四层的服务都需要通过使用前三层的服务来工作。
第四层主要有Heat、Magnum、Sahara、Solum和Murano等,其中Heat主要提供orchestration服务,Magnum主要提供容器服务,Sahara主要提供大数据服务,我们可以通过Sahara很方便地部署Hadoop、Spark集群。Solum主要提供应用开发的服务,并且可以提供一些类似于CI/CD的功能。Muarno主要提供应用目录的服务,类似于App Store,就是用户可以把一些常用的应用发布出来供其他用户去使用。最右边是Kolla,Kolla的主要功能是容器化所有的OpenStack服务,便于OpenStack安装部署和升级。
OpenStack中和Docker有关系的项目
主要包括Nova、Heat、Magnum、Sahara、Solum、Murano和Kolla等。由图3得知,和Docker相关的大部分项目都在PaaS和SaaS层。
(1)Nova Docker Driver
这个Driver是OpenStack和Docker的第一次集成,主要是把Docker作为一种新的Hypervisor来处理,把所有的Container当成VM来处理。提供了一个Docker的Nova Compute Driver,集成很简单,通过Docker REST API来操作Container。
(2)Heat Docker Driver
因为Nova Docker Driver不能使用Docker的一些高级功能,所以社区就想了另一个方法,和Heat去集成。
因为Heat采用的也是插件模式,所以就在Heat实现了一个新的Resource,专门来和Docker集成。这个Heat插件是直接通过REST API和Docker交互的,不需要和Nova、Cinder和Neutron等来进行交互。
(3)Magnum
在OpenStack和Docker集成的过程中,我们发现从OpenStack现有的项目中,找不到一个很好的集成点,虽然和Nova、Heat都做了集成的尝试,但缺点很明显,所以社区就开始了一个新的专门针对Docker和OpenStack集成的项目Magnum,用来提供容器服务。
Mangum的主要目的是提供Container服务的,它同时还可以和多个Docker集群管理系统集成,包括K8S、Swarm、CoreOS等。和这几个平台集成的主要原因是能让用户可以很方便地通过OpenStack云平台来集成K8S、CoreOS、Swarm这些已经很成型的Docker集群管理系统,促进Docker和OpenStack生态系统的融合。
(4)Murano
Murano是Mirantis贡献的,并且也进了OpenStack Namespace。也和K8S集成了,用户可以通过Murano使用K8S的功能,可以通过Murano部署Pod、Service、Replication Controller等。Murano主要是在OpenStack基础上提供应用目录服务。Muarno和Solum之间其实是有关系的,Solum主要是用来开发应用的,Solum把应用开发完后,可以通过Murano来发布。用户可以通过Murano挑选自己需要的应用服务,通过应用服务组合构建自己的应用。
参考文章:
http://www.4u4v.net/shen-du-jie-xi-docker-he-openstack-xi-tong-ji-cheng.html
OpenStack、KVM、VMWare和Docker的更多相关文章
- 【转载】我为什么弃用OpenStack转向VMware vsphere
我为什么弃用OpenStack转向VMware Vsphere,一切皆为简单.高效.因为我们在工作过程中涉及到大量的测试工作,每天都有成百个虚拟机的创建和销毁工作. 工作任务非常繁重,我们的持续集成平 ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip
之前在测试环境(centos7.2)上部署了openstack云平台(完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建),openstack在neutron组网 ...
- openstack与VMware workStation的区别
免责声明: 本文中使用的部分图片来自于网络,如有侵权,请联系博主进行删除 最近一直在研究云计算,恰好有个同事问了我一个问题:你们研究的openstack到底是什么东西?跟VMware Work ...
- Migration workstation vms to openstack kvm
Migration workstation vms to openstack kvm 分别分成(磁盘是否拆分,vms 是否 有多个磁盘驱动器) 1, linux迁移 vmware workstatio ...
- openstack对接VMware浅析
前言 本文是对openstack对接vmware的浅析,所以本文重点是以下两点: 先了解它的整体架构,搞清楚为什么要用这样的架构: 然后再了解架构中的各个组件,组件提供的主要功能与各个组件之间的交互 ...
- 谁是云的王者?OpenStack与VMware优劣对比
[编者按]在云计算生态系统中,有两种类型的用户需要使用云计算资源:传统型(Traditional IT applications)和在互联网大潮下逐渐崛起云计算应用型(Cloud-aware appl ...
- OpenStack, kvm, qemu-kvm以及libvirt之关系
OpenStack, kvm, qemu-kvm以及libvirt之关系: KVM是最底层的hypervisor,它是用来模拟CPU的运行,它缺少了对network和周边I/O的支持,所以我们是没法直 ...
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(2)--云硬盘等后续配置
继上一篇博客介绍了完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建,本篇继续讲述后续部分的内容 1 虚拟机相关1.1 虚拟机位置介绍 openstack上创建的 ...
- OpenStack+kvm虚拟机xml格式解析
配置说明 首先介绍一下配置结构: xml配置遵循<keyword> xxxxxx </keyword>的格式,即一个配置段以<keyword>开头,以</ke ...
随机推荐
- My97DatePicker设置,包括隐藏 清空,设置最大日期等 转载
My97DatePicker是一款非常灵活好用的日期控件.使用非常简单. 1.下载My97DatePicker组件包 2.在页面中引入该组件js文件: <script type=&quo ...
- Android Fragment Base
public class FragmentTabsActivity extends FragmentActivity implements OnClickListener { //定义Fragment ...
- sql语句判断身份证性别等
SELECT t.card_number ,) AS "省份", SUBSTR(t.card_number,,) "出生年月", SUBSTR(t.card_n ...
- jquery如何获取type=hidden的input元素的值?
function setHiddenFields() { var hiddens = $("input:hidden"); $.each(hiddens, function (in ...
- tomcat https 证书生成与配置
第一步:生成证书 命令行输入: keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore &quo ...
- CH5301 石子合并【区间dp】
5301 石子合并 0x50「动态规划」例题 描述 设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300).每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆, ...
- linux文件与目录管理命令(ubuntu)
ls:列出目录 选项与参数: -a:全部文件,隐藏档(开头为.的文件)也会列出: -d:仅列出目录本身(也就是 . ),而不是目录下的所有文件及目录: -l:长字符串列出,包括文件的属性.权限等数据.
- js当前页面刷新并且清空文本内容的方法
js当前页面刷新并且清空文本内容的方法: 1.js代码:location.reload(); 2.html:<body onload="document.forms[0].reset( ...
- 使用 Apache Commons CLI 解析命令行参数示例
很好的输入参数解析方法 ,转载记录下 转载在: https://www.cnblogs.com/onmyway20xx/p/7346709.html Apache Commons CLI 简介 Apa ...
- C#建WindowForm调用R可视化
众所周知R软件功能非常强大,可以很好的进行各类统计,并能输出图形.下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上的方法,文中介绍的很详细,需要的朋友可以参考下. ...