HashiCorp Nomad is a distributed workload orchestrator designed to deploy and manage containers, batch jobs, long-running services, legacy applications, and other workloads across clusters of machines.
If Docker answers:
“How do I run this container?”
and Kubernetes answers:
“How do I orchestrate containers across a cluster?”
Nomad takes a somewhat broader and simpler approach:
“How do I schedule and operate different kinds of workloads across my infrastructure?”
Nomad can run Docker containers, binaries, Java applications, QEMU workloads, and other task-driver-based workloads. HashiCorp describes it as a highly available, distributed, datacenter-aware scheduler designed for services, batch jobs, and more.
1. What Is HashiCorp Nomad?
Nomad is a cluster scheduler and workload orchestrator developed by HashiCorp.
Its core responsibilities include:
- Scheduling workloads
- Allocating CPU and memory
- Placing workloads on appropriate nodes
- Running long-lived services
- Running batch jobs
- Running jobs on every node
- Handling workload failures
- Rolling out updates
- Managing task lifecycle
- Service registration
- Integrating with Consul
- Integrating with Vault
- Supporting multiple datacenters
- Supporting heterogeneous workloads
A simplified architecture is:
NOMAD │ ┌────────┴────────┐ │ │ Nomad Servers Nomad Clients │ │ Scheduling Run workloads Cluster State Containers Coordination Binaries │ Batch jobs │ Services ▼ Allocations
Nomad's servers handle scheduling and cluster management, while clients execute the workloads assigned to them.
2. Why Nomad?
Traditional application deployment might look like:
Server 1 → Application A Server 2 → Application B Server 3 → Application C Server 4 → Application D
As infrastructure grows, you need to answer:
- Where should an application run?
- Does the server have enough CPU?
- Does it have enough memory?
- Does it have the required runtime?
- What happens if the server fails?
- How do we deploy five copies?
- How do we update them?
- How do we run a job every night?
- How do we deploy something to every node?
- How do services discover each other?
Nomad provides a scheduling and reconciliation layer.
Desired State │ ▼ Nomad Job │ ▼ Scheduler │ ▼ Allocation Plan │ ▼ Nomad Clients │ ▼ Workloads