Cloud Native Blog - Container Solutions

Configuring resource offers on Mesos

Written by Frank Scholten | May 13, 2015 4:10:15 PM

The other day I was working on Mesos Elasticsearch and encountered a problem while running the framework. The framework did not accept any offers from slaves because I had not properly configured the resources. Right now the Elasticsearch framework requires ports 9200 and 9300 but by default the slaves offer a port range 31000 to 32000. The default slave resources offers are defined in src/slave/constants.cpp. See the snippet below.

const double DEFAULT_CPUS = 1;
const Bytes DEFAULT_MEM = Gigabytes(1);
const Bytes DEFAULT_DISK = Gigabytes(10);
const std::string DEFAULT_PORTS = "[31000-32000]";

There are two ways to configure the slaves to offer the correct resources. The first is to add a resources parameter to the mesos-slave command like this:


$ /usr/local/sbin/mesos-slave --resources='ports:[9200-9200,9300-9300]' ...

The resource string is a comma-separated string consisting of scalar, ranges and sets. Checkout the Mesos resources documentation to see how to create valid resources expressions. The other way to configure resources is to create a file under /etc/mesos-slave called resources whose contents is the resource string.


$ cat /etc/mesos-slave/resources
ports:[9200-9200,9300-9300]
$

Note that any type of configuration can be expressed this way. This is really useful when provisioning a cluster. For instance with Terraform. For more information about configuration checkout the Mesos configuration documentation.