正确认识Docker、Kubernetes 、Apache Mesos

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 无数的文章、社交媒体在探讨~~Docker、Kubernetes、Mesos~~三者之间孰优孰劣。如果你听信了某些一知半解者的言论,你可能会认为这三个开源项目正在为争夺容器霸权而殊死战斗。同时,你也会相信,在这三者间的选择无异于对其所奉宗教的信仰,而且真正的信徒敢于大胆和异教徒作斗争,并且拥护自己的信仰。

无数的文章、社交媒体在探讨Docker、Kubernetes、Mesos三者之间孰优孰劣。如果你听信了某些一知半解者的言论,你可能会认为这三个开源项目正在为争夺容器霸权而殊死战斗。同时,你也会相信,在这三者间的选择无异于对其所奉宗教的信仰,而且真正的信徒敢于大胆和异教徒作斗争,并且拥护自己的信仰。

那些都是扯淡。

虽然这三种技术都可以使用容器来部署、管理和扩展应用程序,但实际上它们每个都侧重解决不同的问题,并且扎根非常不同的环境之上。事实上,这三种被广泛采用的工具链彼此完全不同。

与其比较这些快速演进的技术的重叠特性,不如让我们回顾一下每个项目的原始任务、架构以及它们之间如何相互补充和交互。

让我们从Docker开始
今天的Docker公司脱胎于一个平台即服务的初创公司dotCloud。dotCloud团队发现,在许多应用程序和客户之间管理依赖关系和二进制文件需要做大量的工作。因此,他们将Linux cgroups和namespaces的一些功能组合成一个简单易用的包,这样应用程序就可以在任何基础设施上持续运行。这个包就是Docker镜像,它提供以下功能:

将应用程序和库封装在单个包中(Docker镜像),因此应用程序可以跨多环境一致部署;
提供类似于git的语义,例如“dockerpush”,“docker commit”,这样可以让应用程序开发人员可以轻松地采用新技术,并将其融入到现有的workflow中;
将Docker镜像定义为不可变层,启用不可变的基础设施。提交的更改被存储为一个单独的只读层,这让镜像复用和跟踪更改变得更加容易。另外,层还可以通过传输更新而不是整个镜像来节省磁盘空间和网络流量;
通过使用可以临时存储运行时更改的可写层来实例化不可变映像,从而方便快速部署和扩展应用程序的多个实例。
随着Docker的风靡,开发人员开始从笔记本电脑转移到在生产环境中运行。这就需要借助工具来协调这些容器,我们称为容器编排。有趣的是,Apache Mesos的马拉松称为当时(2014年6月)第一个支持Docker镜像的容器编排工具(我们将在下面详细描述它)。就连Docker创始人、首席技术官Solomon Hykes也推荐Mesos为“生产集群的黄金标准”。不久之后,除了马拉松之外,许多容器编排技术出现了,这其中包括:Nomad、Kubernetes、DockerSwarm(现在是Docker引擎的一部分)。

随着Docker开始商业化开源文件格式,该公司也开始引入工具来补充核心Docker文件格式和runtime引擎,包括:

Dockerhub
Docker registry
Docker cloud
Dockerdatacenter
_1

​Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中的特性,使其成为软件行业的游戏规则改变者;这有点类似mp3格式帮助重塑了音乐产业。Docker文件格式成为行业标准,并且领导容器技术供应商(包括Docker、Pivotal, Mesosphere以及其他许多)成立CNCF和OCI。今天,CNCF和OCI的目标就是确保跨容器技术的互操作性和标准化接口,并确保使用任何工具构建的Docker容器,都可以在任何runtime或基础设施上运行。

Kubernetes
谷歌很早就认识到Docker镜像的潜力,并试图在谷歌云平台上交付“容器编排即服务”。谷歌在容器方面有丰富的经验(他们在Linux中引入了cgroups),但是现有的内部容器和像Borg这样的分布式计算工具与它们的基础设施直接耦合。因此,谷歌没有使用现有系统中的任何代码,而是从头开始设计了Kubernetes,以编排Docker容器。Kubernetes于2015年2月发布,并提出以下目标和考虑:

为应用程序开发人员提供一个强大的工具,用于Docker容器编排,而不必与底层基础设施交互;
跨云环境下,为一致的应用程序部署经验和APIs 提供标准部署接口和原型;
构建一个模块化的API核心,允许供应商围绕核心Kubernetes技术集成系统。
截至2016年3月,谷歌向CNCF捐赠了Kubernetes,至今谷歌仍是该项目的主要贡献者(其次是Redhat、CoreOS等)。
_2

Kubernetes对应用程序开发人员非常有吸引力,因为它减少了对基础设施和操作团队的依赖。供应商也非常喜欢Kubernetes,因为它提供了一种简单的方式来让他们拥抱容器运动,并为他们运行自己的Kubernetes部署提供一个商业化解决方案。Kubernetes之所以很有吸引力,因为它是CNCF下的开源项目,与Docker集群相比,后者虽然是开源的,但却受到Docker Inc .的严格控制。

Kubernetes的核心优势是为应用程序开发人员提供强大的工具来编排无状态的Docker容器。虽然有多个计划将项目的范围扩展到更多的工作负载(如分析和有状态的数据服务),但这些计划仍然处于非常早期的阶段,还有待观察。

Apache Mesos
Apache Mesos最初是UCBerkeley为创建下一代集群管理器而诞生的项目,并从如谷歌的Borg和Facebook的Tupperware中吸取经验教训。但是Borg和Tupperware是单体架构,并且是和物理基础设施绑定的封源专有技术。Mesos引入了模块化架构,采用开源的方法,且其设计完全独立于底层基础架构。基于这些因素,Mesos很快被Twitter、Apple(Siri)、Yelp、Uber、Netflix以及许多领先的科技公司所采用,以支持他们在微服务、大数据和实时分析到弹性伸缩的一切实践。

作为一个集群管理器,Mesos的架构是为了解决一组非常不同的挑战:

将数据中心资源整合成一个单一的池,以简化资源配置,同时在私有或公共云之间提供一致的应用程序和操作体验;
在相同的基础设施上使用不同的工作负载,比如分析、无状态微服务、分布式数据服务和传统应用程序,以提高利用率,降低成本和空间;
特定应用程序的任务(如部署、自修复、扩展和升级)设置为自动化day-two 操作;提供高可用的容错基础设施;
在不修改集群管理器或现有应用程序的情况下,提供常绿的可扩展性来运行新的应用程序和技术;
将应用程序和底层基础设施弹性扩展到数万个节点。
Mesos的独特之处还在于,可以单独管理各种不同的工作负载——包括传统的应用程序,如Java、无状态Docker微服务、批处理作业、实时分析和有状态的分布式数据服务。Mesos广泛的工作负载覆盖来自于它的两级架构,它支持“应用感知”的调度。应用感知调度是通过将应用程序特定操作逻辑封装到“Mesos框架”(类似于运行中的runbook)来完成的。

Mesos Master资源管理器,提供这些底层基础设施的框架部分,同时保持隔离。这种方法允许每个工作负载有自己专用的应用程序调度器,它了解其对部署、缩放和升级的具体操作需求。应用程序调度程序也独立地被开发、管理和更新,这让Mesos保持高度可扩展性,支持新的工作负载,或者随着时间的推移增加更多的操作能力。
_3

以一个团队如何管理升级为例。无状态应用程序可以从“蓝/绿”部署方法中获益;当旧的应用程序还在使用的时候,另一个完整版本的应用程序已经spun up,当旧的应用程序被销毁时,流量切换到新的应用程序。但是,升级像HDFS或Cassandra这样的数据工作负载需要一次脱机,维护本地数据量以避免数据丢失,执行特定序列的升级,并在升级之前和之后对每个节点类型执行特殊检查和命令。这些步骤中的所有环节针对特定的应用程序或服务,甚至是特定版本进行的。这使得用常规容器编排调度器管理数据服务变得非常困难。

Mesos具备按需管理每个工作负载的能力,使得许多公司将Mesos作为一个统一的平台,并通过其将微服务和数据服务结合运行。运行数据密集型应用程序的一个通用参考架构是“SMACK堆栈”。

清晰时刻
注意:我们在描述Apache Mesos的过程中,没有提及任何关于容器编排的内容。那么,为什么人们总是会将Mesos与容器编排联系起来呢?容器编排是一个可以在Mesos模块化架构上运行的工作负载的例子,它使用的是构建在Mesos上的一个专门的编排“框架”Marathon。Marathon最初是为了在cgroup容器中编排应用程序(如JARs、tarball、ZIP文件)而开发的,并且在2014年成为第一批支持Docker容器的容器编排之一。

因此,当人们拿Docker、Kubernetes和Mesos比较时,他们实际上是在对比Kubernetes、Docker Swarm和Mesos上运行的Marathon。

为什么这很重要?因为Mesos根本不关心上面跑的是什么。Mesos可以为Java应用服务器、Docker容器编排、Jenkins CI Jobs, Apache Spark analytics, Apache Kafka streaming以及更多的共享基础设施提供集群服务。Mesos甚至可以运行Kubernetes或其他容器编排,尽管还没有对外集成。
_4

Mesos的另一个考虑(以及为什么它对许多企业架构师有吸引力)是它在运行任务关键工作负载时的成熟度。Mesos已经在大规模生产环境下运行(数万台服务器)超过7年,这就是为什么它比市场上其他技术更成熟,更可靠的原因。

这一切意味着什么?
总之,这三种技术都与Docker容器有关,并允许您访问容器编排,以获得应用程序的可移植性和伸缩性。那么在这三者间要如何选择呢?这就要视不同的工作环境需求而定,工作需求不同,所适用的工具自然也是各不相同。如果您是一名应用程序开发人员,并且正在寻找一种现代的方法来构建和打包您的应用程序,或者加快微服务项目,那么Docker容器格式和开发工具是你最好的选择。

如果你是一个dev / devops团队,想要构建一个专门的docker容器编排系统,并愿意亲自动手让你的解决方案和底层基础设施集成(或依赖于公共云基础设施如谷歌引擎或Azure容器服务),Kubernetes将是你一个很好的选项。

如果您想构建一个可靠的平台,用以运行多任务关键工作负载,包括Docker容器、遗留应用程序(例如Java)和分布式数据服务(例如Spark、Kafka、Cassandra、Elastic),并希望所有这些都可以在云或数据中心上可移植,那么,Mesos是最适合你的。

无论你作何选择,你所拥抱的一系列工具都将提升你的服务器资源利用率,同时简化应用程序移植,并提高开发人员的敏捷性。你真的值得拥有!

原文链接:

Docker vs. Kubernetes vs. Apache Mesos: Why What You Think You Know is Probably Wrong

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
9天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
2天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
8天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
40 1
|
16天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
62 7
|
15天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
51 6
|
15天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
24 3
|
3月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
44 1
|
23天前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
526 13
Apache Flink 2.0-preview released
|
27天前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
61 3
|
2月前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
下一篇
无影云桌面