Nomad is what happens when someone looks at Kubernetes and says "there has to be a better way." It's a workload scheduler that doesn't require a PhD to operate. You download one 40MB binary, run it, and you're orchestrating workloads. No masters, no etcd clusters, no networking plugins that break when you look at them funny.
Three years in production taught me this shit: Nomad isn't perfect, but it's not trying to be everything to everyone.
What Actually Works (The Good Stuff)
Single Binary Deployment Actually Works
When they say single binary, they mean it. No control plane nodes, no separate databases, no "oh shit the etcd cluster is corrupted" during weekend emergencies. You literally copy one file and run it. The binary contains everything: scheduler, API server, the works.
I've deployed this thing dozens of times - the architecture is stupidly simple because one binary handles everything from job scheduling to API serving.
The catch? You still need Consul for service discovery if you want anything beyond basic scheduling. So it's really a two-binary setup, and Consul can fuck up your entire service discovery when it goes down.
Multi-Workload Support
This is Nomad's killer feature. You can schedule Docker containers, raw binaries, Java applications, and even QEMU VMs from the same scheduler. Perfect for legacy applications that you can't containerize yet.
I've used this to gradually migrate a legacy Java monolith alongside new microservices. The Java driver lets you deploy JAR files directly without Docker overhead.
Docker, raw binaries, JVMs, QEMU VMs - all managed by the same scheduler. No other orchestrator does this shit.
HCL Configuration
Job specs use HashiCorp Configuration Language instead of YAML. It's like Terraform but for workloads. Variables, conditionals, and loops actually work. No more copying YAML blocks and praying you got the indentation right.
job "web-app" {
datacenters = ["dc1"]
type = "service"
group "web" {
count = 3
task "nginx" {
driver = "docker"
config {
image = "nginx:1.20"
ports = ["http"]
}
resources {
cpu = 500
memory = 256
}
}
}
}
Reasonable Resource Overhead
A Nomad server uses about 100MB of RAM. I've seen Kubernetes control plane nodes eat 2GB+ just sitting there doing nothing. Client nodes add maybe 50MB overhead - way better than K8s worker node overhead.
The Shit That Will Bite You (Reality Check)
Smaller Ecosystem
The Kubernetes ecosystem is massive. Nomad's is... not. Need a specific storage plugin? Probably doesn't exist. Want that cool new observability tool? It has a Kubernetes operator, not a Nomad job.
This matters more than you think. Half the time I spend on Kubernetes deployments is finding and configuring existing tools. With Nomad, I often build solutions from scratch.
Networking Can Be Painful
Nomad doesn't include a networking solution. You need Consul Connect for service mesh, or you're back to managing iptables rules and load balancer configs manually. The CNI integration works but requires external CNI plugins.
Learning Curve Still Exists
Yeah, it's easier than Kubernetes. But it's still not easy. You still need to understand distributed systems concepts, resource scheduling, and networking. The documentation assumes you know what you're doing.
Architecture That Actually Makes Sense
Basic topology
Server nodes (the brains) schedule work onto client nodes (the muscle). Regions organize datacenters geographically.
Server Nodes
are where the brains live. I run 3-5 in production for leader election and state management. They're just Nomad processes with -server
flag. No separate control plane complexity to fuck with.
Client Nodes
run your actual workloads. Any machine can be a client - cloud instances, bare metal, hell I've even used my laptop for testing. Clients register with servers and receive job allocations.
Regions and Datacenters
let you organize things geographically. I run separate regions for us-east and eu-west, with multiple datacenters per region. Cross-region job federation actually works, unlike some other tools I could mention.
IBM Acquisition Impact
As of February 2025, IBM completed its acquisition of HashiCorp for $6.4 billion. The open-source versions remain available, but enterprise pricing is now IBM pricing. If you're planning large deployments, factor in IBM's traditional licensing costs.
The good news: IBM has enterprise connections and deep pockets. The bad news: IBM has that enterprise pricing that makes you want to cry and sales cycles longer than a Kubernetes upgrade.