如何在 Mesos 上为 Marathon 应用 运行 select CPU 设置参数?

How to select CPU parameter for Marathon apps ran on Mesos?

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

Marathon 有 "CPUs" 属性,您可以在其中设置 CPU 分配给特定应用的权重。 (我计划使用 运行ning Docker 个容器)但据我所知,这只是一个权重,而不是我为应用程序设置的预留、分配或限制。它仍然可以在服务器上使用 100% 的 CPU,如果它是唯一 运行ning 的东西。问题在于,对于 运行ning 长的应用程序,资源需求会随着时间的推移而变化。例如,Web 服务器与流量成正比。结合 Mesos 将此设置视为 "reservation," 我在 2 个弊端之间做出选择:将它设置得太低,它可能会在同一主机上启动太多进程,所有进程都会受到影响,主机 CPU超过 100%。将它设置得太高,并且 CPU 会在进行预留时空闲(或者 Mesos 认为),但是没有任何东西正在使用这些资源。

你是如何解决这个问题的?我是否遗漏了 Mesos 和 Marathon 处理资源的方式?

我在想一个理想的方法:

有没有办法实现这些?

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

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

为了动态地进行分配,您可以使用 Mesos slave metrics along with the Marathon HTTP API to scale, for example, as I've done here, in a different context. My colleague Niklas did related work with nibbler,这可能也会有所帮助。

截至 Mesos 0.23.0 oversubscription is supported. Unfortunately it is not yet implemented in Marathon: https://github.com/mesosphere/marathon/issues/2424