我试图理解mesos的各个组件是如何协同工作的,并发现了这本优秀的教程,其中包含以下体系结构概述:
我对这一点有一些担心,但没有明确指出(无论是在文章中还是在官方mesos文档中):
调度程序在哪里运行?是否存在“调度程序节点”,其中只应运行调度程序?
如果我在编写自己的mesos框架,我需要实现什么样的调度器功能?它是否只是一个二进制的yes/no或accept/reject,用于主机发送的报价?有具体的例子吗?
如果我在编写自己的mesos框架,我需要实现什么执行器功能?有具体的例子吗?
什么是一个具体的例子,任务将被发送给执行者?
执行器是“固定”(永久安装)在从属服务器上,还是以“按需”的方式浮动,动态地/动态地安装和执行?
3条答案
按热度按时间ryhaxcpt1#
计划者:是一些接受或拒绝报价的策略。我们可以自己编写调度程序,也可以使用chronos之类的现有调度程序。在调度程序中,我们应该评估可用的资源,然后接受或拒绝。
调度器功能:例如,假设您有一个需要8个cpu才能运行的任务,但是mesos提供的可能是6个cpu,在这种情况下无法满足需要,您可以拒绝。
executor功能:executor处理任务的状态相关信息。您需要实现的一组api,比如mesos slave中已分配任务的状态。在运行executor的mesos slave中,当前可用的cpu数量是多少。
执行者的具体例子:chronos
动态/动态地安装和执行:这是不可能的,您需要预先配置执行器。但是,可以使用自动缩放复制执行器。
v1uwarro2#
好问题!我相信看看rendler这样的示例框架会非常有帮助。这可能会回答您的大部分问题,并让您感觉到内部框架。
现在让我试着回答这个问题,这个问题可能在这之后仍然悬而未决。
计划程序位置
调度器不在任何特殊节点上,但请记住,调度器也可以进行故障转移(以及分布式系统中的任何部分)。
计划程序功能
看看rendler或框架开发指南。
执行器功能/任务
我相信rendler是理解任务/执行者关系的一个很好的例子。只要开始阅读github主页上的自述/描述。
执行人钉住
当需要执行器的第一个任务被发送到此节点时,每个节点上的执行器都会启动。在此之后,它将保留在该节点上。
希望这有帮助!
v1l68za43#
除了js84的出色响应,
调度器位置:许多用户喜欢通过另一个框架(如marathon)启动调度器,以确保如果调度器或其节点死亡,则可以在其他地方重新启动。
调度器功能:在向mesos注册之后,您的调度器将开始在
resourceOffers()
回调,在回调中,调度程序应该(至少)对所提供的资源的子集(或全部)启动一个任务。您可能还想实现statusUpdate()
回调以处理任务完成/失败。注意,如果像marathon/chronos/aurora/kubernetes这样的现有框架可以满足需要,那么您甚至可能不需要实现自己的调度器。executor功能:如果只想启动linux进程或docker容器并知道它何时完成,通常不需要创建自定义executor。您可以只使用默认的mesos执行器(通过指定
CommandInfo
直接在TaskInfo
,而不是嵌入ExecutorInfo
). 但是,如果您想构建一个自定义执行器,那么至少需要实现launchTask()
,理想情况下killTask()
.示例任务:示例任务可以是一个简单的linux命令,如
sleep 1000
或者echo "Hello World"
,或docker容器(通过ContainerInfo
)就像image : 'mysql'
. 或者,如果您使用自定义执行器,那么执行器将定义任务是什么以及如何运行它,因此任务可以改为作为执行器进程中的另一个线程运行,或者只是成为单线程执行器中队列中的项。executor pinning:executor是通过commandinfo uri分发的,就像任何任务二进制文件一样,因此它们不需要预先安装在节点上。梅索斯会帮你把它取出来。