Short answer: a managed Kubernetes cluster that seriously hosts an SME's applications costs between €80 and €250 excl. VAT per month on OVHcloud or Scaleway, and the free control plane has almost nothing to do with it. The bulk of the bill is three worker nodes (€40 to €150), a load balancer (€12 to €20), block storage for persistent volumes and backups (€10 to €40), plus a series of line items no calculator ever shows: volume snapshots, backup object storage, outbound traffic, public IPs, image registry. Compared with three poorly used VPSes, the cluster is often cheaper at equal load — but only if requests reflect actual consumption.
The question comes up in every pre-sales conversation: "How much is Kubernetes going to cost us?" And the answer given by pricing pages is always wrong, because they advertise a free control plane and an hourly node price, then leave out half the line items. We went back over the real bill for clusters we operate, item by item, to give orders of magnitude you can actually put in a budget. The prices quoted are those published by the providers at the time of writing; they move, so check them before you sign.

The six lines of a managed Kubernetes bill
Let's start with the structure. With every European provider we use — OVHcloud Managed Kubernetes Service, Scaleway Kapsule — the bill always breaks down the same way. What changes is the unit price and the commercial name.
| Line item | Billed? | Monthly order of magnitude |
|---|---|---|
| Control plane (API server, etcd) | Free on OVHcloud and Scaleway Kapsule, paid on AWS EKS | €0 or ~$70 (EKS, $0.10/h) |
| Worker nodes (instances) | Yes, hourly | €40 to €150 for 3 nodes |
| Load balancer / ingress | Yes, per unit | €12 to €20 |
| Block storage (PVC) | Yes, per GB-month | €5 to €25 |
| Object storage (backups, registry) | Yes, per GB-month + requests | €3 to €15 |
| Outbound traffic (egress) | Free on OVHcloud and Scaleway, paid on AWS/GCP | €0 or $0.08–0.09/GB |
First conclusion, and it matters for a French SME: the free control plane and unbilled egress on OVHcloud and Scaleway remove the two most unpredictable items from the bill. On AWS, the EKS control plane at $0.10 per hour per cluster amounts to roughly $73 a month before the first instance, and outbound traffic is billed per GB beyond the free allowance. For a site serving images and videos, that single line can exceed the cost of the nodes.
The multi-environment trap
One cluster per environment (dev, staging, production) multiplies load balancers, minimum nodes and volumes. Across three clusters, the load balancers alone already cost €40 to €60 a month. The practice we apply: one production cluster, one shared cluster for dev and staging, separated by namespaces, resource quotas and NetworkPolicies. On EKS, where the control plane is billed, the saving is even clearer.
The node line: the only one that really counts
Nodes typically account for 60 to 75% of the bill. So that's where sizing is decided, and it can be calculated — not guessed.
Let's start from a realistic SME need: a server-side rendered Next.js application, a Node.js API, an image-processing worker, a PostgreSQL database managed by an operator, plus the tooling (ingress controller, cert-manager, Prometheus, Velero, external-dns).
| Workload | requests.cpu | requests.memory | Replicas |
|---|---|---|---|
| Next.js front end | 150 m | 512 Mi | 3 |
| Node.js API | 200 m | 512 Mi | 2 |
| Image worker | 300 m | 1 Gi | 1 |
| PostgreSQL (primary + replica) | 500 m | 2 Gi | 2 |
| System tooling and monitoring | ~700 m | ~2.5 Gi | — |
Total requested: around 2.9 vCPU and 9 Gi of memory. On top of that come the kubelet reserve and the DaemonSets on each node (CNI, node-exporter, log agent) — count on 10 to 15% of CPU and a few hundred MiB per node being non-allocatable.
Three nodes at 4 vCPU / 8 Gi provide 12 vCPU and 24 Gi raw, i.e. roughly 10 vCPU and 21 Gi allocatable. The load fits with a whole node's worth of headroom: exactly what you need to survive the loss of a node or a rolling upgrade without pods sitting in Pending.
The rule we apply: the sum of production
requestsmust fit on N-1 nodes. Below that, a Kubernetes version upgrade becomes an incident. Above it, you're paying for a node you don't use.
On OVHcloud, three general-purpose instances at 4 vCPU / 8 GB sit around €25 to €35 excl. VAT per month each depending on the range (B3, D2, C3), i.e. €75 to €105 for all three. On Scaleway, the DEV and PLAY2/PRO2 ranges get you to €20 to €40 per node depending on the CPU/RAM ratio. In both cases billing is hourly: a node deleted at noon isn't billed for the afternoon, which makes ephemeral pools economically real.
Three settings that change the node line
- Two separate pools. A
systempool of small nodes (2 vCPU / 4 Gi) for ingress, monitoring and cert-manager, tagged and protected withnodeSelector. An autoscaledappspool for application workloads. The system pool never moves, the application pool breathes. - Cluster autoscaler with an honest floor.
minNodes: 2on the application pool during the week, not 5 "just in case". The autoscaler adds a node in 2 to 4 minutes on OVHcloud and Scaleway; if your traffic ramps faster than that, it's up to HPA and KEDA to take over with pods already warm, not to permanently oversized nodes. - Measured
requests, not copy-pasted ones. A reflexiverequests.cpu: 1on six deployments means 6 vCPU reserved and billed for actual consumption of 0.8 vCPU. Measure over a week with Prometheus, then readjust: it's the only cost optimisation that degrades nothing.
The invisible lines: storage, snapshots, egress, IPs
This is where budgets go off the rails, because nobody plans for them.

Block storage. PVCs are billed per provisioned GB, not per GB used. A 100 Gi volume that's 8% full costs 100 Gi. On OVHcloud and Scaleway, high-performance block storage sits around €0.08 to €0.10 excl. VAT per GB per month; "classic" storage drops towards €0.04. For an SME cluster: 50 Gi for Prometheus, 50 Gi for PostgreSQL, 20 Gi miscellaneous, i.e. 120 Gi → €5 to €12 a month. Modest, but it grows quietly: every deleted StatefulSet leaves its PVC behind if the reclaimPolicy is Retain. We audit orphaned PVCs once a quarter, and it's invariably 20 to 80 Gi billed for nothing.
Snapshots and backups. A volume snapshot is stored and billed. A Velero backup policy keeping 30 days of daily snapshots of 120 Gi of volumes can exceed the cost of the volumes themselves. The good practice is the one we describe in the article on Kubernetes backups with Velero: application-level backups (compressed PostgreSQL dumps) to cheap object storage for long retention, volume snapshots for short retention only. S3-compatible object storage runs at around €0.01 excl. VAT per GB per month with both French providers — an order of magnitude below block storage.
Load balancer. A managed load balancer costs €12 to €20 excl. VAT per month, sometimes more with a second IP or multi-zone setup. The common mistake: one Service of type LoadBalancer per application. Five exposed applications = five load balancers = €60 to €100 a month, for a job that a single ingress controller or a single Gateway does perfectly well. One entry point, host- and path-based routing: that's exactly what the Gateway API with Kong or Traefik gives you.
Outbound traffic. Free or very generously included on OVHcloud and Scaleway, billed on AWS and GCP beyond the allowance. A site serving 2 TB of images a month from EKS pays roughly $160 to $180 in egress — more than its nodes. If your workload is outbound and heavy, the choice of provider is decided on this line before any other consideration.
Image registry. Docker images take up space and generate traffic. A self-hosted GitLab registry or the provider's offering is billed per GB stored. Three builds a day with no cleanup policy, and the registry weighs 200 GB in six months. A retention rule (keep the last 10 tags plus semantic tags) solves the problem; see our guide on images from a private GitLab registry.
Three typical bills, in euros
Here are the orders of magnitude we use when quoting, excluding operations services and excluding a managed database.
| Line item | Small cluster (1 app, staging included) | Standard SME cluster | Multi-app cluster |
|---|---|---|---|
| Nodes | 2 × 2 vCPU/4 Gi → ~€30 | 3 × 4 vCPU/8 Gi → ~€90 | 5 × 4 vCPU/8 Gi → ~€150 |
| Load balancer | 1 → €13 | 1 → €13 | 2 → €26 |
| Block storage | 40 Gi → €4 | 120 Gi → €11 | 300 Gi → €27 |
| Object storage (backups) | 50 GB → €1 | 200 GB → €3 | 500 GB → €6 |
| Registry + miscellaneous | €3 | €6 | €12 |
| Monthly total excl. VAT | ~€51 | ~€123 | ~€221 |
These figures assume a free control plane and unbilled egress. Transposed to AWS EKS, you have to add roughly $73 for the control plane, the cost of the EC2 instances and NAT Gateway, plus egress: the same workload easily more than doubles.
For an honest comparison: the database. A managed PostgreSQL cluster at 2 vCPU / 8 GB with a replica and PITR on OVHcloud or Scaleway costs €100 to €200 a month, as much as the entire cluster. We detailed this trade-off in the article on PostgreSQL on Kubernetes versus a managed database: the right answer depends on who restores it at 3 a.m., not on the sticker price.

Measure before you optimise
Cost optimisation without measurement is a gamble. Two tools are enough.
Native metrics. If you already have Prometheus and Grafana on the cluster, you have the data. The ratio that matters is requests versus actual usage:
sum(kube_pod_container_resource_requests{resource="cpu"})
/ sum(rate(container_cpu_usage_seconds_total{container!=""}[7d]))
A ratio above 4 means you're reserving — and paying for — four times what you consume. Between 1.5 and 2.5 is healthy: there's still headroom for spikes without structural waste.
Kubecost or OpenCost. OpenCost, a CNCF project, computes a cost per namespace, deployment and label from requests and a price list you supply. It's the simplest way to answer "how much does client X's application cost" when several projects share a cluster. Allow half a day to install it and calibrate the price list on an OVHcloud or Scaleway cluster, since the default rates are the hyperscalers'.
One detail that matters for accounting: these tools reason in requests, not usage. That's the right reference point, because it is indeed the reservation that triggers adding a node and therefore the bill.
What isn't worth the detour
- Spot/preemptible instances for production. They cut node costs, but they impose interruption-tolerance work that few SME applications justify. For a pool of idempotent batch workers, yes. For the front end, no.
- Scaling the production cluster down at night. Saving 8 hours of nodes per night on €90 of nodes is €30 a month against the risk of a cold start in the morning. On the dev/staging cluster, though, it's pure gain: a
CronJobthat takes the pool down to 0 nodes from 8 p.m. to 8 a.m. and at weekends removes nearly 70% of billed hours. - Switching provider to save €15. The cost of migrating (CI/CD, DNS, storage, restore tests) far exceeds the saving. You move for a technical or contractual reason, not for a marginal discount.
Frequently asked questions
Does a Kubernetes cluster cost more than three VPSes?
At equal raw capacity, slightly — the load balancer and object storage are extra. At equal useful load, often less, because the cluster densifies: six applications share three nodes instead of occupying six VPSes each sized for its own peak. Kubernetes's real extra cost isn't on the cloud bill, it's in operations time: version upgrades two or three times a year, chart maintenance, keeping an eye on CVEs.
Does the free control plane hide any limits?
It's sized by the provider according to the number of nodes and it isn't infinitely scalable. On free offerings, the API server may be rate-limited: a chatty operator or a looping controller will feel it. That's an argument for not piling up non-essential operators, not for paying for a control plane.
How do I budget a cluster for a full year?
Take the monthly total excl. VAT for your profile, add 20% for storage and backup growth over twelve months, then a separate line for operations. Annual commitments (reserved instances, volume discounts) are worth it once the architecture has stabilised, not on a cluster that's three months old.
Who should watch the bill?
Someone, by name. We set a budget alert with the provider at 120% of the expected amount, plus a quarterly review of orphaned PVCs, unused load balancers, out-of-retention snapshots and registry images. One hour per quarter, for 20 to 30% of recurring savings in most of the cases we take over.
In summary
- A managed SME Kubernetes cluster costs €80 to €250 excl. VAT per month on OVHcloud or Scaleway: nodes, one load balancer, block storage, object storage and registry.
- The free control plane and unbilled egress with the French providers remove the two most volatile lines; on AWS EKS, add ~$73 for the control plane plus outbound traffic.
- Nodes account for 60 to 75% of the bill: size things so that production
requestsfit on N-1 nodes, with a fixed system pool and an autoscaled application pool. - The forgotten lines are orphaned PVCs, out-of-retention snapshots, load balancers multiplied per application and registry images that are never cleaned up.
- Measure the
requests/ actual usage ratio with Prometheus or OpenCost before any optimisation: above 4, you're paying four times your consumption. - Night-time downscaling is worth it on dev/staging, not in production; spot instances only suit idempotent workers.
Need a quote for your actual context, or a bill audit on an existing cluster? Our team runs these platforms day in, day out: take a look at our infrastructure and operations services, our approach to application development, or write to us directly via the contact page.


