我在' v2 / apps'上使用POST创建了一个Marathon应用程序。 REST界面。如果我尝试创建一个在底层mesos集群上没有可用资源的应用程序(在本例中为host_port),则应用程序创建仍会返回S_OK,而应用程序将永远停留在部署状态(状态永远不会切换为正在运行)。
如果资源不可用 - 或至少 - 是否有办法让应用程序创建API失败,以查询状态并确定应用程序因资源耗尽而无法快速部署而停止部署?
答案 0 :(得分:2)
Marathon是运行在Mesos之上的“第二层”调度程序。它仅暴露给Mesos分配给它的资源。 Marathon没有全局集群视图,因此它不知道请求的资源在集群中的某个位置是否可用,或者将来是否可用。
当您向Marathon提交应用程序时,它会验证请求,接受请求,并等待Mesos的合适报价。在你的情况下,你知道在不久的将来不会出现合适的报价(我想因为在该特定代理上使用该特定端口还有另一项任务),但Marathon并不知道它。
答案 1 :(得分:1)
以下是marathon-ui使用的状态: https://mesosphere.github.io/marathon/docs/marathon-ui.html#application-status-reference
您正在寻找的那个可能是waiting
状态,您可以通过查询v2/queue
并在一段时间内检查queueEntry.delay.overdue === true
来确定该状态。
我刚刚构建了一些prometheus
警报,因为您所描述的类似问题会发出警报,请参阅此处的MarathonAppCantGetSuitableOffers警报:
https://github.com/bergerx/prom_marathon_app_exporter#alerts-on-prometheus