如何在 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 处理资源的方式?
我在想一个理想的方法:
- 为不同的应用程序指定 CPU 的权重(例如,从 0.1 到 1),以便在遇到困难时,更高的优先级获得更多(就像现在一样)
- 让 Mesos 从站报告 "Available LA" 及其状态(例如,如果 10 分钟 LA 为 2,有 8 CPUs 可用,则报告 6 "Available LA")
- 将 Marathon 配置为需要从站上的 "Available LA" 资源来安排任务(例如,如果可用 LA < 2,则不要在特定主机上启动)
- 当可用 LA 变为 0 时(由于流量涌入,同时一些作业在涌入之前在同一服务器上启动)- 让 Marathon 将作业转移到另一个从属服务器,一个有更多 "Available LA"
有没有办法实现这些?
到目前为止,我认为我可以编写一个自定义隔离器模块,它将 运行 在从服务器上,并将此自定义指标报告给主服务器。然后我可以在资源协商中使用它。这是真的吗?
如果一个节点超载,我无法在不同节点上的 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
我一直在玩 Mesos 集群,并考虑在我们的生产环境中使用 Mesos 集群。有一个问题我似乎无法找到答案:如何正确安排 运行 具有不同负载的长应用程序?
Marathon 有 "CPUs" 属性,您可以在其中设置 CPU 分配给特定应用的权重。 (我计划使用 运行ning Docker 个容器)但据我所知,这只是一个权重,而不是我为应用程序设置的预留、分配或限制。它仍然可以在服务器上使用 100% 的 CPU,如果它是唯一 运行ning 的东西。问题在于,对于 运行ning 长的应用程序,资源需求会随着时间的推移而变化。例如,Web 服务器与流量成正比。结合 Mesos 将此设置视为 "reservation," 我在 2 个弊端之间做出选择:将它设置得太低,它可能会在同一主机上启动太多进程,所有进程都会受到影响,主机 CPU超过 100%。将它设置得太高,并且 CPU 会在进行预留时空闲(或者 Mesos 认为),但是没有任何东西正在使用这些资源。
你是如何解决这个问题的?我是否遗漏了 Mesos 和 Marathon 处理资源的方式?
我在想一个理想的方法:
- 为不同的应用程序指定 CPU 的权重(例如,从 0.1 到 1),以便在遇到困难时,更高的优先级获得更多(就像现在一样)
- 让 Mesos 从站报告 "Available LA" 及其状态(例如,如果 10 分钟 LA 为 2,有 8 CPUs 可用,则报告 6 "Available LA")
- 将 Marathon 配置为需要从站上的 "Available LA" 资源来安排任务(例如,如果可用 LA < 2,则不要在特定主机上启动)
- 当可用 LA 变为 0 时(由于流量涌入,同时一些作业在涌入之前在同一服务器上启动)- 让 Marathon 将作业转移到另一个从属服务器,一个有更多 "Available LA"
有没有办法实现这些?
到目前为止,我认为我可以编写一个自定义隔离器模块,它将 运行 在从服务器上,并将此自定义指标报告给主服务器。然后我可以在资源协商中使用它。这是真的吗?
如果一个节点超载,我无法在不同节点上的 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