Marathon 将任务分为三类:初始、非终端和终端。这些类别中的任务可能处于下图所示的一种状态。要了解任务的状态,可以查看 DC/OS 日志或查询 Marathon API 的事件流。(/v2/events).
图 1. 任务处理图
终端状态
case TASK_ERROR => Error
任务描述包含错误。Marathon 将任务标记为错误之后,就会将其排除并启动新的任务。
case TASK_FAILED => Failed
任务未能成功完成。Marathon 将任务标记为失败后,就会将其排除并启动新的任务。
case TASK_DROPPED => Dropped
任务因瞬时错误而无法启动。任务的执行器从未启动运行。与 TASK_ERROR 不同,任务描述有效,尝试再次启动任务可能会成功。
case TASK_GONE => Gone
任务在已关闭的代理上运行(例如,代理已分区、重新启动,然后重新连接到管理节点;在重新启动之前运行的任何任务都会从“无法访问”转换为“消失”)。任务不再运行。Marathon 将任务标记为消失后,就会将其排除并启动新的任务。
case TASK_GONE_BY_OPERATOR => Gone
任务在管理节点联系不到的代理上运行;算子断定该代理已关闭,但尚未得到管理节点的直接确认。如果算子正确,则任务不运行,而且这是终端状态;如果算子错误,则任务仍可能运行,并且将来可能恢复为“运行”状态。Marathon 将任务标记为失败后,就会将其排除并启动新的任务。
鉴于代理被视为已消失且无法提供这些卷,如果任务配置为使用 本地持久卷,则这些将被放弃。将创建一个新任务作为替代,并使用新卷。
case TASK_FINISHED => Finished
任务成功完成。
case TASK_UNKNOWN => Unknown
管理节点不知晓该任务。这通常是因为 (a) 管理节点从未知晓任务,或 (b) 管理节点的垃圾收集器收集了该任务的元数据,所以忘记了该任务。任务可能仍在运行,也可能不再运行。Marathon 收到“未知”消息后,就会排除该任务并启动新的任务。
case TASK_KILLED => Killed
任务被执行器关闭。
非终端状态
case TASK_STAGING => Staging
初始状态:任务正在分段。
case TASK_STARTING => Starting
执行器正在启动任务。
case TASK_RUNNING => Running
任务正在运行。
case TASK_KILLING => Killing
任务被执行器关闭。
case TASK_UNREACHABLE => Unreachable
任务在与管理节点丢失联系的代理上运行,通常是因为网络故障或分区。任务可能仍在运行,也可能不再运行。Marathon 收到“任务不可访问”消息之后,就会启动替换任务。如果不可访问的时间超过 15 分钟,Marathon 就会将任务标记为未知,然后排除任务。