The total cost of self-hosting a Kubernetes cluster on each provider
Managed EKS/GKE/AKS vs self-hosted k3s on each cloud. Control plane fees, node group economics, ingress controller cost, and the real all-in number.
Running Kubernetes in production has three honest cost components: the control plane, the worker nodes, and the operational overhead. Most teams price the worker nodes accurately and badly misjudge the other two.
Let's spec a real workload and price it across the seven providers in the cloudprice catalogue, both managed and self-hosted.
The reference cluster
- 6 worker nodes, 4 vCPU + 16 GB RAM each
- 3 nodes for system pods (CoreDNS, ingress, monitoring), 3 for application workloads
- HA control plane (3 control-plane nodes for self-hosted, or managed)
- Ingress: an external load balancer routing to NGINX Ingress
- Persistent storage: 500 GB across PVs
- Inter-node traffic: ~5 TB/month (chatty service mesh)
- Outbound to internet: ~1 TB/month
AWS EKS
- EKS control plane: $0.10/hour = $73/month
- 6 × m6i.xlarge nodes: 6 × $0.192 = $1.152/hour = $841/month
- Network Load Balancer: ~$25/month + LCUs
- EBS for 500 GB gp3: $40/month
- 1 TB egress: ~$90
- Inter-AZ traffic (3 AZs, chatty mesh): ~$50/month
- CloudWatch + container insights: ~$60
EKS total: ~$1,180/month list. With 3-year RIs on the m6i.xlarge: ~$900/month.
EKS pricing gotcha: extended support
EKS charges $0.50/hour per cluster for "extended support" on Kubernetes versions out of normal support window. That's $365/month per stale cluster, on top of the base $73. Stay current on minor versions.
GCP GKE
- GKE Standard control plane: free (one zonal cluster) or $0.10/hour for regional ($73/month)
- 6 × n2-standard-4 nodes: 6 × $0.194 = $1.165/hour = $850/month
- Cloud Load Balancing: ~$25/month
- Persistent Disk for 500 GB: $50/month
- 1 TB egress: ~$110
- Cloud Logging: ~$10/month (free quota)
- GKE Autopilot alternative: ~$1.20/vCPU/hour, so 6×4 vCPU = $173/hour. Much more expensive than node-based.
GKE Standard total: ~$1,120/month.
GKE has the most generous free tier (one free zonal cluster), which makes it cheap for dev/staging. For production with HA control plane, the pricing is similar to EKS.
Azure AKS
- AKS control plane: free for the "Free" SLA tier ($0), $0.10/hour for "Standard" SLA ($73/month)
- 6 × Standard_D4s_v5 (4 vCPU, 16 GB): 6 × $0.192 = $1.152/hour = $841/month
- Standard Load Balancer: $18/month
- Managed Disk Premium SSD v2 for 500 GB: ~$60/month
- 1 TB egress: ~$80
- Log Analytics: ~$30/month
AKS total: ~$1,100/month.
Self-hosted k3s on Hetzner
- 3 × CPX31 control plane (4 vCPU, 8 GB): 3 × €18 = €54
- 6 × CCX23 workers (8 vCPU, 32 GB AMD EPYC — actually MORE compute than the 4 vCPU AWS option): 6 × €22.50 = €135
- Hetzner Load Balancer: €5.39
- Volume storage 500 GB: €17/month
- Egress: free
- Snapshots / backups: ~€20/month
Hetzner self-hosted k3s total: ~€232/month (~$250).
That's a 4-5x cost reduction versus EKS/GKE/AKS, AND you've actually scaled up the worker capacity (32 GB RAM per node instead of 16 GB, dedicated AMD EPYC instead of shared Xeon).
Operational cost
You're running the control plane. k3s makes this dramatically easier than vanilla k8s — single binary, embedded etcd, automatic certificate management. Realistic ops overhead: 8-15 hours/month for a small cluster, mostly for upgrades and node maintenance.
At $100/hour engineering cost, that's $800-1500/month of effort. Plus the $250 of infra. Total: $1,050-1,750/month.
Compared to EKS at $1,180/month list / $900 with RIs (and 2-4 hours/month of ops): the saving is real but smaller than the raw infra delta suggests once you account for engineering time.
Self-hosted k3s on DigitalOcean
- 3 × s-2vcpu-4gb control plane: $36 total
- 6 × s-4vcpu-8gb-amd workers: $192 total
- Load Balancer: $12
- Block Storage 500 GB: $50
- Backups: $58 (20% of droplet costs)
DO self-hosted total: ~$350/month.
DO also offers DOKS (managed Kubernetes) at $0 for control plane (one cluster free) + worker droplets at standard rates. DOKS at the same spec: ~$300/month. Cheaper than self-hosted on DO and managed. This is rare — usually self-host is cheaper. DO's pricing model on DOKS is essentially "free control plane subsidy".
Self-hosted k3s on Vultr / Linode
Vultr Kubernetes Engine (VKE): control plane free, pay for worker VMs. Similar profile to DOKS. ~$280/month for the equivalent cluster.
Linode LKE (Linode Kubernetes Engine): control plane free, pay for worker Linodes. ~$350/month.
The summary
| Setup | $/month list | Ops hrs/month |
|---|---|---|
| AWS EKS | $1,180 | 2-4 |
| GCP GKE Standard | $1,120 | 2-4 |
| Azure AKS | $1,100 | 2-4 |
| DigitalOcean DOKS | $300 | 4-6 |
| Vultr VKE | $280 | 4-6 |
| Linode LKE | $350 | 4-6 |
| Hetzner self-hosted k3s | $250 | 8-15 |
The non-obvious winners
DOKS, VKE, and LKE are the sleeper hits: managed Kubernetes at a third of EKS/GKE/AKS prices, with very competent control planes. Compliance and feature parity isn't 100% identical (EKS has more deeply integrated IAM, etc), but for most workloads they're equivalent.
The "Hetzner + k3s" combo is the absolute cost-minimum but requires real ops capability. The engineering-time-amortized cost often lands above DOKS for small teams.
Add-ons that aren't in the headline
- Container registry: ECR ~$10/month, GCR free in network, ACR ~$5/month, DOCR $5/month, Harbor self-hosted free.
- Cluster autoscaler / Karpenter: Software is free; you pay for the extra nodes it scales up.
- External-DNS / cert-manager: Free, run on the cluster.
- Service mesh (Istio / Linkerd): Free OSS. Adds 5-15% control-plane CPU overhead.
- Monitoring (Prometheus / Grafana / Loki): Free OSS. Easily 2-4 dedicated nodes' worth of RAM at scale.
For instance-level pricing for k8s worker nodes, the cloudprice catalogue filters by RAM and vCPU. AWS vs Hetzner is the most informative comparison for the worker-node line item. For a quick cost model see the TCO calculator with egress factored in.
External: EKS pricing, GKE pricing, k3s.