从一项颠覆性的技术成果转化并衍生出一整套社区体系,Docker在发展速度上打破了一个又一个历史纪录。然而,Docker项目在采纳与普及方面表现出惊人态势的同时,也给我们带来了一系列疑问与困惑。

在今天的文章中,我希望将注意力集中在朋友们最为关注的评论议题身上。随着Docker项目在人气方面的持续飙升,很快刚刚接触这一新生事物的读者在实践过程中不禁产生了这样的疑问:如果已经决定使用Docker,是否还有必要同时使用OpenStack?

在给出自己的观点之前,我打算首先就背景信息入手为各位进行讲解,从而更为透彻地认清这个命题背后所隐藏的理论基础。

背景信息

从最为简单的构成形式出发,Docker实际上旨在提供一套能够在共享式基础设施之上对软件工作负载进行管理的容器环境,但同时又确保不同负载之间彼此隔离且互不影响。以KVM为代表的虚拟机系统所做的工作也差不多:创建一套完整的操作系统堆栈,通过虚拟机管理程序将与该系统相关的设备囊括进来。然而与虚拟机解决方案的区别在于,Docker在很大程度上依赖于Linux操作系统所内置的一项功能——名为LXC(即Linux容器)。LXC利用内置于操作系统当中的各项功能将不同进程的内存进行划分,甚至能够在一定程度上拆分CPU与网络资源。Docker镜像不需要像一套全新操作系统那样进行完整的引导过程,这样一来软件包的体积就能得到大幅压缩、应用程序运行在共享式计算资源之上时也将具备更为显著的轻量化优势。除此之外,Docker还允许工作负载直接访问设备驱动程序、从而带来远超过虚拟机管理程序方案的I/O运行速度。在这种情况下,我们得以直接在裸机设备上使用Docker,而这就带来了前面提到的核心问题:如果已经使用了Docker,我们还有必要同时使用OpenStack等云方案吗?

前面的结论绝非信口开河,Boden Russell最近针对Docker与KVM等虚拟机管理程序在性能表现上的差异进行了基准测试,并在DockerCon大会上公布了测试结果。

本次基准测试提供相当详尽的具体数据,而且如预期一样,测试结果显示引导KVM虚拟机管理程序与引导Docker容器之间存在着显著的时间消耗差异。本次测试同时表明,二者之间在内在与CPU利用率方面同样存在着巨大区别,具体情况如下图所示。

红色线条为KVM,蓝色线条为Docker。

这种在性能表现上的显著区别代表着两套目的相近的解决方案在资源密度与整体利用率方面大相径庭。而这样的差异也将直接体现在运行特定工作负载所需要的资源总量上,并最终反映到实际使用成本当中。

结论整理

·上述结论并不单纯指向OpenStack,但却适用于OpenStack以及其它与之类似的云基础设施解决方案。在我看来,之所以问题的矛头往往最终会被指向OpenStack,是因为OpenStack项目事实上已经在私有云环境领域具备相当高的人气,同时也是目前我们惟一会考虑作为Docker替代方案的技术成果。

·问题的核心不在于OpenStack,而在于虚拟机管理程序!

很多性能基准测试都将Docker与KVM放在了天秤的两端,但却很少将OpenStack牵涉于其中。事实上,前面提到的这次专项基准测试同时将OpenStack运行在KVM镜像与Docker容器环境之下,结果显示这两类技术成果能够带来理想的协作效果。考虑到这样的情况,当我们选择将OpenStack运行在基于Docker的Nova堆栈当中时——正如OpenStack说明文档提供的下图所示——那些资源利用率参数将变得无关紧要。

·在这种情况下,云基础设施能够在容器或者虚拟机管理程序当中提供一套完整的数据中心管理解决方案,而这仅仅属于庞大系统整体当中的组成部分之一。以OpenStack为代表的云基础设施方案当中包含多租户安全性与隔离、管理与监控、存储及网络外加其它多种功能设置。任何云/数据中心管理体系都不能脱离这些服务而独立存在,但对于Docker或者是KVM基础环境却不会做出过多要求。

·就目前来讲,Docker还不算是一套功能全面的虚拟化环境,在安全性方面存在多种严重局限,缺乏对Windows系统的支持能力,而且因此暂时无法作为一套真正可行的KVM备用方案。尽管正在持续进行当中的后续开发工作将逐步弥合这些差距,但抱持着相对保守的心态,这些问题的解决恐怕也同时意味着容器技术将在性能表现方面有所妥协。

·另外需要注意的是,原始虚拟机管理程序与经过容器化的实际应用程序性能同样存在着巨大差异,而且下面这幅来自基准测试的图表清楚地说明了这一点。目前可能合理的解释在于,应用程序通常会利用缓存技术来降低I/O资源开销,而这大大影响了测试结果对真实环境中运行状态的准确反映。

·如果我们将Docker容器打包在KVM镜像当中,那么二者之间的差异将变得可以忽略不计。这套架构通常利用虚拟机管理程序负责对云计算资源的控制,同时利用Heat、Cloudify或者Kubernetes等流程层在虚拟机资源的容纳范围之内进行容器管理。

总结

由此我得出了这样的结论:要想正确地看待OpenStack、KVM以及Docker三者之间的关系,正确的出发点是将其视为一整套辅助堆栈——其中OpenStack扮演整体数据中心管理方案的角色,KVM作为多租户计算资源管理工具,而Docker容器则负责与应用部署包相关的工作。

在这样的情况下,我们可以汇总出一套通用型解决模式,其中Docker分别充当以下几种角色:

·Docker提供经过认证的软件包,并保证其能够与稳定不变的现有基础设施模型顺利协作。

·Docker为微服务POD提供出色的容器化运行环境。

·在OpenStack之上使用Docker,并将其作用与裸机环境等同的运行平台。

前面说了这么多,我确实亲眼见证过不少经过精确定义的工作负载实例,对于它们来说是否使用云基础设施仅仅是种自由选项而非强制要求。举例来说,如果我出于DevOps的目的而考虑建立一套小型自动化开发与测试环境,那么我个人更倾向于在裸机环境上直接使用Docker机制。

而虚拟机与容器这两类环境之间,流程层将成为一套绝佳的抽象对接工具。

将流程框架与Docker共同使用的一大优势在于,我们能够根据实际需求、随时在OpenStack以及裸机环境之间进行切换。通过这种方式,我们将能够选择任意一种解决选项——只要其切实符合我们流程引擎对于目标环境的具体需要。OpenStack Orchestration(即Heat)在最新发布的Icehouse版本当中已经明确表示支持Docker环境。Cloudify作为一款基于TOSCA的开源流程框架,原本适用于OpenStack以及VMware、AWS乃至裸机等云环境,而最近也开始将Docker支持纳入自身。谷歌Kubernetes主要面向的是GCE协作目标,但我们也能够通过自定义来使其适应其它云或者运行环境。

原文:http://cloud.51cto.com/art/201411/458342.htm

英文:http://opensource.com/business/14/11/do-i-need-openstack-if-i-use-docker

[转]用了docker是否还有必要使用openstack?的更多相关文章

  1. Docker(十三):OpenStack部署Docker集群

    1.介绍 本教程使用Compose.Machine.Swarm工具把WordPress部署在OpenStack上. 本节采用Consul作为Swarm的Discovery Service模块,要利用C ...

  2. 京东云、新浪微博等专家畅谈Docker未来格局:开放与竞争(下)

    在上次推送的文章中(传送门),田琪老师分享了他的DockerCon 2015峰会见闻.在“QCon高可用架构群”中,田老师分享之后,几位专家也参与了讨论.他们是: 闫国旗:京东资深架构师,京东架构技术 ...

  3. 在KCloud上轻松“玩转”Docker

    继CoreOS和Atomic镜像上线之后,刻通云紧跟Docker技术发展脚步,近期又推出了Ubuntu Core镜像,成为国内首家支持Ubuntu Core镜像的基础云服务商,同时也是国内唯一一家同时 ...

  4. Docker网络——单host网络

    前言 前面总结了Docker基础以及Docker存储相关知识,今天来总结一下Docker单主机网络的相关知识.毋庸置疑,网络绝对是任何系统的核心,他在Docker中也占有重要的作用.同样本文基于Clo ...

  5. 什么是Docker??

    ​​Docker是一个轻量级虚拟机,也是一种Linux容器,它突破了以往的沙盒技术,解放了应用部署,让PaaS的应用场景更为广泛. ​ docker是通过内核虚拟化技术((namespaces及cgr ...

  6. 认识容器和Docker(一)

    前言: 这句话应该是开发人员经常挂在嘴边的吧! “在我的机器上是正常工作的啊,MD,怎么到你这就不行了?” 开发人员就会联想到: 1. 肯定是你环境有问题: 2. 要么就是你个傻*不会用吧: 带着这句 ...

  7. OpenStack、KVM、VMWare和Docker

    一.虚拟化 1.什么是虚拟化 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内 ...

  8. docker容器学习笔记

    docker是通过内核虚拟化技术来提供容器的资源隔离与安全保障. docker组成: docker client.docker server.docker组件(镜像(image).容器(contain ...

  9. OpenStack、KVM、Docker——Docker之后还需要OpenStack吗?

    原文链接:http://news.csdn.net/article_preview.html?preview=1&reload=1&arcid=2823129 Docker从一个新兴的 ...

随机推荐

  1. SQL通过身份证获取信息

    SELECT t.identity_number '身份证号',SUBSTR(t.identity_number,1,2) AS "省份",SUBSTR(t.identity_nu ...

  2. ubuntu16.04彻底卸载mysql并且重新安装mysql

    首先删除mysql: sudo apt-get remove mysql-* dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P 清理完毕: ...

  3. MongoDB分片集群节点状态stateStr:RECOVERING解决

    1.关闭一直处于RECOVERING状态的mongodb server /opt/mongodb/mongodb-linux-x86_64-2.4.8/bin/mongo  127.0.0.1:220 ...

  4. web页面实时更新页面的原理--WebSocket

    原文:https://www.jianshu.com/p/8f956cd4d42b angular-cli启动的项目也可以自动刷新,底下应该也是应用的websocket的原理. ----------- ...

  5. scala类型系统 type关键字

    和c里的type有点像. scala里的类型,除了在定义class,trait,object时会产生类型,还可以通过type关键字来声明类型. type相当于声明一个类型别名: scala> t ...

  6. 下载论坛源码GBK UTF8 BIG5分别是什么意思

    下载论坛源码GBK UTF8 BIG5分别是什么意思? 提问者:ly1987520 | 浏览次数:4010次 下载论坛源码简体中文GBK 简体中文UTF8 繁体中文BIG5 分别是什么意思?他们的区别 ...

  7. 如何使用Apache设置404页面

    方法一:[.htaccess文件配置404] 网上大部分解决办法是:首先你要开启Apache的rewrite_module模块,支持.htaccess,然后在网站根目录建立.htaccess文件(或已 ...

  8. 在LoadRunner中查找和替换字符串

    参考<Search & Replace function for LoadRunner>: http://ptfrontline.wordpress.com/2009/03/13/ ...

  9. TimesTen 应用层数据库缓存学习:4. 仅仅读缓存

    在运行本文样例前.首先先运行TimesTen 应用层数据库缓存学习:2. 环境准备中的操作. Read-only Cache Group的概念 仅仅读缓存组例如以下图: 仅仅读缓存组(Read-Onl ...

  10. Linux 目录和文件操作

    Linux常用命令--目录和文件操作 [目录]删除.复制.移动 : 1.删除文件夹用:rmdir 文件夹名 但是rmdir不能删除非空的文件夹,那如何删除非空文件夹呢: 2.通常情况下,删除文件用:r ...