This is a Puppet module for managing Mesos nodes in a cluster.
- Puppet 3 (or 2.6 with hiera gem)
- Mesos binary package
- Debian/Ubuntu
- RedHat/CentOS
Parameters:
zookeeper
- ZooKeeper URL which is used for slaves connecting to the master and also for leader election, e.g.:- single ZooKeeper:
zk://127.0.0.1:2181/mesos
(which isn't fault tolerant)- multiple ZooKeepers:
zk://192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181/mesos
(usually 3 or 5 ZooKeepers should be enough) - ZooKeeper URL will be stored in
/etc/mesos/zk
- multiple ZooKeepers:
- single ZooKeeper:
conf_dir
- directory with simple configuration files containing master/slave parameters (name of the file is a key, contents its value) - this directory will be completely managed by Puppet
Should be as simple as this, on master node:
class{'mesos::master': }
optionally you can specify some parameters or it is possible to configure Mesos via Hiera (see below).
class{'mesos::master':
master_port => 5050,
work_dir => '/var/lib/mesos',
options => {
quorum => 4
}
}
For slave you have to specify either master
class{'mesos::slave':
master => '192.168.1.1'
}
or zookeeper
node(s) to connect:
class{'mesos::slave':
zookeeper => 'zk://192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181/mesos'
}
conf_dir
default value is/etc/mesos-master
(this directory will be purged by Puppet!)- for list of supported options see
mesos-master --help
- for list of supported options see
enable
- install Mesos slave service (default:true
)port
- slave's port for incoming connections (default:5051
)master
- ip address of Mesos master (default:localhost
)master_port
- Mesos master's port (default:5050
)work_dir
- directory for storing task's temporary files (default:/tmp/mesos
)env_var
- slave's execution environment variables - a Hash, if you are using Java, you might need e.g.:
class{'mesos::slave':
master => '192.168.1.1',
env_var => {
'JAVA_HOME' => '/usr/bin/java'
}
}
in a similar manner you can specify cgroups isolation:
class{'mesos::slave':
zookeeper => 'zk://192.168.1.1:2181/mesos',
isolation => 'cgroups',
cgroups => {
'hierarchy' => '/sys/fs/cgroup',
'root' => 'mesos',
}
}
conf_dir
default value is/etc/mesos-slave
(this directory will be purged by Puppet!) - for list of supported options seemesos-slave --help
If some file based configurations this module doesn't provide directly in master and slave module, mesos::property
allows to configure them or remove the file when value
is left empty. e.g. configure value in /etc/mesos/hostname
:
::mesos::property { 'hostname':
value => 'mesos.hostname.com',
dir => '/etc/mesos'
}
Remove this file simply set value to undef:
::mesos::property { 'hostname':
value => undef,
dir => '/etc/mesos'
}
All configuration could be handled by hiera.
Either specify one master
mesos::master : '192.168.1.1'
or Zookeeper could be use for a fault-tolerant setup (multiple instances of zookeeper are separated by comma):
mesos::zookeeper : 'zk://192.168.1.1:2181/mesos'
Some parameters are shared between master and slave nodes:
mesos::master_port : 5050
mesos::log_dir : '/var/log/mesos'
mesos::conf_dir : '/etc/mesos'
mesos::owner : 'mesos'
mesos::group : 'mesos'
Other are master specific:
mesos::master::cluster : 'my_mesos_cluster'
mesos::master::whitelist : '*'
or slave specific:
mesos:slave::env_var:
JAVA_HOME: '/usr/bin/java'
Mesos service reads configuration either from ENV variables or from configuration files wich are stored in /etc/mesos-slave
resp. /etc/mesos-master
. Hash passed via options
will be converted to config files. Most of the options is possible to configure this way:
mesos::master::options:
webui_dir: '/usr/local/share/mesos/webui'
quorum: '4'
you can also use facts from Puppet:
mesos::master::options:
hostname: "%{::fqdn}"
cgroups with Hiera:
mesos::slave::isolation: 'cgroups'
mesos::slave::cgroups:
hierarchy: '/sys/fs/cgroup'
Limit resources used by Mesos slave:
mesos::slave::resources:
cpus: '10'
For more information see Mesos project
Apache License 2.0