Apache Mesos/Chronos 任务状态未更新并停留在 RUNNING 状态

问题描述

我在本地使用 Mesos 1.3.1 和 Chronos。我目前每 30 分钟安排 100 个作业进行测试。

有时任务会永远停留在 RUNNING 状态,直到我重新启动任务被卡住的 Mesos 代理。在此期间没有代理重新启动。

我曾尝试终止该任务,但它的状态从未更新为 KILLED,而 Chronos 中的日志显示已成功接收请求。我已经在 Chronos 中检查它确实将任务更新为成功并且结束时间也是正确的,但持续时间仍在进行中并且任务仍处于 RUNNING 状态。

对于卡住的任务,执行器容器也将永远运行。我有一个 executor 容器,它将休眠 20 秒,并将 offer_timeout 设置为 30 秒,将 executor_registration_timeout 设置为 2 分钟。

我还包括每 10 分钟一次的 Mesos 协调,但它每次都会将任务更新为 RUNNING。

我还尝试在对帐之前强制任务状态再次更新为 FINISHED,但仍然没有更新为 FINISHED。 Mesos 领导者似乎没有为卡住的任务选择正确的状态。

我尝试使用不同的任务资源分配(cpu:0.5,0.75,1...)运行,但没有解决问题。我每 30 分钟将作业数量更改为 70,但仍然发生。这个问题每天出现一次,非常随机,任何工作都可能发生。

如何在不重启 Mesos 代理的情况下从活动任务中移除这个卡住的任务? 有没有办法防止这个问题发生?

解决方法

目前,Linux 中的 Docker 存在一个已知问题,即进程退出但 Docker 容器仍在运行。 https://github.com/docker/for-linux/issues/779

因此,执行器容器卡在运行状态,Mesos 无法更新任务状态。

我的问题与此类似:https://issues.apache.org/jira/browse/MESOS-9501?focusedCommentId=16806707&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-16806707

在 1.4.3 版本之后应用了解决方法的修复程序。升级 Mesos 版本后,这种情况不再发生。