Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/everpeace/cookbook-mesos

Cookbook for Mesos (http://mesos.apache.org/).
https://github.com/everpeace/cookbook-mesos

Last synced: 2 months ago
JSON representation

Cookbook for Mesos (http://mesos.apache.org/).

Lists

README

        

# Mesos Cookbook [![Build Status](https://travis-ci.org/everpeace/cookbook-mesos.png?branch=master)](https://travis-ci.org/everpeace/cookbook-mesos) [![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/everpeace/cookbook-mesos?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

Install Mesos () and configure mesos master and slave.
This cookbook also supports installation by both bulding from source and with [Mesosphere](http://mesosphere.io) package.
You can switch installation type using the `node[:mesos][:type]` attribute (`source` or `mesosphere`).

## Platform

Currently only supports `ubuntu` and `centos`. But `centos` support is experimental.

If you would use `cgroups` isolator or `docker` containerizer, version 14.04 is highly recommended. Note that `docker` containerizer is only supported by Mesos 0.20.0+.

## Installation Type

You have to specify intallation type (`source` or `mesosphere`) by setting `node[:mesos][:type]` variable.

Currently this cookbook defaults to build mesos from source, i.e.
`node[:mesos][:type]` is set to `source`.

## Recipes

### mesos::default

Install mesos using `build_from_source` recipe or `mesosphere` recipe, depending
on what the `node[:mesos][:type]` attribute is set to (`source` or `mesosphere`).

### mesos::build\_from\_source

Install mesos (download zip from [github](https://github.com/apache/mesos), configure, make, make install).

### mesos::mesosphere

Install mesos using Mesosphere's mesos package.
You can also install zookeeper package by `node[:mesos][:mesosphere][:with_zookeeper]` if required because Mesosphere's mesos package doesn't include zookeeper. You can also specify mesosphere package's build version (see below for details).

### mesos::master

Configure master and cluster deployment configuration files, and start
`mesos-master`.

* `node[:mesos][:prefix]/var/mesos/deploy/masters`
* `node[:mesos][:prefix]/var/mesos/deploy/slaves`
* `node[:mesos][:prefix]/var/mesos/deploy/mesos-deploy-env.sh`
* `node[:mesos][:prefix]/var/mesos/deploy/mesos-master-env.sh`

If you choose `mesosphere` as `node[:mesos][:type]`, the `node[:mesos][:prefix]` attribute
will be overridden to `/usr/local`, which is because the package from Mesosphere
installs mesos into that directory.

Furthermore, this recipe will also configure upstart configuration files.

* `/etc/mesos/zk`
* `/etc/defaults/mesos`
* `/etc/defaults/mesos-master`

#### How to configure `mesos-master`

You can configure `mesos-master` command line options using the `node[:mesos][:master]` attribute.

If you have a configuration as shown below:

```
node[: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 [here](http://mesos.apache.org/documentation/latest/configuration/) for available options or the output of `mesos-master --help`.

### mesos::slave

Configure slave configuration files, and start `mesos-slave`.

* `node[:mesos][:prefix]/var/mesos/deploy/mesos-slave-env.sh`

If you choose `mesosphere` as `node[:mesos][:type]`, the `node[:mesos][:prefix]` attribute
will be overridden to `/usr/local`, which is because the package from Mesosphere
installs mesos into that directory by default.

Furthermore, this recipe also configures upstart configuration files.

* `/etc/mesos/zk`
* `/etc/defaults/mesos`
* `/etc/defaults/mesos-slave`

#### How to configure `mesos-slave`

You can configure `mesos-slave` command line options by `node[:mesos][:slave]` hash.
If you have a configuration as shown below:

```
node[: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 [here](http://mesos.apache.org/documentation/latest/configuration/) for available options or the output of `mesos-slave --help`.

### [Deprecated] mesos::docker-executor

Install [mesos-docker executor](https://github.com/mesosphere/mesos-docker).
Currently only Mesos 0.14.0 is supported.

__NOTE__: This cookbook DOES NOT install `docker` automatically.
So, you need to install docker manually.
See [./example/mesosphere/Vagrantfile](https://github.com/everpeace/cookbook-mesos/tree/master/example/mesosphere/Vagrantfile)

## Usage

Please see below:

* [everpeace/vagrant-mesos](https://github.com/everpeace/vagrant-mesos)
* [./example/source](https://github.com/everpeace/cookbook-mesos/tree/master/example/source/)
* [./example/mesosphere](https://github.com/everpeace/cookbook-mesos/tree/master/example/mesosphere/)

## Attributes

### mesos::default


Key
Type
Description
Default


[:mesos][:type]
String
installation type(source or mesosphere)
source

### mesos::build\_from\_source


Key
Type
Description
Default


[:mesos][:version]
String
Version(branch or tag name at http://github.com/apache/mesos).
0.20.1


[:mesos][:prefix]
String
Prefix value to be passed to configure script
/usr/local


[:mesos][:home]
String
Directory which mesos sources are extracted to(node[:mesos][:home]/mesos).
/opt


[:mesos][:build][:skip_test]
Boolean
Flag whether test will be performed.
true

### mesos::mesosphere


Key
Type
Description
Default


[:mesos][:version]
String
Version.(see http://mesosphere.io/downloads/)
0.20.1


[:mesos][:mesosphere][:build_version]
String
build version of mesosphere package. mesosphere's package version consists of 2 parts, `-`, for example `0.20.0-1.0.ubuntu1404`
1.0.ubuntu1404


[:mesos][:mesosphere][:with_zookeeper]
String
flag for installing zookeeper package
false

### mesos::master


Key
Type
Description
Default


[:mesos][:prefix]
String
Prefix value to be passed to configure script. This value will be overridden by /usr/local when you choose mesosphere.
/usr/local



[:mesos][:ssh_opt]
String
ssh options to be used in mesos-[start|stop]-cluster
-o StrictHostKeyChecking=no
-o ConnectTimeout=2



[:mesos][:deploy_with_sudo]
String
Flag whether sudo will be used in mesos-[start|stop]-cluster
1


[:mesos][:cluster_name]
String
[OBSOLETE] Human readable name for the cluster, displayed at webui.
MyCluster


[:mesos][:mater_ips]
Array of String
IP list of masters used in mesos-[start|stop]-cluster
[ ]


[:mesos][:slave_ips]
Array of String
IP list of slaves used in mesos-[start|stop]-cluster
[ ]


[:mesos][:master][: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)



[:mesos][:master][:work_dir]
String
[REQUIRED(0.19.1+)] Where to store the persistent information stored in the Registry.
/tmp/mesos


[: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.



[:mesos][:master][:<option_name>]
String
You can set arbitrary command line option for mesos-master. See [here](http://mesos.apache.org/documentation/latest/configuration/) for available options or the output of `mesos-master --help`.

### mesos::slave


Key
Type
Description
Default


[:mesos][:prefix]
String
Prefix value to be passed to configure script. This value will be overridden by /usr/local when you choose mesosphere.
/usr/local


[:mesos][:slave][:master]
String
[REQUIRED] mesos master url.This should be ip:port for non-ZooKeeper based masters, otherwise a zk:// . when mesosphere, you should set zk:// address.



[:mesos][:slave][:<option_name>]
String
You can set arbitrary command line option for mesos-slave. See [here](http://mesos.apache.org/documentation/latest/configuration/) for available options or the output of `mesos-slave --help`.

## Testing

There are a couple of test suites

* `chefspec` for unit tests.
* `test-kitchen` with `serverspec` for integration tests (using `vagrant`).

in place, which tests both source and mesosphere installations (as well as master and slave recipes).

## Contributing

1. Fork the repository on Github
2. Create a named feature branch (like `add_component_x`)
3. Write you change
4. Write tests for your change (if applicable)
5. Run the tests, ensuring they all pass
6. Submit a Pull Request using Github

## License
MIT License. see [LICENSE.txt](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](https://github.com/everpeace/cookbook-mesos/blob/b9e660382affaba7c3906367fbd135e0de49de02/README.md#license))