Kubernetes、Swarm 和 Mesos 都可以在技术上为您安排作业并为您处理受限资源。
与其他两个不同,Mesos 主要设计用于处理较低级别的分发、任务和资源管理。专注于这些位会带来更大的功能和灵活性,但也会在较低级别上带来更多的复杂性。这就是 DC/OS 存在的原因,它为您提供一系列微服务工具,可以作为更高级别的平台运行。
Mesos 还被设计为允许您使用自己的调度程序来处理任务生命周期需求,这往往是有状态任务所需要的。Kubernetes 和 Swarm 主要设计用于处理无状态服务用例,然后通过包含的调度程序进行调整以处理有状态服务和作业。
DC/OS 建立在 Mesos 之上,并带有用于作业和服务的内置调度程序,同时仍允许您在需要时构建自己的自定义调度程序。
Kubernetes 最近也增加了对自定义调度程序的支持,但它远不如 Mesos 实现和生态系统成熟,并且仍然围绕使用核心 pod 和副本集原语,这可能是授权或限制,具体取决于您的需求。
Mesosphere 最近构建了一个新的 dcos-commons 框架,以简化构建基于 JVM 的 Mesos 调度程序。因此,这可能会提高您在 DC/OS 上的工作效率。https://github.com/mesosphere/dcos-commons
Mesos & DC/OS 还为您提供了更多关于容器化的选择。如果您愿意,可以使用 Docker 映像和 Docker 容器。或者,您可以使用带有或不带有 Docker 镜像的 Mesos 容器运行时,这在工作负载和打包方面为您提供了更大的灵活性。
DC/OS 和 Kubernetes 都具有包管理器,这对于安装 Spark、Kafka 或 Cassandra 等依赖项很有用。但是 DC/OS 往往拥有更强大的数据服务,因为它们是使用自己的自定义调度程序构建的,而 Kubernetes 生态系统倾向于在其系统周围进行复杂的生命周期管理 Docker 容器包装器,因为自定义调度程序的到来较晚。如果您考虑 docker 图像“包”,Docker 还包括包管理。不同之处在于 DC/OS 和 Kubernetes 封装了可能包含多个容器的更高级别的抽象(应用程序和 Pod)。最近,Docker 添加了更高级别的抽象“堆栈”,但我认为没有任何外部存储库机制或围绕它们的大量包管理。
Swarm 绝对是最简单的,但它的原始 API 被设计为与节点 API 相同,这对于熟悉和入职非常有用,但作为更高级别的抽象而受到限制。从那以后,他们有效地重写了 swarm API 并将其作为“swarm-mode”捆绑到 docker-engine 中。这种编排引擎和容器运行时的捆绑使用户更容易安装和管理,而且还结合了以前的两个不同的抽象级别。因此,Docker 引擎不再只是编排引擎的依赖项,而是与它们竞争,这违背了 Unix 的哲学,即做好一件事并在各自的开源社区中造成一些政治混乱。Twitter、黑客新闻和聊天对话升级为关于分叉 docker的讨论这导致K8s 尝试替代方案,DC/OS 支持 Docker 镜像而不使用 Docker 引擎,以及Docker 提取容器。
他们都工作正常。选择一种取决于您的需要。我通常推荐 DC/OS,因为它解决了更多的问题,并且由许多不同的微服务工具和层组成,允许您通过针对层进行编程来支持多个用例,而不是最有意义的。披露,我确实为 Mesosphere 工作!;)