Apache Mesos 调度器和执行器示例
Apache Mesos Schedulers and Executors by example
我正在尝试了解 Mesos work together, and found this excellent tutorial 的各种组件,其中包含以下架构概述:
我对此有一些担忧(在文章中或在官方 Mesos docs 中):
- 调度器运行在哪里?是否有 "Scheduler nodes" 只有调度程序应该 运行?
- 如果我正在编写自己的 Mesos 框架,我需要实现哪些调度程序功能? Master 发送的 Offer 只是二进制 yes/no 还是 accept/reject?有具体的例子吗?
- 如果我正在编写自己的 Mesos 框架,我需要实现哪些 Executor 功能?有具体的例子吗?
- 发送给执行器的任务的具体示例是什么?
- 执行器 "pinned"(永久安装在)奴隶上,还是它们以 "on demand" 类型的方式浮动,被安装和执行 dynamically/on-the-fly?
好问题!
我相信看一下 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 1000
或 echo "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 : 这些是不行的,需要预先配置执行器。但是,您可以使用自动缩放来复制执行程序。
我正在尝试了解 Mesos work together, and found this excellent tutorial 的各种组件,其中包含以下架构概述:
我对此有一些担忧(在文章中或在官方 Mesos docs 中):
- 调度器运行在哪里?是否有 "Scheduler nodes" 只有调度程序应该 运行?
- 如果我正在编写自己的 Mesos 框架,我需要实现哪些调度程序功能? Master 发送的 Offer 只是二进制 yes/no 还是 accept/reject?有具体的例子吗?
- 如果我正在编写自己的 Mesos 框架,我需要实现哪些 Executor 功能?有具体的例子吗?
- 发送给执行器的任务的具体示例是什么?
- 执行器 "pinned"(永久安装在)奴隶上,还是它们以 "on demand" 类型的方式浮动,被安装和执行 dynamically/on-the-fly?
好问题! 我相信看一下 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 1000
或echo "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 : 这些是不行的,需要预先配置执行器。但是,您可以使用自动缩放来复制执行程序。