1

我一直在玩 Mesos 集群,并考虑在我们的生产环境中使用 Mesos 集群。一个我似乎找不到答案的问题:如何正确安排长时间运行且负载不同的应用程序?

Marathon 具有“CPUs”属性,您可以在其中设置特定应用程序的 CPU 分配权重。(我计划运行 Docker 容器)但从我所读到的内容来看,它只是一个权重,而不是我为应用程序设置的保留、分配或限制。如果它是唯一正在运行的东西,它仍然可以使用服务器上 100% 的 CPU。问题在于,对于长时间运行的应用程序,资源需求会随着时间而变化。例如,Web 服务器与流量成正比。再加上 Mesos 将此设置视为“保留”,我在 2 个弊端之间进行选择:将其设置得太低,它可能会在同一主机上启动太多进程,并且所有进程都会受到影响,主机 CPU 会超过 100%。将它设置得太高,CPU 将闲置,因为预留(或 Mesos 认为),但没有什么

你如何解决这个问题?我在 Mesos 和 Marathon 如何处理资源方面遗漏了什么吗?

我正在考虑一种理想的方法:

  • 为不同的应用程序指定 CPU 的权重(例如,0.1 到 1 的顺序),这样当事情变得艰难时,更高的优先级会得到更多(就像现在一样)
  • 让 Mesos 从站报告“可用 LA”及其状态(例如,如果 10 分钟 LA 为 2,有 8 个 CPU 可用,则报告 6“可用 LA”)
  • 将 Marathon 配置为需要从站上的“可用 LA”资源来安排任务(例如,如果可用 LA < 2,则不要在特定主机上启动)
  • 当可用 LA 变为 0 时(由于流量涌入,同时一些作业在流入之前在同一台服务器上启动) - 让 Marathon 将作业移动到另一个从站,一个具有更多“可用 LA”的从站

有没有办法实现这一切?

到目前为止,我认为我可以编写一个将在从属设备上运行的自定义隔离器模块,并将这个自定义指标报告给主服务器。然后我可以在资源协商中使用它。这是真的?

如果某个节点超载,我无法找到有关 Marathon 在不同节点上重新安排任务的任何内容。有什么建议么?

4

2 回答 2

1

Mesos 0.23.0 开始,支持超额订阅。不幸的是,它尚未在 Marathon 中实现:https ://github.com/mesosphere/marathon/issues/2424

于 2016-01-18T20:30:40.763 回答
0

为了动态进行分配,您可以使用Mesos 从属指标以及 Marathon HTTP API 来扩展,例如,正如我在这里所做的那样,在不同的上下文中。我的同事 Niklas 与nibbler进行了相关工作,这也可能会有所帮助。

于 2015-07-26T13:12:11.627 回答