Docker-Swarm, Kubernetes, Mesos & Core-OS Fleet

159

我对所有这些都比较新,但是我在列出的技术中遇到了一些问题。

尽管所有这些技术都试图解决不同的问题,但它们也有共同之处。 我想了解哪些是共同点,哪些是不同点。 如果组合其中几个技术将非常适合,那么它们是什么?

我列出了一些技术和问题,但如果有人详细列出所有技术并回答问题,那就太好了。

  1. Kubernetes vs Mesos:

    这个链接

    Apache的Mesos和Google的Kubernetes有何区别

    提供了很好的见解,但我无法理解为什么Kubernetes应该在Mesos上运行。 这更多是两个开源解决方案的结合吗?

  2. Kubernetes vs Core-OS Fleet:

    如果我使用kubernetes,是否需要fleet?

  3. Docker-Swarm如何适用于上述所有内容?


请参见https://dev59.com/614c5IYBdhLWcg3w-OM4。 - Bryan
1
我在Github上维护了一个编排工具列表:http://datacenteroperatingsystem.io/ 欢迎贡献。 - CMCDragonkai
4个回答

158

声明:我是 Kubernetes 的首席工程师

我认为 Mesos 和 Kubernetes 在很大程度上旨在解决运行集群化应用程序的类似问题,但它们有不同的历史和不同的解决问题方法。

Mesos 将其精力放在非常通用的调度上,并插入多个不同的调度程序。这意味着它可以使 Hadoop 和 Marathon 这样的系统在同一调度环境中共存。Mesos 较少关注运行容器。Mesos 存在于容器普及之前,并已经重新设计了部分支持容器。

相比之下,Kubernetes 从头开始设计,作为构建基于容器的分布式应用程序的环境。它包括复制和服务发现原语作为核心原语,而在 Mesos 中,这些内容通过框架添加。Kubernetes 的主要目标是构建、运行和管理分布式系统。

Fleet 是一个更低级别的任务分配程序。它对于引导集群系统非常有用,例如 CoreOS 使用它来将 kubernetes 代理和二进制文件分发到集群中的计算机,以启动 kubernetes 集群。它并不真正旨在解决相同的分布式应用程序开发问题,请将其视为群集的 systemd/init.d/upstart。如果您运行 Kubernetes,则不需要它,您可以使用其他工具(如 Salt、Puppet、Ansible、Chef 等)来完成相同的二进制文件分发。

Swarm 是 Docker 的一项努力,旨在扩展现有的 Docker API,使一组机器看起来像一个单独的 Docker API。从根本上讲,我们在 Google 和其他地方的经验表明,节点 API 对于集群 API 是不足的。您可以在此处查看有关此问题的大量讨论:https://github.com/docker/docker/pull/8859https://github.com/docker/docker/issues/8781

如果您想进一步交流,请加入我们在 IRC 上的频道 #google-containers。


谢谢,这非常有用。您没有提到能否在Kubernetes上运行自己的调度程序,这是否可能? - user2851943

36
我认为最简单的答案是没有简单的答案。容器(特别是Docker)的迅速崛起留下了“容器调度和编排”的权力真空,不管这意味着什么。实际上,这意味着您有许多技术可以在某些层面上协同工作,但在某些方面存在竞争关系。例如,Kubernetes可以用作在计算集群上部署和管理容器的一站式商店(就像Google最初设计的那样),但也可以坐在Fleet之上,利用Fleet在CoreOS上提供的韧性层。

正如谷歌视频所述,Kubernetes不是一个完整的开箱即用的容器扩展解决方案,但是是一个不错的起点。同样地,在某个阶段,您会希望Apache Mesos能够与Kubernetes一起工作,但不能与Marathon一起工作,因为Marathon似乎扮演了与Kubernetes相同的角色。我想我在某个地方读过这些可能成为同一努力的一部分,但我可能错了 - 这实际上是有关Mesosphere的战略方向以及Kubernetes原则的相应采用。

在DockerCon主题演讲中,Solomon Hykes建议Swarm将是一个层,可以提供通用的接口到许多编排和调度框架。从我所看到的情况来看,Swarm旨在提供平滑的Docker部署工作流,与一些现有的容器工作流框架(如Deis)一起工作,但足够灵活以遵循诸如Mesos之类的“重量级”的部署和资源管理。

希望这可以帮助您 - 这可能是一个巨大的帖子。我认为关键是这些都是年轻的,不断发展的服务,可能会合并并互操作,但我们需要度过接下来的12个月,看看它如何发挥作用。有一些非常聪明的人处理这个问题,所以未来看起来非常光明。


23
据我所了解:
Mesos、Kubernetes 和 Fleet 都试图解决非常相似的问题。其想法是将所有硬件从开发人员那里抽象出来,'集群管理工具' 会为你解决所有问题。然后,你只需要将容器提供给集群,给它一些信息(永久运行,如果 X 发生则进行扩展等),集群管理器就会让它发生。
使用 Mesos,它会为你做所有的集群管理,但不包括调度器。调度器是指,这个进程需要 2 个处理器和 512MB 的 RAM,我有一台机器上空闲的,所以我将在那台机器上运行它。对于 Mesos,有一些可用的插件调度器:Marathon 和 Chronos,并且你可以编写自己的调度器。这为你提供了很多资源分配和集群扩展等方面的能力。
Fleet 和 Kubernetes 似乎抽象了这些详细信息(因此你不必编写自己的调度器)。这意味着你必须定义任务并以 Fleet 或 Kubernetes 定义的格式 / 方式提交它们,然后它们接管并为你安排任务(容器)。
所以我想: 使用 Mesos 可能意味着在编写自己的调度器方面需要更多的工作,但如果需要的话可能提供更多的灵活性。
我认为在 Mesos 上运行 Kubernetes 的想法是,Kubernetes 充当 Mesos 的调度器。个人而言,我不确定这比分别运行一个有什么好处(希望有人能解释一下!)
就像 MikeB 所说...现在还很早,所有东西都可以被占领(也要关注亚马逊的 ECS),所以有许多竞争标准和重叠部分!
-编辑- 我没有提到 Docker swarm,因为我对它没有太多经验。

6

如果你在2017年之后看到这篇文章,请注意:Fleet已经被废弃,不再使用。

Fleet文档指出:"Fleet不再由CoreOS积极开发或维护",并提供了一个链接:容器编排:从Fleet迁移到Kubernetes。 Fleet已从Container Linux (曾用名CoreOS Linux)中移除,并被Kubernetes kubelet (代理程序)所取代。这与公司转型为将Tectonic(一种Kubernetes发行版)作为其主要产品相吻合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接