草庐IT

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

coder 2023-05-27 原文

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

我现在正在使用 DC/OS,我想知道是否有任何其他集群技术提供此功能:假设我需要 1CPU、2GB RAM 和 2GB 磁盘 - 对我的节点运行 X docker 容器.

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

你有什么想法?

最佳答案

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

与其他两个不同,Mesos 主要设计用于处理较低级别的分发、任务和资源管理。专注于这些位会带来更大的功能和灵 active ,但也会在较低级别上带来更多的复杂性。这就是 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 容器运行时,这为您在工作负载和打包方面提供了更大的灵 active 。

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、黑客新闻和聊天对话升级为 forking docker导致K8s experimenting on alternatives , DC/OS supporting Docker images without using Docker engine , 和 Docker extracting containerd .

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

关于docker - 用于批处理作业的 swarm、kubernetes 或 mesos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41248317/

有关docker - 用于批处理作业的 swarm、kubernetes 或 mesos的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  5. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  6. ruby-on-rails - 在所有延迟的作业之前 Hook - 2

    是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述

  7. ruby - "undefined method"用于 rails 模型 - 2

    我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom

  8. Ruby-vips 图像处理库。有什么好的使用示例吗? - 2

    我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby​​代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby​​-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby​​-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby​​-vips的github页面上的链接,我们将不胜感激!如果有ruby​​-

  9. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  10. ruby - Faye WebSocket,关闭处理程序被触发后重新连接到套接字 - 2

    我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d

随机推荐