我一直在玩Mesos集群,并考虑在我们的生产环境中使用Mesos集群。我似乎无法找到答案的一个问题:如何正确安排长时间运行的应用程序,这些应用程序会有不同的负载?
Marathon具有“CPU”属性,您可以在其中设置CPU分配到特定应用的权重。 (我打算运行Docker容器)但是从我读过的内容来看,它只是一个权重,而不是我为应用程序设置的预留,分配或限制。如果它是唯一正在运行的东西,它仍然可以在服务器上使用100%的CPU。问题是,对于长时间运行的应用程序,资源需求会随着时间而变化。例如,Web服务器与流量成正比。连接到Mesos将此设置视为“预留”,我选择2个邪恶:将其设置得太低,并且可能在同一主机上启动太多进程,并且所有这些进程都会受到影响,主机CPU将超过100%。将它设置得太高,并且CPU会在保留的情况下闲置(或者Mesos认为),但没有任何东西可以使用这些资源。
你如何解决这个问题?我错过了Mesos和Marathon如何处理资源的事情吗?
我在考虑这样做的理想方式:
有没有办法实现这一目标?
到目前为止,我认为我可以编写一个可在从站上运行的自定义隔离器模块,并将此自定义指标报告给主站。然后我可以在资源协商中使用它。这是真的吗?
如果一个人过载,我无法在不同节点上找到任何关于Marathon重新安排任务的内容。有什么建议吗?
答案 0 :(得分:1)
支持Mesos 0.23.0超额订阅。不幸的是,它还没有在Marathon中实现:https://github.com/mesosphere/marathon/issues/2424
答案 1 :(得分:0)
为了动态地进行分配,您可以使用Mesos slave metrics和Marathon HTTP API来扩展,例如,在我完成here时,在不同的上下文中。我的同事尼克拉斯与nibbler做了相关工作,这可能也有帮助。