[+]文章目录

Mesos配置模块

Mesos master 的用于确定哪些框架资源的逻辑,是封装 在分配器模块里的。分配器是一个可插入组件,Mesos 可以使用它来实现自己的共享策略,例如fair-sharing、优先级等,或调整默认等级优势资源公平算法((见DRF 文献 )。

使用定制的分配器,便一个必须:

* 实现分配器接口``` mesos/master/allocator.hpp```

* 包装分配器实现到模块然后在Mesos master中加载

编写一个定制的分配器

  分配器模块是在c++中实现的,Mesos 也是c++写的。他们的子类中定义的分配器接口在mesos/master/allocator.hpp 。但是,你的实现可以是一个c++代理,这表明调用实际的分配器的语言是可以选择的。  

默认的分配器是 HierarchicalDRFAllocatorProcess ,位置在$MESOS_HOME/src/master/allocator/mesos/hierarchical.hpp。像大多数便组件,它是基于actor的,这意味着所有接口方法是无阻塞的,并且返回后立即将相应的执行加载到执行者的队列。如果你想以类似的方式设计定制分配器,在 $MESOS_HOME/src/master/allocator/mesos/allocator.hpp中定义子类。然后在MesosAllocator封装基于actor 的MesosAllocator分配器。这将调用底层的执行者和控制它的生命周期。您可以参考HierarchicalDRFAllocatorProcess .

此外,内置的分层分配器可以扩展,而不需要重新实现整个分配的逻辑。这可以通过使用theSorter抽象类。Sorters定义层次结构层的顺序(如角色或框架),通过调用“客户端”对象和一些客户信息,应该提供资源,返回客户的有序列表。

分类器是在c++和继承中实现Sorter 类的,这定义在$MESOS_HOME/src/master/allocator/sorter/sorter.hpp 。默认分类器是DRFSorter ,实现了公平分享,相关位置在$MESOS_HOME/src/master/allocator/sorter/drf/sorter.hpp. 。这个分类器能够根据权重,表决出优先顺序,需要指定-add()。每个客户端的资源是通过它的权重而来的。例如,一个权重为2的客户端将比权重为1的客户端得到两倍的资源。

连接定制的分配器

编写一个定制的分配器,下一步是要重写内置的实现。这个过程包括几个步骤:

* 封装你的分配器便分配器模块,

* 在Mesos maste 加载这个模块

一个分配器模块是一个工厂函数和模块描述、在定义 mesos/module/allocator.hpp . 定义。假设分配逻辑由theExternalAllocator实现类中声明external_allocator。 以下代码片段描述了一个实现名为ExternalAllocatorModule的分配器模块 :

#include <mesos/master/allocator.hpp>
#include <mesos/module/allocator.hpp>
#include <stout/try.hpp>

#include "external_allocator.hpp"

using namespace mesos;
using mesos::master::allocator::Allocator;
using mesos::internal::master::allocator::HierarchicalDRFAllocator;

static Allocator* createExternalAllocator(const Parameters& parameters)
{
  Try<Allocator*> allocator = ExternalAllocator::create();
  if (allocator.isError()) {
    return NULL;
  }

  return allocator.get();
}

// Declares an ExternalAllocator module named 'ExternalAllocatorModule'.
mesos::modules::Module<Allocator> ExternalAllocatorModule(
    MESOS_MODULE_API_VERSION,
    MESOS_VERSION,
    "Mesos Contributor",
    "engineer@example.com",
    "External Allocator module.",
    NULL,
    createExternalAllocator);

请参阅便模块文档说明如何编译和加载模块便主人。


« 前一篇