从一项颠覆性的技术成果转化并衍生出一整套社区体系,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容器学习笔记

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

  2. 用Docker之后还需要OpenStack吗

    Docker从一个新兴的技术到一个商品化模式,这一过程的发展速度很惊人,它炙手可热的同时也给带来一些困惑.这也带来了一些同学的质疑和评论:假如用了Docker再去用OpenStack是否合适?本文来自 ...

  3. 深入了解什么是Docker

    基于高度虚拟化所诞生的容器技术,如今已经走向大规模应用.那么容器.虚拟机.Docker.Openstack.Kubernetes 之间又有什么关系,对现在的选择有什么影响呢? 上世纪 60 年代,计算 ...

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

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

  5. 携程Docker实践

    原文地址:http://www.iteye.com/news/31468         请点击原文阅读 ---------------------以下是原文--------------------- ...

  6. 什么是Docker??

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

  7. 1.Docker学习之基础知识

    0x00 Docker 快速入门 1.基础介绍 2.Docker 架构 3.Docker 资源隔离 4.Docker 容器文件系统 0x01 Docker 安装 1. Linux 2. Windows ...

  8. 面经 - OpenStack(Docker、Django、K8S、SDN)知识点

    文章目录 概述 OpenStack 虚拟化 kvm 网络虚拟化 基本技术 Memcached Etcd 消息队列 概念 交换机类型 缺点 重复投递问题 顺序投递问题 restful api Horiz ...

  9. 理论+实操:docker入门初体验,申请阿里镜像加速器

    文章目录 一:Docker概述 1.1 docker概念: 1.2 docker设计的目标: 1.3 docker的组成: 1.4 docker的使用场景 1.5 docker版本: 二: docke ...

最新文章

  1. 面试:URI中的 “//” 有什么用?
  2. [提示]普通用户使用sealos安装k8s集群的话,默认还是会装到root用户的home目录/root
  3. Codeforces Round #491 (Div.2)
  4. 局域网聊天软件 设计文档怎么写?
  5. 苹果这个酷炫的项目要流产了?市场未爆发或成主因
  6. Tomcat的startup.bat启动闪退解决办法
  7. 事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
  8. 云课堂智慧职教计算机作业答案,云课堂智慧职教毛概作业答案
  9. 高通芯片(Android)恢复\编辑\备份 imei(nv信息)工具及步骤
  10. html实现让电脑断网的功能,简单几步,即可实现电脑自动断网
  11. 微机大作业—— 24秒倒计时器
  12. 【高通量测序】.dna文件批量读取CAG重复序列长度
  13. 几个互联网项目管理软件
  14. 计算机主机可以有几个硬盘,一台电脑可以安装盘几个硬盘?
  15. Hack the box (HTB) Metatwo靶机
  16. 计算机分区的优点,作为一个电脑老手来告诉你们:电脑分区真的是越多越好吗?...
  17. Apple ASA归因技术支持
  18. 【无标题】如何用HTML做出一份简单的问卷调查?
  19. 【obs】OBS Library D3D11 OpenGL wrapper
  20. 写代码之前要做什么?

热门文章

  1. css中关于transform、transition、animate的区别
  2. Maven生命周期——2
  3. 20130418代码
  4. vim 的ctags,taglist和supertab详解
  5. 创建华丽 UI 的 7条规则 第一部分 (2019年更新)
  6. Node.js 线程你理解的可能是错的 1
  7. 面对海量请求,缓存设计还应该考虑哪些问题?(转)
  8. tomcat相关问题汇总
  9. 《Servlet和JSP学习指南》一2.5 小结
  10. About UserAccountControl