Skip to main content
K8sCalc
kubernetes4 May 2026

Self-Hosted vs Managed Kubernetes: True Cost Breakdown (2026)

A full total-cost-of-ownership comparison between self-hosted Kubernetes on Hetzner and managed services like AWS EKS, GKE, and DigitalOcean DOKS — including engineer time.

The "managed Kubernetes is expensive" conversation usually stops at the control plane fee. That's the wrong place to stop. The real question is total cost of ownership: infrastructure, egress, managed services markup, and most importantly, engineer time. This post breaks it all down with real numbers for a representative production workload.

Scenario: A mid-size production cluster running 10 services — 3 control plane nodes (HA), 6 worker nodes (4 vCPU / 16 GB each), 2 TB persistent storage, and a basic observability stack. Moderate traffic, ~99.9% uptime requirement.


Monthly Infrastructure Cost Comparison

AWS EKS

ComponentSpecCost/mo
EKS control plane fee$73
Worker nodes (6x m5.xlarge)4 vCPU / 16 GB$828
EBS storage (2 TB gp3)2,000 GB$160
NAT Gateway2 AZs$65
Load Balancer (ALB)1 ALB$25
Data transfer (100 GB egress)$9
Total~$1,160/mo

Google GKE (Standard mode)

ComponentSpecCost/mo
GKE control plane fee (Std)$73
Worker nodes (6x n2-standard-4)4 vCPU / 16 GB$780
Persistent Disk SSD (2 TB)2,000 GB$200
Cloud NAT$35
Load Balancer1 L7$20
Egress (100 GB)$12
Total~$1,120/mo

DigitalOcean DOKS

ComponentSpecCost/mo
Control plane fee$0
Worker nodes (6x s-4vcpu-16gb)4 vCPU / 16 GB$720
Block storage (2 TB)2,000 GB$200
Load Balancer1$12
Total~$932/mo

Hetzner Cloud (Self-Managed, kubeadm)

ComponentSpecCost/mo
Control plane nodes (3x CPX31)4 vCPU / 8 GB$29
Worker nodes (6x CPX41)8 vCPU / 16 GB$120
Hetzner Volume storage (2 TB)2,000 GB$82
Load Balancer1 LB5$7
Private network$0
Total~$238/mo

Use the Hetzner Kubernetes Cost Calculator and Kubernetes Cluster Cost Calculator to model your specific configuration.


Adding Engineer Time: The Number Everyone Ignores

Self-managed Kubernetes has ongoing operational overhead that doesn't show up in an infrastructure invoice. Here's a realistic estimate for a team maintaining a production cluster:

TaskManaged K8s (hrs/mo)Self-Hosted (hrs/mo)
Control plane upgrades0 (automated)2–4
etcd backup management0 (managed)1–2
Certificate rotation0 (managed)0.5–1
Node OS patching1–23–6
Networking troubleshooting2–44–8
Incident response (infra layer)1–23–6
Total hours/mo4–8 hrs13–27 hrs

At a loaded engineer cost of $100/hr (mid-level SRE/DevOps), that translates to:

OptionInfra CostEngineer Time (median)True Monthly Cost
AWS EKS$1,160$600 (6 hrs)~$1,760
GKE Standard$1,120$600 (6 hrs)~$1,720
DOKS$932$600 (6 hrs)~$1,532
Hetzner (self-managed)$238$2,000 (20 hrs)~$2,238

At median estimates, managed Kubernetes is cheaper once you include labor. That result surprises many people who look only at infrastructure spend.


When Self-Hosted Wins

Despite the above numbers, there are cases where self-hosted is clearly the right call:

1. You already have the operations capability. If your team runs self-hosted Kubernetes today and has internal tooling (Ansible, Terraform, runbooks), the marginal cost of another cluster is close to zero in labor. The table above assumes starting from scratch.

2. You're at significant scale. At 50+ nodes, the managed control plane fee ($73/mo) is trivial, but the per-node pricing on managed services becomes painful. A 50-node EKS cluster costs ~$7,000/month in EC2 alone. An equivalent Hetzner setup costs ~$1,200/month. The labor cost of ~$2,000/month doesn't close that gap.

3. Data residency or compliance requirements. Hetzner is EU-based (Frankfurt, Helsinki, Nuremberg, Falkenstein). If you need data to stay in the EU without paying AWS/GCP EU-region premiums, self-hosted on Hetzner is the clearest path.

4. You want to avoid vendor lock-in on storage and networking. Managed K8s providers deeply integrate their storage classes, load balancers, and networking into the cluster. Migrating later is painful. Self-hosted clusters using Longhorn and MetalLB are more portable from day one.


When Managed Kubernetes Wins

1. Small teams (< 3 engineers). You simply don't have the bandwidth to maintain infrastructure. A managed control plane means you never deal with etcd cluster failures, expired certificates, or botched upgrades at 2 AM.

2. You need SLAs. AWS EKS, GKE, and DOKS all publish SLAs for control plane availability. Self-hosted Kubernetes has no SLA — you are the SLA.

3. You rely on cloud-native integrations. IAM roles for service accounts (IRSA on EKS), GKE Workload Identity, and native Secret Manager integrations are genuinely useful. Replicating them on self-hosted clusters requires additional tooling (Vault, external-secrets-operator, etc.).

4. You're running in one region of a major cloud already. If your RDS, ElastiCache, and S3 are all in AWS us-east-1, running your Kubernetes cluster there too eliminates egress costs and cross-region latency. Moving to Hetzner introduces cross-provider egress fees that can erase the savings.


The Hybrid Approach

Many mature teams run a hybrid: managed Kubernetes for production (fewer incidents, SLA-backed), and self-hosted on Hetzner for staging, development, and CI (cheap, disposable).

EnvironmentPlatformReason
ProductionEKS / GKESLA, ops simplicity, integrations
StagingDOKS or Hetzner kubeadmCost, no SLA needed
Dev / CIHetzner k3sCheap, fast to spin up

This approach lets junior engineers learn Kubernetes without touching production, and keeps your cloud bill predictable.

The k3s Resource Calculator and Hetzner k3s Cost Calculator are useful for sizing dev and CI clusters on Hetzner.


Summary Decision Tree

Do you have a dedicated ops/SRE team?
├── No → Use managed Kubernetes (EKS, GKE, or DOKS)
└── Yes → How many nodes?
    ├── < 20 nodes → Managed is likely cheaper (TCO)
    └── > 20 nodes → Self-hosted on Hetzner saves money
        └── Are you EU-only? → Hetzner is ideal
        └── Need cloud integrations? → Managed may still win

There's no universally correct answer. Model your specific workload with the Kubernetes Cluster Cost Calculator and add your team's hourly cost. The math usually makes the right answer obvious.