Kubernetes vs Nomad vs Docker Swarm
Tiga orchestrator saya operate paralel 30 bulan di BUMN energy + fintech Jakarta. Kubernetes (GKE) untuk core production. Nomad untuk batch + edge cluster regional. Docker Swarm hanya untuk legacy lab. Verdict per skala + ops capacity.
TL;DR
- Kubernetes (GKE managed atau Rancher self-host): default enterprise. Ekosistem unmatched.
- Nomad: alternative simpler untuk batch + multi-region edge. Tidak menggantikan K8s untuk core production di 2026.
- Docker Swarm: legacy only. Skip untuk greenfield.
- Platform abstraksi (Fly.io, Railway, Cloud Run): cocok untuk SMB < 10 service yang mau skip K8s overhead.
- Verdict: Conditional — Kubernetes default, Nomad niche, Swarm phase-out.
Konteks
Saya operate orchestrator paralel 30 bulan (Desember 2023 - Mei 2026) di:
- Fintech series-B Jakarta: GKE managed asia-southeast2 (Jakarta) untuk core production + GKE Singapore untuk DR (active-passive)
- BUMN energy Jakarta: Rancher self-host on-prem 2 cluster (primary di Pusat Data Cibitung, DR di Pusat Data Tangerang)
- Eval Nomad: 6 bulan untuk multi-region batch workload di fintech, hasilnya stable, pakai untuk batch saja (bukan replace K8s core)
- Docker Swarm: legacy stack di BUMN (1 cluster) — migrate ke Rancher dalam 2025
Pengalaman Kubernetes total: 7 tahun (sejak 1.10 era). Nomad: 1,5 tahun. Docker Swarm: 4 tahun (legacy maintenance).
Pricing (Juni 2026)
GKE Autopilot (Jakarta)
- Control plane: USD 0,10/hour per cluster = USD 73/bulan/cluster
- Pod compute: per-second billing CPU + memory
- Saya pakai 1 cluster production + 1 cluster staging
- Workload aktual fintech: 18 service × 3 pod average × resource request
- Total: ~Rp 18-25 juta/bulan compute + control plane
GKE Standard (Singapore DR)
- Control plane: USD 0,10/hour
- Node group: managed instance group, charged per VM hour
- 30% capacity standby
- Total: ~Rp 8 juta/bulan
Rancher self-host (BUMN on-prem)
- Software gratis (Rancher OSS)
- Hardware on-prem (sudah ada budget BUMN, tidak terhitung di OPEX bulanan)
- Ops engineer 2 FTE dedicated × Rp 25 juta = Rp 50 juta/bulan
- Plus license Rancher Enterprise (optional, ada di BUMN saya): USD 17.000/tahun = Rp 22 juta/bulan equivalent
Nomad self-host
- Software gratis (HashiCorp)
- Eval cluster 3-node e2-medium GKE: Rp 2,1 juta/bulan
- Untuk batch workload yang scale di-bawah K8s primary
Total orchestration
| Item | Cost/bulan fintech | Cost/bulan BUMN |
|---|---|---|
| GKE Autopilot Jakarta + Singapore DR | Rp 28-33 juta | — |
| Rancher self-host (license + ops) | — | Rp 72 juta |
| Nomad eval (fintech) | Rp 2,1 juta | — |
| Total | Rp 30-35 juta | Rp 72 juta |
GKE managed jauh lebih murah dari Rancher self-host kalau hitung ops time. BUMN context: Rancher self-host karena mandat on-prem regulasi, bukan pilihan optimal economic.
SLO + performance (30 bulan)
Kubernetes GKE managed
| Metrik | Target | Realisasi |
|---|---|---|
| API server availability | 99,95% | 99,98% (Google SLA) |
| Pod scheduling latency p99 | < 8 detik | 4-6 detik |
| Pod start time (image cached) | < 15 detik | 8-12 detik |
| Cluster upgrade downtime | 0 (rolling) | 0 |
| etcd read latency p99 | < 50ms | managed (vendor) |
| Node ready transition p99 | < 90 detik | 70-85 detik |
| HPA scale-up latency | < 30 detik | 20-28 detik |
Rancher self-host on-prem
| Metrik | Target | Realisasi |
|---|---|---|
| API server availability | 99,9% | 99,82% |
| Pod scheduling latency p99 | < 12 detik | 7-12 detik |
| Cluster upgrade window | 4 jam | 6-9 jam (manual coordination) |
| etcd read latency p99 | < 80ms | 45-70ms |
| Node ready transition p99 | < 180 detik | 120-180 detik |
Nomad batch cluster
| Metrik | Target | Realisasi |
|---|---|---|
| Job dispatch latency p99 | < 5 detik | 2-3 detik |
| Allocation start time p99 | < 30 detik | 18-25 detik |
| Cluster availability | 99,9% | 99,94% |
Nomad scheduling lebih cepat dari K8s untuk batch (simpler scheduler logic). K8s scheduler complexity worth-nya untuk feature breadth (affinity, taint, topology, custom scheduler), bukan untuk speed.
Capability comparison
| Capability | Kubernetes | Nomad | Docker Swarm |
|---|---|---|---|
| Container orchestration | ya | ya | ya |
| VM/exec/Java orchestration | tidak | ya | tidak |
| Service discovery | ya (CoreDNS) | ya (Consul) | ya (built-in) |
| Ingress/Load balancer | ya (Ingress, Gateway API) | via Consul + Traefik | ya (routing mesh) |
| Network policy | ya (Calico, Cilium) | terbatas | tidak |
| Storage orchestration | ya (CSI, PV/PVC) | ya (CSI) | ya (volume driver) |
| ConfigMap / Secret | ya | ya (via Vault) | secret ya |
| Auto-scaling horizontal | ya (HPA, KEDA) | ya | ya (terbatas) |
| Auto-scaling cluster | ya (cluster autoscaler) | ya (Auto Scaler) | tidak |
| Multi-region | ya (federation/multicluster) | ya (built-in superior) | tidak |
| RBAC | ya | ya (via ACL) | sederhana |
| GitOps tooling | mature (ArgoCD, Flux) | terbatas (Levant) | sederhana |
| Service mesh | ya (Istio, Linkerd) | via Consul | tidak |
| Operator pattern | ya | tidak (job templates) | tidak |
| Ekosistem tooling | terbesar | sedang | menurun |
| Operational complexity | tinggi | sedang | rendah |
| Hiring ease Indonesia | medium-baik | rendah | rendah |
Multi-region
Nomad menang untuk multi-region deployment natural. K8s federation (KubeFed) complex, sering ditinggalkan untuk multi-cluster + GitOps pattern. Untuk geographic distributed workload, Nomad lebih natural.
K8s saya jalankan multi-cluster (Jakarta + Singapore) dengan ArgoCD ApplicationSets untuk sync, bukan federation.
Trade-off arsitektural
Pilih Kubernetes kalau:
- Production enterprise dengan 8+ microservice
- Butuh ekosistem matang (service mesh, observability, GitOps, operator)
- Tim platform engineering 2+ FTE atau pakai managed (GKE/EKS/AKS)
- Hiring engineer K8s di Indonesia (pool moderate, gampang)
- Skala growth target (siap scale ke 100+ service)
Pilih Nomad kalau:
- Batch workload dominant (data pipeline, ML training, scheduled job)
- Multi-region geographic distribution wajib
- Tidak butuh ekosistem K8s deep
- Ops complexity preference: medium
- Mixed workload (container + VM + Java direct exec)
Pilih Docker Swarm kalau:
- Maintain legacy stack dengan plan migrate
- Lab atau staging single-VM
- Tidak untuk greenfield 2026
Pilih platform abstraksi (Fly.io, Cloud Run, Railway) kalau:
- SMB < 10 service
- Tim engineering < 5 dev
- Ops capacity minimal (no platform engineer)
- Speed-to-market matter
High availability + DR
GKE Multi-region pattern
Jakarta cluster (primary)
├── 3 zone (asia-southeast2-a, b, c)
├── etcd managed regional
└── workload distributed across zone
Singapore cluster (DR active-passive)
├── 3 zone
├── 30% capacity standby
└── ArgoCD sync from Git source
└─ failover via DNS + ArgoCD apply
- RPO: 5 menit (Postgres + R2 storage replication)
- RTO: 15-25 menit untuk regional failover
- Failover test quarterly via chaos engineering drill
Rancher on-prem HA
- Primary: Pusat Data Cibitung (3 master + 12 worker)
- DR: Pusat Data Tangerang (3 master + 8 worker, 60% capacity)
- Latency Cibitung ↔ Tangerang: ~3-5ms (fiber dedicated)
- RPO: 15 menit (etcd backup ke S3 lokal)
- RTO: 30-45 menit manual coordination
Nomad multi-region
Native multi-region first-class. 1 Nomad federation across 3 region: 30 detik scheduling propagation, RPO 0.
Migration risk
Docker Swarm → Kubernetes
Saya jalankan di BUMN 2025: 8 service Swarm → Rancher.
- Translate docker-compose.yml ke K8s manifest (Kompose tool partially work)
- Refactor secret management (Swarm secret → K8s secret + Sealed Secret atau External Secret)
- Refactor networking (Swarm routing mesh → Ingress + NetworkPolicy)
- Total elapsed: 14 minggu, 2 engineer
Pain point: stateful workload (Postgres di Swarm) butuh redesign dengan StatefulSet + PVC. 4 minggu effort untuk 1 cluster Postgres.
K8s on-prem → GKE managed
Lebih simpel. ArgoCD sync ke target cluster, validate per workload, cutover via DNS. 6-8 minggu untuk 18 service.
Nomad → Kubernetes (atau sebaliknya)
Tidak common. Job spec berbeda total. Lebih masuk akal untuk re-architect daripada migrate langsung.
GitOps pattern
Saya pakai pattern same di K8s + Nomad:
Git repository (Helm chart atau Nomad job spec)
│
├── ArgoCD (K8s) watch ─→ apply to target cluster
│
└── Levant/Waypoint (Nomad) watch ─→ deploy to Nomad
GitOps di K8s mature (ArgoCD + Flux). GitOps di Nomad lebih primitif tapi workable.
Common pitfall
- Resource request/limit kosong. K8s default 0 = pod bisa cannibalize node. Setup resource request realistic + limit guard. Audit dengan
kubectl describe+ Vertical Pod Autoscaler recommendation. - No PodDisruptionBudget. Cluster upgrade kill pod tanpa PDB = downtime workload. Setup PDB minAvailable 1 minimum per service.
- etcd unmanaged backup. Self-host K8s tanpa etcd backup periodik = single point of failure. Cron backup ke S3 lokal + test restore quarterly.
- Storage class default tidak HA. Default GCE-PD / EBS tier-1 single-zone. Untuk stateful workload: regional persistent disk atau storage class multi-zone explicit.
- Ingress controller single replica. Ingress = entry point traffic. Replica 1 = SPOF. Minimum 3 replica + PDB.
Cost of ownership 36 bulan
Skenario: 18 microservice enterprise, multi-region HA.
| Item | GKE managed | Rancher on-prem | Nomad self-host all |
|---|---|---|---|
| License/SaaS 3 tahun | Rp 0 | Rp 792 juta (Rancher Enterprise) | Rp 0 |
| Compute/infra | Rp 1,1 miliar | Rp 360 juta (hardware amortized) | Rp 480 juta |
| Ops time engineer | Rp 360 juta | Rp 1,8 miliar (2 FTE 3 tahun) | Rp 720 juta |
| Migration/setup | Rp 80 juta | Rp 240 juta | Rp 120 juta |
| Incident attributed to orchestrator | Rp 24 juta | Rp 95 juta | Rp 38 juta |
| Total 3 tahun | Rp 1,56 miliar | Rp 3,29 miliar | Rp 1,36 miliar |
GKE managed 50% lebih murah dari Rancher on-prem (utamanya karena ops overhead). Nomad pure paling murah, tapi feature limitation untuk core production K8s.
BUMN context: Rancher on-prem mahal tapi non-negotiable karena regulasi sektoral. Fintech context: GKE managed obvious choice.
Indonesia specific
Data residency
GKE asia-southeast2 (Jakarta) memenuhi UU PDP. Untuk fintech regulated: bind workload + persistent data ke region Jakarta, replication ke Singapore untuk DR (replication intra-Asia-Pacific dianggap acceptable oleh OJK selama primary di Indonesia).
Untuk BUMN dengan mandat strict on-prem (sektor energy, pertahanan): Rancher self-host di pusat data Indonesia.
Hiring + training
Senior K8s engineer di Jakarta pool moderate. Kompensasi Rp 35-55 juta/bulan untuk senior platform engineer. CKA / CKAD certification umum, training di Indonesia: meetup KubeCon Jakarta tahunan + provider local training (Mirantis, Skillsoft).
Nomad engineer di Jakarta scarce. Lebih masuk akal train K8s engineer existing ke Nomad (2-3 minggu ramp-up).
Compliance audit
K8s audit log → Splunk via Fluentbit + OJK retention 7 tahun. Setup audit policy granular: Metadata level untuk noise reduction, RequestResponse level untuk sensitive resource (Secret, ServiceAccount).
Yang surprising
Setelah 30 bulan: GKE Autopilot Jakarta ternyata mature lebih cepat dari ekspektasi. Saya start dengan GKE Standard di 2023, switch ke Autopilot di Q3 2024. Ops time turun ~40% (no node management, automatic right-sizing). Cost compute justified lebih tinggi 15-20% tapi worth ops saving.
Surprise lain: Nomad ternyata sangat happy untuk batch workload. Kami jalankan ML training + data pipeline di Nomad federation 3-region (Jakarta, Singapore, US-east), latency scheduling 2-3 detik consistent. K8s equivalent (KubeFed) saya pernah test, abandoned karena complexity.
Verdict
Conditional dengan rule konkret:
- Default enterprise Indonesia core production: Kubernetes (GKE Autopilot untuk speed, Rancher self-host kalau on-prem mandate).
- Batch + multi-region edge: Nomad sebagai complement, bukan replacement.
- SMB < 10 service: skip K8s, pakai platform abstraksi (Cloud Run, Fly.io). K8s overhead tidak justify.
- Skip Docker Swarm untuk greenfield. Maintain only kalau ada legacy investment, plan migrate dalam 12-18 bulan.
Threshold konkret untuk adopt K8s: 8+ service + tim platform engineer 1+ FTE (atau pakai managed) + budget Rp 15-30 juta/bulan untuk cluster + monitoring + ekosistem. Di bawah ini, K8s = over-engineering.
Ditulis oleh Asti Larasati