PROTOCOL_ID: FO-09 CLASS: COST_ENGINEERING
Kubernetes FinOps & Cost Optimization
We make the cluster bill visible, cut it where the waste actually is, and wire the discipline in so it stays cut.
Difficulty: 2 / 3
Engagement overview
Most Kubernetes bills are not high because the platform is expensive. They are high because nobody can see where the money goes. The invoice arrives per instance while the organisation thinks per team and per application, and in that translation gap over-provisioned requests, idle nodes and forgotten environments accumulate quietly for quarters. The first job is not to cut anything — it is to make spend legible enough that cutting is obvious.
The lever that moves the number most is how nodes get provisioned. Karpenter, a CNCF project, replaces guesswork node groups with pods-first provisioning: it reads what is actually pending, picks the instance type, size and purchase option that fits, and mixes spot with on-demand by policy. Its consolidation loop is the part that compounds — it continuously notices when the same workloads would fit on cheaper or fewer nodes and rebuilds the fleet to match, so the cluster keeps tightening after we leave. Paired with spot capacity for work that tolerates reclaim, that is where the 70-90% per-unit discounts stop being a slide and start being the bill.
Karpenter runs in production on EKS and AKS. It has no OVHcloud or Scaleway provider, and we will tell you that before you ask rather than after you sign. On those platforms we get there through the managed cluster autoscaler tuned against a node-pool design that reflects your real workload mix, rightsizing driven by measured consumption instead of inherited defaults, and preemptible capacity where it is safe. The mechanics differ; the discipline and usually the outcome do not.
Underneath both paths sit the two layers that decide whether any of it lasts. OpenCost allocates real spend down to namespace, controller and pod and exports to Prometheus, so cost sits on the same dashboards as latency and gets an owner rather than a spreadsheet. Kyverno policy holds the line as code: no workload without requests, no instance family you have decided not to pay for, no missing team label. Every one of those controls is a reviewed pull request reconciled by Argo CD, which is what separates a saving that holds from a heroic cleanup that erodes by the next quarter.
Illustrative schematic, not live telemetry
Tools in this engagement
Tools in this engagement
- Kubernetes
- Karpenter
- OpenCost
- Prometheus
- Kyverno
- Argo CD
From assessment to production
- 01
Inform
Deploy allocation and read the real numbers: spend per namespace and workload, request-to-usage ratios, idle capacity, and which environments nobody has looked at in months.
- 02
Rightsizing
Set requests and limits from measured consumption rather than inherited guesses, in recommendation mode first so nothing moves before the numbers are understood.
- 03
Autoscaling and spot
Introduce Karpenter with consolidation and a spot policy matched to workload tolerance — or a tuned managed autoscaler where Karpenter has no provider — after disruption budgets are verified.
- 04
Governance as code
Encode the guardrails in Kyverno and the platform repository so cost posture is reviewed, reconciled and auditable rather than remembered.
- 05
Operate
Hand over dashboards, per-team ownership and anomaly alerting, so the loop runs without us and the saving does not decay.
Ecosystems, tooling, and deliverables
| Target ecosystems |
|
|---|---|
| Tooling |
|
| Deliverables |
|
| Prerequisites |
|
Straight answers
Frequently asked questions
What is Kubernetes FinOps, exactly?
Kubernetes FinOps is the practice of making cluster spend visible, reducible and durable. It follows the FinOps Foundation's Inform, Optimize, Operate loop: allocate spend to the teams and applications that generate it, act on the waste that allocation exposes, then wire the discipline into the platform so the savings do not decay. On Kubernetes it is specific work — requests and limits, autoscaling policy, spot capacity, and namespace-level cost attribution — not a generic cloud cost review.
Why Karpenter rather than the cluster autoscaler?
The cluster autoscaler scales node groups you defined in advance, so your savings are capped by how well you guessed the instance mix. Karpenter provisions nodes to fit the pods that are actually pending, choosing instance type, size and purchase option per workload, and it consolidates — it notices when the same pods would fit on cheaper or fewer nodes and rebuilds the fleet to match. That consolidation loop is where most of the recurring saving comes from, because it keeps working after the engagement ends. The trade-off is churn: nodes are replaced more often, so PodDisruptionBudgets and graceful shutdown have to be right before you turn it on.
We run on OVHcloud or Scaleway. Does Karpenter work there?
No, and we would rather say so up front. Karpenter has production providers for AWS and Azure; there is no OVHcloud or Scaleway provider. On those platforms the cost work is the same discipline through different mechanics: the managed cluster autoscaler tuned against a realistic node-pool design, rightsizing driven by measured consumption rather than inherited defaults, and spot or preemptible capacity where the workload tolerates reclaim. The allocation and governance layers — OpenCost, policy as code — are provider-agnostic and behave identically. In our experience rightsizing alone usually returns more than autoscaler choice does, so the OVHcloud and Scaleway path is not a consolation prize.
How do you monitor Kubernetes costs after the engagement?
Cost becomes a signal on the same dashboards as everything else. OpenCost, a CNCF project, allocates real cloud spend down to namespace, controller and pod, and we export it to Prometheus so cost sits beside latency and error rate rather than in a finance tool nobody on the team opens. From there you get per-namespace spend with an owner, alerts on cost anomalies and idle-resource percentage, and a monthly number each team recognises as theirs. Visibility with ownership is what stops the bill drifting back.
How does GitOps fit into Kubernetes cost optimization?
It is what makes the saving durable rather than seasonal. Autoscaling policy, resource requests, NodePool definitions and cost guardrails all live in the same repository as the rest of the platform, reconciled by Argo CD. A change to the cost posture is a reviewed pull request with an audit trail, not a console edit somebody forgets. Policy as code with Kyverno holds the line underneath: reject workloads with no requests, block the instance families you have decided not to pay for, require the team label that allocation depends on.
Specialist engagements on this
- CN-01 Cloud-Native Consulting & Kubernetes Expertise We stand up Kubernetes that survives real traffic, real failure, and real audits. Discover
- OPS-04 Managed Cloud Operations We hold your platform to its SLOs while your team builds, around the clock. Discover
- PE-02 Platform Engineering Consulting We turn your infrastructure into a product engineers choose, not one they route around. Discover