【问题标题】:Apache Mesos Schedulers and Executors by exampleApache Mesos 调度器和执行器示例
【发布时间】:2015-07-06 14:54:18
【问题描述】:

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

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

  • 调度程序在哪里运行?是否存在应该只运行调度程序的“调度程序节点”?
  • 如果我正在编写自己的 Mesos 框架,我需要实现哪些调度程序功能?它只是二进制是/否或接受/拒绝主人发送的报价吗?有具体的例子吗?
  • 如果我正在编写自己的 Mesos 框架,我需要实现哪些 Executor 功能?有具体的例子吗?
  • 将发送到执行器的任务的具体示例是什么?
  • Executors 是“固定”(永久安装在)Slave 上,还是以“按需”类型的方式浮动,动态/即时安装和执行?

【问题讨论】:

    标签: mesos


    【解决方案1】:

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

    现在让我尝试回答可能在此之后仍然悬而未决的问题。

    • 调度程序位置

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

    • 调度程序功能

    看看 Rendler 或at the framework development guide

    • 执行器功能/任务

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

    • 执行者固定

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

    希望这有帮助!

    【讨论】:

      【解决方案2】:

      为了增加 js84 的出色响应,

      • 调度程序位置:许多用户喜欢通过 Marathon 等其他框架启动调度程序,以确保如果调度程序或其节点死亡,那么它可以在其他地方重新启动。
      • 调度程序功能:在 Mesos 注册后,您的调度程序将开始在 resourceOffers() 回调中获取资源提供,您的调度程序应该在其中启动(至少)一个任务的子集(或全部)提供的资源。您可能还想实现statusUpdate() 回调来处理任务完成/失败。 请注意,如果 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 将为您获取并运行它。

      【讨论】:

      • > Many users like to launch the schedulers via another framework like Marathon。他们在哪里启动 Marathon 调度程序?
      • Marathon 可以在 master 上启动(例如通过 systemd),或者在任何其他可以到达 Mesos master 的节点上(可能仍然通过 systemd)。
      • @Adam你写的,Executor对应一个Linux进程。如果你需要一个 Java 微服务怎么办 - 你是否必须将它作为 Docker 容器启动,或者将 Executor 设计为微服务是不可能/有意义的?
      【解决方案3】:

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

      调度程序功能: 示例可能就像假设你有一个需要 8 个 cpus 才能运行的任务,但 mesos 提供的可能是 6 个 cpus,在这种情况下你无法满足需求可以拒绝。

      Executor 功能: Executor 处理您的任务的状态相关信息。您需要实现的一组 API,例如 mesos slave 中分配任务的状态。执行器运行的 mesos slave 中当前可用的 cpu 数量是多少。

      执行器的具体示例: chronos

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多