2015-09-14 02:04:06 +00:00
|
|
|
Nomad [![Build Status](https://travis-ci.org/hashicorp/nomad.svg)](https://travis-ci.org/hashicorp/nomad)
|
|
|
|
=========
|
|
|
|
|
|
|
|
- Website: https://www.nomadproject.io
|
|
|
|
- IRC: `#nomad-tool` on Freenode
|
|
|
|
- Mailing list: [Google Groups](https://groups.google.com/group/nomad-tool)
|
|
|
|
|
|
|
|
![Nomad](https://raw.githubusercontent.com/hashicorp/nomad/master/website/source/assets/images/logo-header%402x.png?token=AAkIoLO_y1g3wgHMr3QO-559BN22rN0kks5V_2HpwA%3D%3D)
|
|
|
|
|
|
|
|
Nomad is a cluster manager, designed for both long lived services and short
|
|
|
|
lived batch processing workloads. Developers use a declarative job specification
|
|
|
|
to submit work, and Nomad ensures constraints are satisfied and resource utilization
|
|
|
|
is optimized by efficient task packing. Nomad supports all major operating systems
|
|
|
|
and virtualized, containerized, or standalone applications.
|
|
|
|
|
|
|
|
The key features of Nomad are:
|
|
|
|
|
|
|
|
* **Docker Support**: Jobs can specify tasks which are Docker containers.
|
|
|
|
Nomad will automatically run the containers on clients which have Docker
|
|
|
|
installed, scale up and down based on the number of instances request,
|
|
|
|
and automatically recover from failures.
|
|
|
|
|
|
|
|
* **Multi-Datacenter and Multi-Region Aware**: Nomad is designed to be
|
|
|
|
a global-scale scheduler. Multiple datacenters can be managed as part
|
|
|
|
of a larger region, and jobs can be scheduled across datacenters if
|
|
|
|
requested. Multiple regions join together and federate jobs making it
|
|
|
|
easy to run jobs anywhere.
|
|
|
|
|
|
|
|
* **Operationally Simple**: Nomad runs as a single binary that can be
|
|
|
|
either a client or server, and is completely self contained. Nomad does
|
|
|
|
not require any external services for storage or coordination. This means
|
|
|
|
Nomad combines the features of a resource manager and scheduler in a single
|
|
|
|
system.
|
|
|
|
|
|
|
|
* **Distributed and Highly-Available**: Nomad servers cluster together and
|
|
|
|
perform leader election and state replication to provide high availability
|
|
|
|
in the face of failure. The Nomad scheduling engine is optimized for
|
|
|
|
optimistic concurrency allowing all servers to make scheduling decisions to
|
|
|
|
maximize throughput.
|
|
|
|
|
|
|
|
* **HashiCorp Ecosystem**: Nomad integrates with the entire HashiCorp
|
|
|
|
ecosystem of tools. Along with all HashiCorp tools, Nomad is designed
|
|
|
|
in the unix philosophy of doing something specific and doing it well.
|
|
|
|
Nomad integrates with tools like Packer, Consul, and Terraform to support
|
|
|
|
building artifacts, service discovery, monitoring and capacity management.
|
|
|
|
|
|
|
|
For more information, see the [introduction section](https://www.nomadproject.io/intro)
|
|
|
|
of the Nomad website.
|
|
|
|
|
|
|
|
Getting Started & Documentation
|
|
|
|
-------------------------------
|
|
|
|
|
|
|
|
All documentation is available on the [Nomad website](https://www.nomadproject.io).
|
|
|
|
|
|
|
|
Developing Nomad
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
If you wish to work on Nomad itself or any of its built-in systems,
|
2015-09-20 20:36:52 +00:00
|
|
|
you will first need [Go](https://www.golang.org) installed on your
|
2016-02-06 00:33:20 +00:00
|
|
|
machine (version 1.5+ is *required*).
|
2015-09-14 02:04:06 +00:00
|
|
|
|
2015-09-20 20:36:52 +00:00
|
|
|
**Developing with Vagrant**
|
2015-09-14 15:18:40 +00:00
|
|
|
There is an included Vagrantfile that can help bootstrap the process. The
|
|
|
|
created virtual machine is based off of Ubuntu 14, and installs several of the
|
2015-09-20 20:36:52 +00:00
|
|
|
base libraries that can be used by Nomad.
|
2015-09-14 15:18:40 +00:00
|
|
|
|
|
|
|
To use this virtual machine, checkout Nomad and run `vagrant up` from the root
|
|
|
|
of the repository:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
$ git clone https://github.com/hashicorp/nomad.git
|
|
|
|
$ cd nomad
|
|
|
|
$ vagrant up
|
|
|
|
```
|
|
|
|
|
|
|
|
The virtual machine will launch, and a provisioning script will install the
|
2015-09-20 20:36:52 +00:00
|
|
|
needed dependencies.
|
2015-09-14 15:18:40 +00:00
|
|
|
|
2015-09-20 20:36:52 +00:00
|
|
|
**Developing locally**
|
2015-09-14 02:04:06 +00:00
|
|
|
For local dev first make sure Go is properly installed, including setting up a
|
2016-02-15 11:15:16 +00:00
|
|
|
[GOPATH](https://golang.org/doc/code.html#GOPATH). After setting up Go, clone this
|
|
|
|
repository into `$GOPATH/src/github.com/hashicorp/nomad`. Then you can
|
2015-09-14 02:04:06 +00:00
|
|
|
download the required build tools such as vet, cover, godep etc by bootstrapping
|
|
|
|
your environment.
|
|
|
|
|
|
|
|
```sh
|
|
|
|
$ make bootstrap
|
|
|
|
...
|
|
|
|
```
|
|
|
|
|
2016-02-15 11:15:16 +00:00
|
|
|
Afterwards type `make test`. This will run the tests. If this exits with exit status 0,
|
2015-09-14 02:04:06 +00:00
|
|
|
then everything is working!
|
|
|
|
|
|
|
|
```sh
|
|
|
|
$ make test
|
|
|
|
...
|
|
|
|
```
|
|
|
|
|
2015-09-30 19:39:05 +00:00
|
|
|
To compile a development version of Nomad, run `make dev`. This will put the
|
2015-09-14 02:04:06 +00:00
|
|
|
Nomad binary in the `bin` and `$GOPATH/bin` folders:
|
|
|
|
|
|
|
|
```sh
|
2015-09-30 19:39:05 +00:00
|
|
|
$ make dev
|
2015-09-14 02:04:06 +00:00
|
|
|
...
|
|
|
|
$ bin/nomad
|
|
|
|
...
|
|
|
|
```
|
2015-09-30 19:39:05 +00:00
|
|
|
|
|
|
|
To cross-compile Nomad, run `make bin`. This will compile Nomad for multiple
|
|
|
|
platforms and place the resulting binaries into the `./pkg` directory:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
$ make bin
|
|
|
|
...
|
|
|
|
$ ls ./pkg
|
|
|
|
...
|
|
|
|
```
|