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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讲的是容器存储架构比较:Kubernetes、Docker和Mesos Compare【编者的话】 容器存储是容器离不开的一个话题,对于无状态的Docker容器,容器重启时容器数据会自动清除,一些静态的数据我们可以通过配置文件或者在容器build时直接写死。
本文讲的是容器存储架构比较: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
任何应用程序都需要数据支撑,这也是我们商业存在基石。最初,容器应运而生的主要目的之一也是为了解决无状态服务。但短期时间内,随着技术的不断成熟,允许容器化应用程序直接访问数据的需求也在不断的增加。现代化的应用程序和传统的应用程序都需要诸如文件、块,或者工具化文件存储对象、关系型数据库、流媒体文件等这些不同类型的存储。
1.jpg

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

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

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的生命周期。

当前总概

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

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

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


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

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

本文作者:ylzhang

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
16天前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
19天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
164 77
|
5天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
48 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
3天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
17天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
1天前
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。
|
17天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
29天前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
51 1
|
29天前
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
47 1
|
5天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
21 2

相关产品

  • 容器服务Kubernetes版