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

sme*_*eeb 24 mesos

我试图了解Mesos的各个组件如何协同工作,并找到了包含以下架构概述的优秀教程:

在此输入图像描述

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

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

js8*_*s84 20

好问题!我相信看看像Rendler这样的示例框架真的很有帮助.这可能会回答您的大多数问题,并让您感觉内部框架.

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

  • 调度程序位置

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

  • 调度程序功能

看一下Rendler或框架开发指南.

  • 执行者功能/任务

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

  • 执行人钉扎

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

希望这有帮助!


Ada*_*dam 18

为了增加js84的出色响应,

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