Apache的Mesos和Google的Kubernetes有什么不同?
Apache的Mesos和Google的Kubernetes究竟有什么不同? 我知道这两个都是服务器集群pipe理软件。 任何人都可以详细说明主要区别在哪里 – 什么时候会select哪个框架?
你为什么要在Mesosphere上面使用Kubernetes ?
Kubernetes是一个开源项目,为虚拟机领域或“金属”场景带来了“Google风格”的集群pipe理function。 它适用于现代操作系统环境(如CoreOS或Red Hat Atomic),可为您提供轻量级计算“节点”。 它是用Golang编写的,是轻量级的,模块化的,可移植的和可扩展的。 我们(Kubernetes团队)正与许多不同的技术公司(包括策划Mesos开源项目的Mesosphere)合作,将Kubernetes作为与计算集群交互的标准方式。 我们的想法是根据我们在Google的经验重现我们看到人们需要构build集群应用程序的模式。 其中一些概念包括:
- 豆荚 – 将容器分组在一起的一种方法
- 复制控制器 – 一种处理容器生命周期的方法
- 标签 – 一种查找和查询容器的方法
- 服务 – 执行通用function的一组容器。
所以对于Kubernetes来说,你将拥有一些简单,易于启动,便携和可扩展的function,以尽可能轻的方式将“cluster”作为名词添加到您所pipe理的事物中。 在群集上运行应用程序,并停止担心个人计算机。 在这种情况下,群集就像虚拟机一样是一个灵活的资源。 这是一个逻辑计算单位。 打开它,使用它,调整它,迅速和轻松地把它关掉。
使用Mesos,在基本视觉方面存在相当多的重叠,但是产品在生命周期中处于截然不同的地方,并且具有不同的甜蜜点。 Mesos是一个分布式系统内核,将许多不同的机器连接在一起构成逻辑计算机。 它诞生于一个拥有大量物理资源的世界,创造出一个巨大的静态计算集群。 最棒的是大量的现代可伸缩数据处理应用程序在Mesos(Hadoop,Kafka,Spark)上运行良好,而且它很好,因为你可以在同一个基本资源池上运行它们,以及新的时间容器打包的应用程序。 这比Kubernetes项目要重一些,但是由于像Mesosphere这样的人的工作,这个项目变得越来越容易pipe理。
现在有趣的是,Mesos目前正在适应增加许多Kubernetes概念,并支持Kubernetes API。 因此,如果您需要Kubernetes应用程序(高可用性主服务器,更高级的调度语义,可扩展到大量节点的能力),它将成为获取更多function的门户,并且非常适合运行生产工作负载(Kubernetes仍然处于alpha状态)。
当被问及时,我倾向于说:
-
如果你是集群世界的新手,Kubernetes是一个很好的开始。 它是最快,最简单,最轻松的方式来开始轮胎的开发,并开始尝试面向集群的开发。 它提供了非常高的可移植性,因为它被许多不同的提供者(Microsoft,IBM,Red Hat,CoreOs,MesoSphere,VMWare等)支持。
-
如果您有现有的工作负载(Hadoop,Spark,Kafka等),Mesos会为您提供一个框架,让您将这些工作负载相互交错,并混合包括Kubernetes应用程序在内的一些新function。
-
如果你需要社区尚未在Kubernetes框架中实现的function,Mesos会为你提供一个逃生阀。
这两个项目都旨在使您在数据中心或云中的容器内部署和pipe理应用程序变得更加容易。
为了在Mesos之上部署应用程序,可以使用Marathon或Kubernetes作为Mesos。
Marathon是一个集群范围的初始化和控制系统,用于在cgroups和Docker容器中运行Linux服务。 马拉松有许多不同的金丝雀部署function,是一个非常成熟的项目。
Marathon运行在Mesos之上,这是一个高度可扩展的,经过testing和灵活的资源pipe理器。 马拉松被certificate可以在许多生产环境中进行扩展和运行。
Mesos和Mesosphere技术堆栈为运行现有Linux工作负载提供了一个类似于云的环境,但它也为构build新的分布式系统提供了本地环境。
Mesos是一个分布式系统内核,具有完整的API来直接对数据中心进行编程。 它将底层硬件(例如裸机或虚拟机)抽象出来,只是暴露资源。 它包含用于编写分布式应用程序的原语(例如Spark最初是一个Mesos App,Chronos等),例如消息传递,任务执行等等。因此,全新的应用程序成为可能。 Apache Spark是一个最初为Mesos构build的新(Mesos术语叫做)框架的例子。 这实现了非常快速的发展 – Spark的开发人员不必担心networking在节点之间分配任务,因为这是Mesos中的一个核心原语。
据我所知,Kubernetes目前在生产部署中并没有在Google内部使用。 对于制作,Google使用Omega / Borg,这与Mesos / Marathon模型非常相似。 然而,使用Mesos作为基础的好处是,Kubernetes和Marathon都可以在其上运行。
关于马拉松的更多资源:
https://mesosphere.github.io/marathon/
video: https : //www.youtube.com/watch?v = hZNGST2vIds
Kubernetes和Mesos是在天堂做的比赛。 Kubernetes使Pod(一组共同容器)抽象,以及用于服务发现,负载平衡和复制控制的Pod标签。 Mesos为集群中的节点提供细粒度的资源分配,并且可以使Kubernetes与运行在相同集群资源上的其他框架良好地协作。
从kubernetes-mesos自述
Mesos和Kubernetes都可以用来pipe理一组机器并抽象出硬件。
Mesos在devise上并没有提供给你一个调度程序(决定何时何地运行进程,如果进程失败了怎么办),你可以使用像Marathon或Chronos之类的东西,或者自己写。
Kubernetes将为您开箱即用,并可用作Mesos的调度程序(如果我在这里错误,请纠正我的错误!),这是您可以在一起使用它们的地方。 Mesos可以有多个调度程序共享相同的集群,因此理论上可以在同一个硬件上运行kubernetes和chronos。
超级简单:如果你想控制你的容器如何安排,去Mesos,否则Kubernetes岩石。
我喜欢这个短video这里mesos学习材料
如果使用裸机群集,则需要生成HDFS,SPARK,MR等堆栈。因此,如果仅使用裸机群集pipe理启动与这些相关的任务,则会有很多冷启动时间。
有了mesos,您可以将这些服务安装在裸机上,并且可以避免启动这些基本服务的时间。 这是mesos做得很好。 并且可以被build筑在它上面的kubernetes使用。