容器存储架构比较:Kubernetes、Docker和Mesos Compare

本文讲的是容器存储架构比较:Kubernetes、Docker和Mesos Compare【编者的话】 容器存储是容器离不开的一个话题,对于无状态的Docker容器,容器重启时容器数据会自动清除,一些静态的数据我们可以通过配置文件或者在容器build时直接写死。但是对于数据库、日志文件等可以实时变化的数据,我们不能够通过这种方法存取。结合场景这次主要谈下Docker的存储方式,以及主要存储方式的对比。

【3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站】本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览;持续集成系统介绍;客户端与服务端的 CI/CD 实践;开发流程中引入 CI、CD;Gitlab 和 CI、CD 工具;Gitlab CI、Drone 的使用以及实践经验分享等。

“There is no such thing as a stateless architecture” —— Jonas Boner

任何应用程序都需要数据支撑,这也是我们商业存在基石。最初,容器应运而生的主要目的之一也是为了解决无状态服务。但短期时间内,随着技术的不断成熟,允许容器化应用程序直接访问数据的需求也在不断的增加。现代化的应用程序和传统的应用程序都需要诸如文件、块,或者工具化文件存储对象、关系型数据库、流媒体文件等这些不同类型的存储。

虚拟机也可以管理应用程序,但是这种方法对硬件仿真有一定的要求,容器可以保证应用程序的可移植性远大于虚拟化的实现。实际应用程序的可移植性的能力,还依赖于个容器编排工具的互操作性。对于当前的原生云应用程序,存储也是一个很关键的组件,因为应用程序可以利用持久存储平台以及围绕其特性进一步开发特性功能。通过Clinton Kitson's的博客:理解原云应用存储获取更多信息。

容器的协调者和运行时对存储服务发起特定的请求,可以实现诸如创建/删除、检查/清单、附加/分离、安装/卸载等操作。这是解决容器协调者之间存储问题的一种独特的尝试,不过在行业中也是有分歧的。对外存储编排请求API分为两种情况:首先,是in-tree驱动程序,它是直接将原生代码编译到容器协调器;第二,是out-of-tree,借助于外部插件驱动。每一种方式都有自己的优缺点:in-tree驱动器受制于容器协调器的发布周期;而out-of-tree插件式驱动可能无法提供与容器协调器绑定的增强特性集。

Docker

Docker是在1.7的实验版本中通过创建Docker Volume 驱动接口首次解决了外部存储的问题。1.13版本中Docker又引入了插件模型,也就是Docker Store。通过查找目录/run/docker/plugins,Docker发现并可使用UNIX插件(.sock文件),这是一个使用out-of-tree模型的例子。

UNIX域套接字( Unix domain socket)文件必须在相同的Docker主机上运行。但如果指定了远程访问URL,插件也可以通过spec和json配置文件实现在不同的主机上运行。实现存储功能的集中化,这也是插件职责之一。该接口接受JSON、RPC类型的HTTP请求。out-of-tree模型公开的接口提供了完整的Volume生命周期,也为Docker CLI提供了编排功能。但是,如快照或复制等高级存储功能,还未提供暴露给Docker CLI。

Mesos

Mesos直到v0.23版本才开始支持本地存储。Mesos-Module-Dvdi就是为这个问题而提出的方案,随后它的特性被合并到Mesos,直到Mesos 1.0+版本方能使用。DVDCLI是将Docker Volume Driver CLI打包封装到Mesos中,允许在所有的Mesos容器内使用任何Docker Volume驱动,Mesos-Module-Dvdi就是利用正在实施中的DVDCLI实现了本地存储。与Docker类似,框架与DVDCLI互联通信支持JSON格式,并且也提供使用JSON/RPC通过HTTP与Docker Volume Driver Interface通信。

正如前面所提及的,由于它使用了Docker Volume 驱动,因此它是一个out-of-tree插件,并且具有和Docker CLI相同的Volume生命周期和限制。

Kubernetes

Kubernetes的独特之处在于它既有in-tree又有out-of-tree驱动。我们已经在“Kubernetes存储说明”和“Kubernetes 1.6版本中关于存储的新功能“这两篇文章中详细说明,我们再次回顾下:

in-tree驱动来自于Kubernetes源码,也是其标准发行版的一部分。通过这些驱动,可以根据Kubernetes提供的接口(如Mount/Umount、Create/Delete等)向其存储平台暴露API,Kubernetes执行所有功能,并向驱动程序执行特定的API调用,从而执行所需的操作。这也可以充分利用Kubernetes的特性,比如:动态供应的存储类。这样也是有缺点的,如果系统BUG或增加需要新增一些平台特性,则依赖于Kubernetes的发布周期。发布周期可能意味着3-6个月的等待修复、持续维护、回合代码等流程。

Out-of-tree驱动使用Flexvolume接口。Flexvolume允许用户编写自己的驱动程序,并在Kubernetes中添加对其Volume的支持。供应商的驱动应该被安装在在每个Kubelet节点和主节点上,Volume插件的路径:usr/libexec/kubernetes/kubelet-plugins/volume/exec/<vendor~driver>/。这使得驱动程序可以在核心的Kubernetes代码之外运行,并且可以根据自己的时间节点表发布更新或者修复BUG。Flexvolume接口预期Volume的创建和删除可以基于外部插件进行。因此,Flexvolume只使用Attach/Detach 和 Mount/Unmount功能,而不是整个Volume的生命周期。

当前总概

把所有的存储功能结合在一起,我们可以看到这是一个非常碎片化的空间,以及三者之间各有千秋。

而所有这一切都意味着存储供应商需要创建多层次封装集成,从而支持整个容器生态系统。容器存储接口(CSI)项目处于早期阶段,但最终将会成为存储和容器成功的关键因素。

与此同时,我们已经将所有的功能整合,并且集成了针对每一种容器协调者功能的存储方法。我们深知当前和未来的容器化应用程序依赖存储,而且这个解决方案适应每一个场景:Docker和Mesos中的REX-RayFlexREX和Kubernetes,Docker中的REX-RAY插件,Kubernetes的本地ScaleIO驱动程序。

原文链接:Container Storage Architectures: How Does Kubernetes, Docker, and Mesos Compare?(翻译:ylzhang)

原文发布时间为:2017-08-11

本文作者:ylzhang

原文标题:容器存储架构比较:Kubernetes、Docker和Mesos Compare

时间: 2024-12-03 16:00:22

容器存储架构比较:Kubernetes、Docker和Mesos Compare的相关文章

容器,你还只用Docker吗?(下)

作者介绍 周晖,Pivotal大中国区云计算首席架构师,有丰富的PaaS云实际建设经验,负责过国内某知名银行已经生产上线一年的PaaS云的架构设计和部分功能的实现,参与过某超算PaaS.某超市电商PaaS.某电力PaaS等项目的建设.   上文说到CaaS生态圈的公司如何应对Docker用捆绑方式从容器入侵CaaS领域,CaaS厂商通过容器抽象.标准化容器运行时RunC以及容器功能外化插件来重新定义容器.下面我们继续来看CaaS厂商的具体方案.   一.CaaS业界通过分解重组Docker技术来

Docker、Kubernetes、Apache Mesos 之争 | 一个与传说不同的故事

本文讲的是Docker.Kubernetes.Apache Mesos 之争 | 一个与传说不同的故事[编者的话]有无数的文章.讨论和社交网络上的交流在比较 Docker.Kubernetes 和 Mesos. [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览:持续集成系统介绍:客户端与服务端的 CI/CD 实践:开发流程中引入 CI.CD:Gitlab 和 CI.CD 工具:G

容器编排初探:探索Docker swarm mode、Kubernetes和Mesosphere

本文讲的是容器编排初探:探索Docker swarm mode.Kubernetes和Mesosphere[编者的话]本文首先介绍了容器技术的基础知识,说明了容器技术的前景和市场份额.容器技术的重点之一是容器的管理编排.作者介绍了三种编排工具的共同特点和各自的特性.表明企业应该根据自身需求来选择使用那一款工具或者混合使用. [上海站|3天烧脑式微服务架构训练营]培训内容包括:DevOps.微服务.Spring Cloud.Eureka.Ribbon.Feign.Hystrix.Zuul.Spri

SAMI:来自三星的基于Docker和Mesos的容器解决方案(二)

本文讲的是SAMI:来自三星的基于Docker和Mesos的容器解决方案(二),[编者的话]在<SAMI:来自三星的基于Docker和Mesos的容器解决方案(一)>中我们提到,为像SAMI一样的现代IoT服务提供一个稳定安全灵活的IT环境是很有挑战性的.现在我们来探索一下,如何用Mesos和Docker过渡解决这些问题. 开始,我们决定建立一个自动化的流水线,这将使以下成为可能: 构建有容错.自愈功能的基础设施. 使用现代集群管理/分布式初始化系统,确保应用程序定义副本始终都在运行. 使用G

docker 镜像与容器存储目录结构精讲

docker 镜像与容器存储目录结构精讲 很多朋友在初学 docker 的时候非常迷茫,不清楚 docker 是怎样的一种存储方式,并且也不清楚 docker 到底存储在什么地方.其实 docker 的镜像与容器都存储在 /var/lib/docker 下面,那么基于不同的系统又有不同的存储方式,在 ubuntu 下面存储方式为 AUFS:在 Centos 下面存储方式又是 device mapper,下面我们先来看一下 /var/lib/docker 目录,分别有三个阶段,看看在不同阶段都新增

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——2.2 容器式Linux系统的Docker配置

2.2 容器式Linux系统的Docker配置 我们使应用程序容器化,不遗余力地使其变小和变高效,但如果最终要将这些容器部署到缓慢.臃肿的操作系统中,那将使一切努力失去意义.在不断演进的容器模型中,既然容器已包含运行应用程序所需的可执行文件.库以及其他组件,宿主操作系统完全可以简化到只保留运行容器所需的功能. Project Atomic和CoreOS这两个项目的目标是提供专为运行容器而优化的操作系统.这样的操作系统既能够直接运行在硬件上,也能运行在公有云(如亚马逊的EC2或者Google Co

编排管理成容器云关键,Kubernetes和Swarm该选谁

  不论是公有云还是私有云环境,Docker 在新一代技术架构中的重要地位已经毋庸多言,甚至已经有企业在探索完全 Docker 化.在此背景下,如何选择容器技术栈就成为了企业实践的关键.回答这个问题,首先需要厘清技术体系更新的逻辑,再看可选技术是否符合需求.本文认为,容器的管理和编排将是容器云的关键,而 Kubernetes 是最为成熟的编排技术. 容器管理和编排将成云计算主战场 从云化的诱因说起.中国云计算实践八年多,市场认知逐渐提升,锐意创新企业对云的期待已经不是资源弹性.成本优势那么简单,

容器,你还只用Docker吗?(上)

作者介绍 周晖,Pivotal大中国区云计算首席架构师,有丰富的PaaS云实际建设经验,负责过国内某知名银行已经生产上线一年的PaaS云的架构设计和部分功能的实现,参与过某超算PaaS.某超市电商PaaS.某电力PaaS等项目的建设.   一.从一场容器的撕逼战开始说起   从2016年7月底开始,Google Kubernetes布道师 Kelsey Hightower 和Docker的CTO Solomon Hykes在Twitter上发生了一场撕逼大战,主题是要不要用RunC或其他容器来取

Docker、Mesos和Marathon剖析以及入门实战

本文讲的是Docker.Mesos和Marathon剖析以及入门实战,[编者的话]国外广为流传的一个比喻是:在传统服务模式下,可以想象服务器就是IT的宠物(Pets),给它们取名字,并精心抚养长大,当它们生病了,你得为他它们治病.而在新形态的应用服务模型中,虚拟机被看做是农场中的公牛,名字通常都是编号,当他们生病了,你就杀掉他,用一头新牛代替. 未来的应用架构应该像对待农场中的公牛一样:对基础架构的"保养".保护基础架构的各种功能,比起云计算型应用模式可能会逐渐变得越来越不那么重要.最