如何选择在Mesos上运行的Marathon应用程序的CPU参数?

时间:2015-07-25 07:03:31

标签: mesos marathon

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

Marathon具有“CPU”属性,您可以在其中设置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”< / LI>

有没有办法实现这一目标?

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

为了动态地进行分配,您可以使用Mesos slave metrics和Marathon HTTP API来扩展,例如,在我完成here时,在不同的上下文中。我的同事尼克拉斯与nibbler做了相关工作,这可能也有帮助。