Comparison
Comparison
Decision Matrix
| Dimension | np | Kubernetes | Nomad | Docker Compose |
|---|---|---|---|---|
| Install size | ~20 MB binary | ~2 GB (control plane) | ~100 MB binary | ~50 MB (Docker) |
| Time to first deploy | < 5 minutes | Hours to days | Minutes (assembly required) | < 5 minutes |
| Recommended nodes | 3-100 | 30-10,000 | 5-500 | 1 |
| Built-in ingress | Traefik (auto) | Requires ingress controller | None | None |
| Built-in service discovery | Consul (auto) | CoreDNS (manual) | Consul (manual) | None |
| Built-in observability | OpenObserve (auto) | Requires separate stack | None | None |
| Health checks | Built-in | Built-in | Built-in | docker healthcheck |
| Rolling updates | Yes | Yes | Yes | No |
| Auto-restart | Yes | Yes | Yes | restart: always |
| Multi-node | Yes | Yes | Yes | With Swarm (complex) |
| Native binary support | Yes | No (containers only) | Yes | No (containers only) |
| Configuration | 1 YAML file | 10+ YAML files per service | Job spec + glue code | docker-compose.yml |
| Learning curve | Minutes | Weeks | Days (assembly) | Minutes |
vs Kubernetes
What K8s does well
Kubernetes is the industry standard for large-scale container orchestration. It has the largest ecosystem, the most integrations, and runs at Google scale.
Where np differs
- No etcd: np uses Consul for both service discovery and configuration.
- No pods: np deploys jobs directly — no abstraction layers.
- No YAML engineering: One
np.yamlvs 10+ Kubernetes manifests per service. - No container requirement: np runs binaries directly. No Dockerfile needed.
- No ops team required: One person can operate a full np cluster.
When to use Kubernetes
- You have 100+ nodes
- You need multi-cloud workload portability
- Your team already knows K8s and has the ops bandwidth
- You need the K8s ecosystem (operators, CRDs, Helm charts)
vs Bare Nomad
What Nomad does well
Nomad is a brilliant scheduler — simple, reliable, and “just works.” It handles binary, Docker, and Java workloads equally well.
Where np differs
np is the battery-included layer on top of Nomad:
| Nomad gives you | np adds |
|---|---|
| Job scheduling | One-command deployment (np deploy) |
| Raw API | Clean CLI with rich output |
| Nothing for ingress | Traefik auto-configured |
| Nothing for logs | OpenObserve auto-configured |
| Nothing for metrics | Unified dashboard |
| Manual Consul setup | Consul auto-bootstrapped |
When to use bare Nomad
- You already have your own ingress, monitoring, and logging stack
- You want full control over every Nomad configuration detail
- You’re integrating Nomad into an existing platform
vs Docker Compose
What Compose does well
Docker Compose is the simplest way to run multi-container apps on a single machine. It’s perfect for development environments.
Where np differs
- Multi-node: Compose is single-node. np spans your entire cluster.
- Health checks: Compose has basic
healthcheck. np has Nomad-native health checks with auto-restart. - Rolling updates: Compose doesn’t do rolling updates. np does.
- Observability: Compose gives you
docker logs. np gives you centralized logs + metrics. - Service discovery: Compose has internal DNS. np has Consul — services find each other across nodes.
When to use Docker Compose
- You’re on a single machine
- It’s for development, not production
- You don’t need health checks, rolling updates, or multi-node
Summary
| Scale | Tool | |
|---|---|---|
| 1 machine | Docker Compose | Right tool |
| 3-100 servers | np | Purpose-built |
| 100+ servers | Kubernetes | Where complexity pays off |