用于批处理作业的 swarm、kubernetes 或 mesos

swarm, kubernetes or mesos for batch processing jobs

我的应用程序需要 运行 大量容器作为工作节点(以执行各种批处理作业),而且我对维护 Web 服务器或数据库并不真正感兴趣 - 只是可以占用的短期工作1 秒到 1 小时之间的任何时间。我的想法是针对节点云工作,而不必担心这些节点中的哪台机器有可用资源来处理我的工作(mesos 在这方面非常擅长——正如所宣传的那样)。

我现在正在玩 DC/OS,我想知道是否有任何其他集群技术提供此功能:given I need 1CPU, 2GB RAM and 2GB of disk - run X docker container against my nodes

我喜欢 swarm 的想法,因为我对 docker 本身非常熟悉,而且我相信它是最容易设置和自动化(放大或缩小)的。我喜欢 kubernetes(但没有经验),因为它是免费的,而且我很确定它将长期保持这种状态。我喜欢 DC/OS 因为它捆绑了很多东西,但我不确定他们未来的计划,而且我习惯于项目切断功能以将它们包含在一个计划中,该计划会为 x 个节点收取费用。

你有什么想法?

Kubernetes、Swarm 和 Mesos 都可以在技术上为您安排作业并为您处理约束资源。

与其他两个不同,Mesos 主要设计用于在较低级别处理分发、任务和资源管理。专注于这些位会导致更强大的功能和灵活性,但也会在较低级别上增加复杂性。这就是 DC/OS 存在的原因,为您提供一组可作为更高级别平台运行良好的微服务工具。

Mesos 还被设计为允许您使用自己的调度程序来处理任务生命周期需求,这往往是有状态任务所需要的。 Kubernetes 和 Swarm 主要设计用于处理无状态服务用例,然后通过包含的调度程序进行调整以处理有状态服务和作业。

DC/OS 构建于 Mesos 之上,并带有用于作业和服务的内置调度程序,同时仍允许您在需要时构建自己的自定义调度程序。

Kubernetes 最近也增加了对自定义调度程序的支持,但它远不如 Mesos 实现和生态系统成熟,并且仍然围绕使用核心 pods 和副本集原语展开,这可能会增强或限制, 根据您的需要。

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 图片 "packages",Docker 还包括包管理。不同之处在于 DC/OS 和 Kubernetes 封装更高级别的抽象(apps & pods),其中可能包含多个容器。最近,Docker 添加了 "stacks",这是更高级别的抽象,但我不认为它们有任何外部存储库机制或太多包管理。

Swarm 绝对是最简单的,但其最初的 API 被设计为与节点 API 相同,这对于熟悉和入门非常有用,但作为更高级别的抽象却受到限制.从那以后,他们有效地重写了 swarm API 并将其捆绑到 docker-engine 中作为 "swarm-mode"。这种编排引擎和容器运行时的捆绑使用户更容易安装和管理,而且还结合了以前两个不同的抽象级别。因此,Docker 引擎现在不仅是编排引擎的依赖,而且还与它们竞争,这违背了做好一件事的 unix 哲学,并在各自的开源社区中造成了一些政治混乱。 Twitter、黑客新闻和聊天对话升级为 forking docker which lead to K8s experimenting on alternatives, DC/OS supporting Docker images without using Docker engine, and Docker extracting containerd

它们都工作正常。选择一种取决于您的需要。我通常推荐 DC/OS,因为它解决了更多的问题,并且由许多不同的微服务工具和层组成,允许您通过对层进行编程来支持多个用例,而不是最有意义的。披露,我确实为 Mesosphere 工作! ;)