157

我对所有这些都比较陌生,但是我很难清楚地了解列出的技术。

虽然,所有这些都试图解决不同的问题,但也有共同点。我想了解什么是共同的,什么是不同的。少数的组合很可能非常适合,如果是的话,它们是什么?

我列出了其中一些以及问题,但如果有人详细列出所有这些并回答问题,那就太好了。

  1. Kubernetes 与 Mesos:

    这个链接

    Apache 的 Mesos 和 Google 的 Kubernetes 有什么区别

    提供了对差异的一个很好的洞察,但我无法理解为什么 Kubernetes 应该在 Mesos 之上运行。是否更多地与两个开源解决方案的结合有关?

  2. Kubernetes 与 Core-OS 舰队:

    如果我使用 Kubernetes,是否需要舰队?

  3. Docker-Swarm 如何适应以上所有内容?

4

4 回答 4

155

披露:我是 Kubernetes 的首席工程师

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

Mesos 将精力集中在非常通用的调度上,并插入多个不同的调度器。这意味着它使 Hadoop 和 Marathon 等系统能够在同一个调度环境中共存。Mesos 不太专注于运行容器。Mesos 在容器受到广泛关注之前就已经存在,并且已经被重构为支持容器的部分。

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

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

Swarm 是 Docker 对现有 Docker API 的扩展,使机器集群看起来像单个 Docker API。从根本上说,我们在 Google 和其他地方的经验表明节点 API 不足以用于集群 API。你可以在这里看到一堆讨论:https ://github.com/docker/docker/pull/8859和这里:https ://github.com/docker/docker/issues/8781

希望有帮助!如果您想谈更多,请加入 IRC @#google-containers。

于 2015-03-12T18:29:47.390 回答
34

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

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

在 DockerCon 主题演讲中,Solomon Hykes 建议 Swarm 将是一个可以为许多编排和调度框架提供通用接口的层。就我所见,Swarm 旨在提供流畅的 Docker 部署工作流,与一些现有的容器工作流框架(如 Deis)一起工作,但足够灵活,可以屈服于 Mesos 等“重量级”部署和资源管理。

希望这会有所帮助——这可能是一个巨大的帖子。我认为关键是这些年轻的、不断发展的服务可能会合并并变得可互操作,但我们需要在接下来的 12 个月里看到它的效果。在这个问题上有一些非常聪明的人,所以未来看起来很光明。

于 2015-01-07T14:04:01.880 回答
21

据我了解:

Mesos、Kubernetes 和 Fleet 都在尝试解决一个非常相似的问题。这个想法是您从开发人员那里抽象出所有硬件,而“集群管理工具”会为您解决所有问题。然后你需要做的就是给集群一个容器,给它一些信息(让它永久运行,如果发生 X 等扩大规模),集群管理器就会让它发生。

使用 Mesos,它会为您完成所有集群管理,但它不包括调度程序。调度程序的意思是,好的,这个过程需要 2 个 procs 和 512MB RAM,我在那边有一台免费的机器,所以我会在那台机器上运行它。有一些可用于 Mesos 的插件调度程序:Marathon 和 Chronos,您可以编写自己的。这为您提供了强大的资源分配和集群扩展等功能。

Fleet 和 Kubernetes 似乎抽象出了这些细节(因此您基本上不必编写自己的调度程序)。这意味着您必须定义您的任务并以 Fleet 或 Kubernetes 定义的格式/方式提交它们,然后他们接管并为您安排任务(容器)。

所以我猜:使用 Mesos 可能意味着在编写自己的调度程序时需要做更多的工作,但如果需要,可能会提供更多的灵活性。

我认为在 Mesos 之上运行 Kubernetes 的想法是 Kubernetes 充当 Mesos 的调度程序。就我个人而言,我不确定这会给自己运行一个或另一个带来什么好处(希望有人会介入并解释!)

正如 MikeB 所说.. 现在还处于早期阶段,一切都在争夺中(也请关注亚马逊的 ECS),因此有许多竞争标准和很多重叠!

-edit- 我没有提到 Docker swarm,因为我对它没有太多经验。

于 2015-02-25T12:47:05.240 回答
5

对于任何在 2017 年之后来到这里的人,车队已被弃用。不要再使用它了。

Fleet 文档说“fleet 不再由 CoreOS 积极开发或维护”,并链接到Container Orchestration:从 Fleet 迁移到 Kubernetes。Fleet 被从 Container Linux(以前称为 CoreOS Linux)中移除,取而代之的是 Kubernetes kubelet(代理)。这恰逢企业提供Tectonic(Kubernetes 发行版)作为他们的主要产品。

于 2017-08-24T03:38:14.020 回答