Apache Mesos调度程序和执行程序示例

时间:2015-07-06 14:54:19

标签: mesos

我试图了解Mesos的各个组件如何协同工作,并找到包含以下架构概述的this excellent tutorial

enter image description here

我对此有一些不太明确的担忧(无论是在文章中还是在官方Mesos docs中):

  • 计划程序在哪里运行?是否存在“调度程序节点”,其中只有调度程序应该运行?
  • 如果我正在编写自己的Mesos框架,我需要实现哪些Scheduler功能?对于Master发送的优惠,它只是一个二进制是/否或接受/拒绝?任何具体的例子?
  • 如果我正在编写自己的Mesos框架,我需要实现什么Executor功能?任何具体的例子?
  • 将要发送给执行者的任务的具体示例是什么?
  • Executors是“固定”(永久安装在)Slaves上,还是以“按需”方式浮动,是否动态/动态安装和执行?

3 个答案:

答案 0 :(得分:20)

很棒的问题! 我相信看一下像Rendler这样的示例框架会非常有帮助。这可能会回答你的大多数问题,并让你感觉内部的框架。

现在让我试着回答一下在此之后可能仍然存在的问题。

  • 计划程序位置

调度程序不在任何特殊节点上,但请记住,调度程序也可以进行故障转移(与分布式系统中的任何部分一样)。

  • 计划程序功能

看看Rendler或at the framework development guide

  • 执行者功能/任务

我相信Rendler是了解Task / Executor关系的一个很好的例子。刚开始阅读主github页面上的README / description。

  • 执行人员固定

当需要此类执行程序的第一个任务发送到此节点时,将在每个节点上启动执行程序。在此之后它将保留在该节点上。

希望这有帮助!

答案 1 :(得分:17)

要添加到js84的出色响应,

  • 调度程序位置:许多用户喜欢通过Marathon等其他框架启动调度程序,以确保如果调度程序或其节点死亡,则可以在其他地方重新启动。
  • 调度程序功能:在向Mesos注册后,您的调度程序将开始在resourceOffers()回调中获取资源优惠,其中您的调度程序应该(至少)启动子集上的一个任务(或全部)提供的资源。您可能还希望实现statusUpdate()回调来处理任务完成/失败。 请注意,如果像Marathon / Chronos / Aurora / Kubernetes这样的现有框架就足够了,您甚至可能不需要实现自己的调度程序。
  • 执行程序功能:如果您只想启动Linux进程或docker容器并知道它何时完成,通常不需要创建自定义执行程序。您可以使用默认的mesos-executor(直接在CommandInfo中指定TaskInfo,而不是嵌入ExecutorInfo内)。但是,如果您想构建自定义执行程序,则至少需要实现launchTask(),理想情况下还需要killTask()
  • 示例任务:示例任务可以是简单的linux命令,如sleep 1000echo "Hello World",也可以是docker容器(通过ContainerInfo),例如{{ 1}}。或者,如果您使用自定义执行程序,则执行程序定义任务是什么以及如何运行它,因此任务可以作为执行程序进程中的另一个线程运行,或者只是成为队列中的一个项目 - 线程执行者。
  • 执行程序固定:执行程序通过CommandInfo URI分发,就像任何任务二进制文件一样,因此不需要在节点上预安装它们。 Mesos将为您提取并运行它。

答案 2 :(得分:1)

调度程序:是接受或拒绝此优惠的策略。我们可以自己编写调度程序,也可以使用像chronos这样的现有调度程序。在调度程序中,我们应该评估可用资源,然后接受或拒绝。

调度程序功能:示例可能就像假设你有一个需要8个cpus才能运行的任务,但来自mesos的提议可能是6个cpus,它不能满足此需求你可以拒绝。

执行程序功能:执行程序处理任务的状态相关信息。您需要实现的一组API,就像在mesos slave中分配的任务的状态一样。在运行执行程序的mesos slave中当前可用的cpu数是多少。

执行者的具体示例: chronos

动态/动态安装和执行:这些是不可能的,您需要预先配置执行程序。但是,您可以使用自动缩放功能复制执行程序。