Apache Mesos 调度器和执行器示例

Apache Mesos Schedulers and Executors by example

我正在尝试了解 Mesos work together, and found this excellent tutorial 的各种组件,其中包含以下架构概述:

我对此有一些担忧(在文章中或在官方 Mesos docs 中):

好问题! 我相信看一下 Rendler 等示例框架会很有帮助。这可能会回答您的大部分问题,并让您对框架内部有所了解。

现在让我尝试回答此后可能仍未解决的问题。

  • 调度程序位置

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

  • 调度程序功能

看看 Rendler 或 at the framework development guide

  • 执行者functionality/Task

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

  • 执行器固定

当第一个需要这样的执行器的任务被发送到这个节点时,执行器在每个节点上启动。此后它将保留在该节点上。

希望对您有所帮助!

为 js84 的出色响应添加,

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

调度器: 是一些接受或拒绝提议的策略。我们可以编写自己的调度程序,也可以使用一些现有的调度程序,如 chronos。在调度程序中,我们应该评估可用资源,然后接受或拒绝。

调度程序功能: 示例可能就像假设你有一个任务需要 8 个 cpus 到 运行,但是来自 mesos 的报价可能是 6 个 cpus,它赢了'在这种情况下满足需要你可以拒绝。

执行器功能:执行器处理任务的状态相关信息。您需要实现的一组 API,例如 mesos slave 中分配任务的状态。执行者为 运行ning.

的 mesos slave 当前可用的 cpu 数量是多少

执行器的具体示例: chronos

正在安装执行 dynamically/on-the-fly : 这些是不行的,需要预先配置执行器。但是,您可以使用自动缩放来复制执行程序。