Install Mesos (http://mesos.apache.org/) and configure mesos master and slave. This cookbook installs Mesos using Mesosphere packages.
All credit to @everpeace for the basis for this cookbook, everpeace/cookbook-mesos.
Currently only supports ubuntu
and centos
. But centos
support is experimental.
If you would use cgroups
isolator or docker
containerizer, Ubuntu 14.04 is highly recommended. Note that docker
containerizer is only supported by Mesos 0.20.0+.
Install Java and Mesos, with platform-dependent switches in place.
Install Mesos using Mesosphere's mesos
package.
One should use the zookeeper
cookbook to provision a well-configured ZooKeeper instance or cluster of instances. There is a caveat to this: the mesos
package on Ubuntu installs the zookeeper
package, so co-locating Mesos and ZooKeeper using that cookbook is tricky, at best. A separate ZK cluster is encouraged.
Configure master and cluster deployment configuration files, and start
mesos-master
.
node['et_mesos']['deploy_dir']/masters
node['et_mesos']['deploy_dir']/slaves
node['et_mesos']['deploy_dir']/mesos-deploy-env.sh
node['et_mesos']['deploy_dir']/mesos-master-env.sh
Furthermore, this recipe will also configure upstart configuration files.
/etc/mesos/zk
/etc/defaults/mesos
/etc/defaults/mesos-master
You can configure mesos-master
command line options using the node['et_mesos']['master']
attribute.
If you have a configuration as shown below:
node['et_mesos']['master'] = {
port: "5050",
log_dir: "/var/log/mesos",
zk: "zk://localhost:2181/mesos",
cluster: "MyCluster",
quorum: "1"
}
Then mesos-master
will be invoked with command line options like this:
mesos-master --zk=zk://localhost:2181/mesos --port=5050 --log_dir=/var/log/mesos --cluster=MyCluster
See the latest Mesos config docs for available options or the output of mesos-master --help
.
Configure slave configuration files, and start mesos-slave
.
node['et_mesos']['deploy_dir']/mesos-slave-env.sh
Furthermore, this recipe also configures upstart configuration files.
/etc/mesos/zk
/etc/defaults/mesos
/etc/defaults/mesos-slave
You can configure mesos-slave
command line options by node['et_mesos']['slave']
hash.
If you have a configuration as shown below:
node['et_mesos']['slave'] = {
master: 'zk://localhost:2181/mesos',
log_dir: '/var/log/mesos',
containerizers: 'docker,mesos',
isolation: 'cgroups/cpu,cgroups/mem',
work_dir: '/var/run/work'
}
Then mesos-slave
will be invoked with command line options like this:
mesos-slave --master=zk://localhost:2181/mesos --log_dir=/var/log/mesos --containerizers=docker,mesos --isolation=cgroups/cpu,cgroups/mem --work_dir=/var/run/work
See the latest Mesos config docs for available options or the output of mesos-slave --help
.
Wrap this cookbook and include_recipe 'et_mesos::master'
or include_recipe 'et_mesos::slave'
, depending on what part of the cluster you need to provision.
The recommendation would be to have two wrapper cookbooks, one for the master(s), and another for your slave(s).
Key | Type | Description | Default |
---|---|---|---|
['et_mesos']['version'] | String | Version(branch or tag name at http://github.com/apache/mesos). | 0.22.1 |
['et_mesos']['ssh_opt'] | String | ssh options to be used in mesos-[start|stop]-cluster | -o StrictHostKeyChecking=no -o ConnectTimeout=2 |
['et_mesos']['deploy_with_sudo'] | String | Flag whether sudo will be used in mesos-[start|stop]-cluster | 1 |
['et_mesos']['cluster_name'] | String | [OBSOLETE] Human readable name for the cluster, displayed at webui. | MyCluster |
['et_mesos']['master_ips'] | Array of String | IP list of masters used in mesos-[start|stop]-cluster | [ ] |
['et_mesos']['slave_ips'] | Array of String | IP list of slaves used in mesos-[start|stop]-cluster | [ ] |
['et_mesos']['zk'] | String | [REQUIRED(0.19.1+)] ZooKeeper URL (used for leader election amongst masters). May be one of: zk://host1:port1,host2:port2,…path zk://username:password@host1:port1,host2:port2,…/path file://path/to/file (where file contains one of the above) |
|
['et_mesos']['master']['work_dir'] | String | [REQUIRED(0.19.1+)] Where to store the persistent information stored in the Registry. | /tmp/mesos |
['et_mesos']['master']['quorum'] | String | [REQUIRED(0.19.1+)] The size of the quorum of replicas when using “replicated_log” based registry. It is imperative to set this value to be a majority of masters, i.e., quorum > (number of masters) / 2. | |
['et_mesos']['master']['option_name'] | String | You can set arbitrary command line option for mesos-master, replace `option_name` with the key for the option to set. See the latest Mesos config docs for available options, or the output of `mesos-master --help`. | |
['et_mesos']['slave']['master'] | String | [REQUIRED] mesos master url.This should be a `zk://` style address. | |
['et_mesos']['slave']['option_name'] | String | Like ['et_mesos']['master']['option_name'] above, arbitrary options may be specified as a key for a slave by replacing `option_name` with your option’s key. |
There are a couple of test suites in place:
chefspec
for unit tests.test-kitchen
withserverspec
for integration tests (usingkitchen-ec2
).
- Fork the repository on Github
- Create a named feature branch (like
add_component_x
) - Write you change
- Write tests for your change (if applicable)
- Run the tests, ensuring they all pass
- Submit a Pull Request using Github
MIT License. see LICENSE.txt
(Please note that before 2015-02-06-18:00 PST, this project is opened under Apache License, Version 2.0. See also README.md in old version)