Apache Mesos的Command Executor的调度程序是什么?

时间:2017-06-05 19:15:44

标签: mesos

我正在研究Mesos代码,对执行简单docker镜像的内部工作流程感到非常困惑, 如下:

mesos-execute  --master=XXX \
               --containerizer=docker \
               --name=test \
               --docker_image=XXX \
               --shell=false

我相信/src/cli/execute.cpp是这个“mesos-execute”的实现,在官方文档中称为“Command Executor”。

我看到execute.cpp在内部设置了一个CommandScheduler,它有一个void received(queue<Event> events)函数,用于侦听来自主服务器的事件。如果它收到Event::OFFERS,它将启动在提供的资源(代理)上执行任务的过程。

但是,我无法找到提供给客户端可执行文件的资源的确切位置。 我看到void Master::offer(…)中有一个/src/master/master.cpp函数。但它发送ResourceOffersMessage,而不是事件,并且不会将事件转换为消息。 我发现只有/src/sched/sched.cpp才能接收和处理此类消息。但我不知道sched.cpp在其他代码中是如何使用的......

因此,我找不到将提供的资源(从主服务器)发送到Command Executor的确切工作流程。 此命令执行程序的调度程序是什么? 有人能帮我理解吗?

由于

1 个答案:

答案 0 :(得分:0)

  

我相信/src/cli/execute.cpp是这个“mesos-execute”的实现,在官方文档中称为“Command Executor”。

Command Executor 是一个通用执行程序,根据文档"enough functionality for a wide variety of framework requirements"。执行程序负责启动由调度程序准备的TaskInfo消息中描述的任务。

确实,Master发送了一条资源提供消息,但evolve发送给具有正确类型的完整事件。

CLI使用scheduler::Mesos根据文档“将调度程序连接到Mesos主站的具体实现。摘要主检测(连接和断开连接)。” received是传递了一个回调并被这个lib调用。