与Docker,Kubernetes和Mesos相比,有无数的文章,讨论和很多社交喋喋不休。如果您听取部分消息,您会认为这三个开源项目正在为集装箱霸权而战。你也会相信,选择一个在另一个几乎是一个宗教选择; 真正的信徒支持他们的信仰和燃烧的异端者,谁敢于考虑一个替代方案。
那都是双层床。
虽然所有这三种技术都可以使用容器来部署,管理和扩展应用程序,但实际上它们都可以解决不同的问题,并且植根于非常不同的上下文中。实际上,这三个广泛采用的工具链都不是其他的。
而不是比较这些快速发展的技术的重叠特征,让我们重新审视每个项目的原始任务,架构,以及它们如何相互补充和交互。
Docker Inc.今天成为名为dotCloud的平台即服务启动。dotCloud团队发现,管理许多应用程序和客户的依赖关系和二进制文件需要大量工作。因此,他们将Linux cgroups和命名空间的一些功能合并为一个易于使用的包,以便应用程序可以在任何基础架构上始终运行。该包是Docker镜像,它提供以下功能:
Docker越来越受欢迎,开发人员开始从运行在笔记本电脑上的容器转移到生产中。需要额外的工具来协调这些容器跨多个机器,称为容器编排。有趣的是,支持Docker映像(2014年6月)的第一个容器协调器之一是Apache Mesos上的Marathon(我们将在下面更详细地描述)。那年,Docker的创始人兼首席技术官Solomon Hykes将Mesos推荐为“ 生产集群的黄金标准 ”。不久之后,除了马萨诸塞州的Mesos之外,还有许多集装箱业务流程技术出现:Nomad,Kubernetes,而且毫不奇怪,Docker Swarm(现在是Docker Engine的一部分)。
随着Docker将开源文件格式商业化,该公司还开始引入工具来补充Docker的核心文件格式和运行时引擎,其中包括:
资料来源:www.docker.com
Docker将软件及其依赖关系封装在一个软件包中的洞察力一直是软件行业的改变游戏规则; mp3也有助于重塑音乐行业。Docker文件格式成为行业标准,领先的集装箱技术供应商(包括Docker,Google,Pivotal,Mesosphere等)组建了云本地计算基金会(CNCF)和开放式集装箱计划(OCI)。今天,CNCF和OCI旨在确保集装箱技术之间的互操作性和标准化接口,并确保使用任何工具构建的任何Docker容器都可以在任何运行时或基础架构上运行。
Google早日就认识到Docker的潜力,并试图在Google Cloud Platform上提供容器编排“即服务”。Google在容器方面拥有丰富的经验(他们在Linux中引入了cgroups),但现有的内部容器和Borg等分布式计算工具直接与其基础架构相结合。所以,Google不是使用现有系统中的任何代码,而是从头开始设计Kubernetes来编排Docker容器。Kubernetes于2015年2月发布,目标和考虑如下:
到2016年3月,Google 向CNCF捐赠了Kubernetes,今天仍然是该项目的主要负责人(其次是Redhat,CoreOS等)。
来源:维基百科
Kubernetes对应用程序开发人员非常有吸引力,因为它减少了对基础架构和运营团队的依赖。供应商也喜欢Kubernetes,因为它提供了一个容易的方式来拥抱集装箱运动,并提供商业解决方案来运行您自己的Kubernetes部署(这仍然是一个不平凡的运动)的操作挑战。Kubernetes也是有吸引力的,因为它是CNCF下的开放源码,与Docker Swarm相反,Docker Swarm虽然是开源的,受Docker公司的严格控制
Kubernetes的核心优势是为应用程序开发人员提供了用于编排无状态Docker容器的强大工具。虽然有多项举措将项目的范围扩大到更多的工作量(如分析和有状态的数据服务),但这些举措仍处于初期阶段,但仍有待成功。
Apache Mesos作为UC Berkeley项目开始创建下一代集群管理器,并应用云计算分布式计算基础架构(如Google博世和Facebook的Tupperware)所吸取的经验教训。虽然Borg和Tupperware具有单一的架构,并且是与物理基础架构相关的封闭源技术专有技术,但Mesos推出了一种模块化架构,一种开源开发方法,旨在完全独立于基础架构。Mesos被Twitter,Apple(Siri),Yelp,Uber,Netflix迅速采用,以及许多领先的技术公司,以支持从微服务,大数据和实时分析到弹性缩放的一切。
作为集群经理,Mesos被设计为解决一系列不同的挑战:
Mesos具有独特的独特管理能力,能够独立管理各种工作负载,包括Java,无状态Docker微服务,批处理作业,实时分析和状态分布式数据服务等传统应用。Mesos广泛的工作负载覆盖来自于其两级架构,可实现“应用感知”调度。通过将应用程序特定的操作逻辑封装在“Mesos框架”(类似于操作中的运行本))中来实现应用程序感知调度。资源管理员Mesos Master然后提供这些框架的基础架构,同时保持隔离。这种方法允许每个工作负载都有自己的专门构建的应用程序调度程序,可以了解其部署,扩展和升级的特定操作要求。
举个例子,团队如何管理升级。无状态应用程序可以从“蓝色/绿色”部署方法中获益; 当旧的应用程序的另一个完整版本旋转时,旧的应用程序仍然存在,流量在准备好并且旧的应用程序被销毁时切换到新的应用程序。但升级数据工作负载如HDFS或Cassandra需要使节点一次脱机,保留本地数据卷以避免数据丢失,以特定顺序执行原位升级,并在每个节点类型上执行特殊检查和命令升级后。任何这些步骤都是应用程序或服务特定的,甚至可能是版本特定的。这使得使用传统的容器编排调度程序来管理数据服务非常具有挑战性。
Mesos以每个工作负载的方式管理各种工作负载,使得许多公司将Mesos作为一个统一的平台,将微服务和数据服务结合在一起。运行数据密集型应用程序的通用参考架构是“ SMACK堆栈 ”。
请注意,我们还没有对容器编排描述Apache Mesos。那么为什么人们会自动将Mesos与容器编排相关联?容器编排是可以在Mesos的模块化架构上运行的工作负载的一个例子,它使用了一个名为Marathon的Mesos之上的专门的编排“框架”。Marathon最初是为了在cgroup容器中编排应用档案(如JAR,tarballs,ZIP文件)而开发的,是2014年第一个支持Docker容器的容器管理器之一。
所以当人们将Docker和Kubernetes与Mesos进行比较时,他们实际上将Kubernetes和Docker Swarm与在Mesos上运行的Marathon进行了比较。
为什么这么重要?因为梅索斯坦率地不在乎顶上的是什么。Mesos可以弹性地为Java应用服务器,Docker容器编排,Jenkins CI作业,Apache Spark分析,Apache Kafka流等共享基础架构提供集群服务。尽管公共整合尚不可用,Mesos甚至可以运行Kubernetes或其他集装箱业务。
资料来源:Apache Mesos Survey 2016
Mesos的另一个考虑(以及为什么它对许多企业架构师很有吸引力)是运行关键任务工作负载的成熟度。Mesos已经在7年以上大规模生产(成千上万的服务器),这就是为什么它比市场上许多其他容器使能技术更多的生产准备和可靠的规模。
总而言之,所有这三种技术都与Docker容器有关,并允许您访问容器编排以实现应用程序可移植性和扩展性。那么你们之间如何选择呢?归根到底是为工作选择合适的工具(也可能是不同的工作)。如果您是一个应用开发人员,寻找现代化的方式来构建和打包应用程序,或者加速微服务计划,Docker容器格式和开发人员工具就是最好的方式。
如果您是一个dev / devops团队,并希望构建一个专门用于Docker容器编排的系统,并且愿意让您的手变脏,将您的解决方案与基础架构相结合(或依靠公共云基础设施,如Google集装箱引擎或Azure容器服务),Kubernetes是一个很好的技术,供您考虑。
如果要建立一个运行多个关键任务工作负载的可靠平台,包括Docker容器,遗留应用程序(例如Java)和分布式数据服务(例如Spark,Kafka,Cassandra,Elastic),并希望所有这些可移植云端提供商和/或数据中心,则Mesos(或我们自己的Mesos分发,Mesosphere DC / OS)适合您。
无论您选择什么,您都将拥抱一套可以更有效地利用服务器资源的工具,简化应用程序的可移植性,并提高开发人员的敏捷性。你真的不能错了。
原文:https://mesosphere.com/blog/docker-vs-kubernetes-vs-apache-mesos/