Learn the

Provision, Secure, Connect, and Run

Any infrastructure for any application

Easily Deploy Applications at Any Scale

Get Started Download 0.7.1

Simple and Lightweight

Nomad is a single binary that schedules applications and services on Linux, Windows, and Mac. It is an open source scheduler that uses a declarative job file for scheduling virtualized, containerized, and standalone applications.

1. Declare Jobs

Users compose and submit high-level job files. Nomad handles the scheduling and upgrading of the applications over time.

This flexibility makes it easy to deploy one container, dozens of containers, or even millions.

2. Plan Changes

With built-in dry-run execution, Nomad shows what scheduling decisions it will take before it takes them. Operators can approve or deny these changes to create a safe and reproducible workflow.

3. Run Applications

Nomad runs applications and ensures they keep running in failure scenarios. In addition to long-running services, Nomad can schedule batch jobs, distributed cron jobs, and parameterized jobs.

4. Monitor Progress

Stream logs, send signals, and interact with the file system of scheduled applications. These operator-friendly commands bring the familiar debugging tools to a scheduled world.

Combine

Hybrid & Multi Cloud

As more organizations adopt cloud technologies, the desire to run in multiple datacenters and multiple regions becomes critical. Nomad can span public and private clouds and treat all your infrastructure as a pool of resources.

Hybrid Cloud

Nomad bridges the gap between the public and private cloud, creating a unified interface for developers to run any application on any infrastructure. Easily run services across your internal private cloud and external public cloud transparently to application developers.

Multi Cloud

As more organizations adopt cloud technologies, the desire to run applications simultaneously across multiple clouds increases. Nomad combines the power of all cloud providers into a single, unified interface for deploying applications and running services.

Maintain

Simplify Operations

Nomad simplifies operations by supporting several deployment strategies to safely upgrade jobs, automatically handling machine failures, and providing a single workflow to deploy applications.

Rolling Deploys

rolling... 9/12 done! 12/12

In order to update an application while reducing downtime, Nomad provides a built-in mechanism for rolling upgrades. Operators specify the rate at which they would like to upgrade their service in the declarative job file, plan the changes, and submit the new job. Nomad then updates the service to the newest version using task health and Consul health check information to ensure replacement allocations are healthy. With full control over the update strategy, rolling upgrades make application deployments simple and safe.

Blue/Green Deployments

Nomad supports native blue/green and canary deployments through the declarative job file syntax. Instead of doing a rolling upgrade of the existing allocations, the new version of the group is deployed along side the existing set. While this duplicates the resources required during the upgrade process, it allows very safe deployments as the original version of the group is untouched till the operator promotes the new version.

web-app:1.0 group.blue web-app:1.1 group.green 8/10 2/10

Automatic Machine Failures

Because it knows the state of all nodes and applications, if a node becomes unhealthy, Nomad will automatically reschedule the applications that were previously running on the unhealthy host onto a new, healthy host if capacity exists. As new clients are added to the cluster, they can share the responsibility of running applications and services.

Support

Flexible Workloads

In addition to supporting Linux, Windows, and Mac, Nomad has extensible support for containerized, virtualized, and standalone applications. Easily start Docker containers, VMs, or application runtimes like Java.

Diverse Technologies

By supporting a wide range of technologies such as Docker, rkt, and LXC, Nomad does not force you into a single technology. Easily use multiple container or virtualization runtimes simultaneously. Applications with their own runtime such as Java or Go can be scheduled directly without the overhead of a container.

Multi OS

The Nomad client runs on Linux, Windows, and Mac OS. This diverse operating system support enables using the same application scheduler for all your scheduling and runtime needs.

Maximize

Increase Utilization & Reduce Costs

Nomad uses bin packing to optimize application placement onto servers to maximize resource utilization, increase density, and help reduce costs.

Increase Density

Nomad places applications and services based on a bin packing algorithm, which is used to optimize the resource utilization and density of applications. Nomad automatically augments the bin-packing algorithm with anti-affinity rules to avoid colocating instances of the same service to reduce the probability of correlated failures.

Reduce Costs

By maximizing resource utilization, Nomad can help remove unused or under-utilized machines in the cluster, reducing overall costs. Additionally, Nomad enables organizations to utilize larger, more cost-effective compute devices which can be less expensive at scale.

Examples

Create and Submit Jobs

Easily create, validate, submit, and check the status of jobs using the Nomad CLI.

admin@hashicorp.com: nomad init Example job file written to example.nomad   admin@hashicorp.com: nomad validate example.nomad Job validation successful   admin@hashicorp.com: nomad run example.nomad ==> Monitoring evaluation "feb23392" Evaluation triggered by job "example" Evaluation within deployment: "7ffa7ed1" Allocation "a2f24fcf" created: node "3714a84a", group "cache" Evaluation status changed: "pending" -> "complete" ==> Evaluation "feb23392" finished with status "complete"   admin@hashicorp.com: nomad status ID Type Priority Status Submit Date example service 50 running 01/08/18 19:10:29 UTC

Plan Changes

Perform a dry-run to check application placement, scheduling decisions, and visualize failures before they happen.

admin@hashicorp.com: nomad plan example.nomad +/- Job: "example" +/- Task Group: "cache" (2 create, 1 in-place update) +/- Count: "1" => "3" (forces create) Task: "redis"   Scheduler dry-run: - All tasks successfully allocated.   Job Modify Index: 7   admin@hashicorp.com: nomad run -check-index 7 example.nomad ==> Monitoring evaluation "e338a6ae" Evaluation triggered by job "example" Evaluation within deployment: "43310206" Allocation "991a0d89" created: node "c5916a99", group "cache" Allocation "daee8be1" created: node "c5916a99", group "cache" Allocation "83f29312" modified: node "c5916a99", group "cache" Evaluation status changed: "pending" -> "complete" ==> Evaluation "e338a6ae" finished with status "complete"

View Application Logs

Stream application logs directly in the terminal to help analyze and debug applications.

admin@hashicorp.com: nomad logs -tail -job example 08 Jan 19:10:29 # Server started, Redis version 3.2.9 08 Jan 19:10:29 * The server is now ready to accept connections on port 6379

The introduction contains a walkthrough guide, glossary, and a range of examples for learning and experimenting with Nomad.

Get Started