Skip to content
NewKubeOn AI: a managed LLM gateway with cost per 1M tokens for every model
All articles

Kubernetes

Pricing Kubernetes in your own data center

Clusters on hardware you own have no bill, so their cost never reaches the teams that use them. How to build a rate card from purchase price, power, space and support, and allocate it like any cloud bill.

KubeOn Engineering

October 8, 20265 min read

Cloud clusters arrive with a bill attached. Clusters in your own data center don't: the servers were bought years ago from a capital budget, the power is on a facilities invoice, the rack space is a lease, and the support contract renews once a year. None of it reaches the team that runs a namespace on the cluster, so data center capacity looks free, and free capacity gets used generously.

The fix is not a different allocation method. It is a price. Give every node an hourly cost, and everything that works for cloud clusters (allocation, idle cost, rightsizing, chargeback) works here too.

Four inputs to a rate card

InputHow to turn it into a monthly cost per server
HardwarePurchase price divided by the depreciation period in months (often 36 to 60)
PowerAverage IT power in kW x facility overhead (PUE) x hours in the month x price per kWh
SpaceRack or floor cost for the server's share of the rack
Support and softwareHardware support, operating system and virtualization licences, per server per month

Power is the input most often under-counted. Servers are only part of a data center's load: cooling, power distribution and lighting add to it. The industry measures this as power usage effectiveness (PUE), total facility power divided by IT power. Uptime Institute's 2024 global survey put the average at 1.56, essentially unchanged for several years (Uptime Institute, Global Data Center Survey 2024). If your facility doesn't measure its own, 1.56 is a defensible starting point.

A worked example

One general-purpose server, bought for $40,000 and depreciated over 48 months, with 64 vCPU and 512 GiB of memory. It averages 0.6 kW, power costs $0.15 per kWh, and space and support come to $150 a month.

Monthly cost of one server
hardware  = 40,000 / 48                    = 833.33power     = 0.6 kW x 1.56 x 730 h x 0.15   = 102.49space and support                          = 150.00total                                      = 1,085.82 per month

Split it 50/50 between CPU and memory, as in the cloud, and divide by capacity and hours:

RateCalculationResult
Per vCPU-hour542.91 / 64 vCPU / 730 h$0.0116
Per GiB-hour542.91 / 512 GiB / 730 h$0.00145
Illustrative numbers. GPU servers get their own GPU-hour rate the same way, from the GPU server's price, power draw and support.

Two things follow. First, a team running 16 vCPU of requests around the clock on this cluster now has a cost: about $136 a month, before memory. Second, the cluster's idle capacity has a cost too, which turns "we have spare servers" into a number someone can weigh against the next hardware order.

Unit rates or amortized hardware

There are two ways to express the result. Unit rates per vCPU-hour, GiB-hour and GPU-hour are simple and match how cloud prices are quoted. Amortized hardware, the purchase price and monthly costs attached to the nodes they cover, keeps the link to the actual assets, which is useful when finance wants the rate card to add up to the depreciation schedule. KubeOn's rate card accepts either, matched to nodes by pool or label:

rate-cards/dc1-standard.yaml
# rate-cards/dc1-standard.yamlapiVersion: kubeon.io/v1kind: RateCardmetadata:  name: dc1-standardspec:  currency: USD  effectiveFrom: "2026-01-01"  # Option 1: unit rates, per node pool or node label  rates:    - match: { nodeLabel: "node.kubernetes.io/pool=general" }      vcpuHour: 0.0312      memoryGiBHour: 0.0041    - match: { nodeLabel: "node.kubernetes.io/pool=gpu" }      vcpuHour: 0.0312      memoryGiBHour: 0.0041      gpuHour: 1.18  storage:    - storageClass: ceph-rbd      gibMonth: 0.06  # Option 2: amortized hardware, spread across the nodes it covers  hardware:    - match: { nodeLabel: "kubeon.io/rack=r12" }      purchasePrice: 184000      depreciationMonths: 48      monthly:        power: 1450        space: 900        support: 610

Keep it honest

  • Date every rate card. A new support contract or power price changes next month's rates, not last year's.
  • Review it yearly with finance. The rate card is the invoice for these clusters; it should be as defensible as one.
  • Keep idle visible. Owned hardware that sits unused is still depreciating. Report it, so capacity planning sees it.
  • Compare like for like. When you compare on-premises and cloud costs, include the same things on both sides: support, power and staff time are part of the data center number, and commitments and data transfer are part of the cloud one.

Who does what

How data center clusters are priced

  1. 01

    Prices

    Rate cards per node pool or label (vCPU-hour, GiB-hour, GPU-hour, storage GiB-month), or hardware purchase price over a depreciation period plus power, space and support.

    Your rate card

  2. 02

    Cluster snapshots

    A Kubernetes service account and a scoped token, or object storage credentials for an S3-compatible store such as MinIO or Ceph.

    Agent in each cluster

  3. 03

    The hub

    KubeOn Cloud, or a self-hosted hub on your own Kubernetes with images from your private registry and no internet egress.

    KubeOn Cloud or your network

  4. 04

    Allocate + reconcile

    The hub joins hourly snapshots with your rates and allocates each node's cost to the pods, teams and labels that ran on it.

    KubeOn hub

KubeOn never changes your clusters. With a self-hosted hub, no data leaves your network.

Read the workflow
How a data center cluster gets priced and allocated in KubeOn. With a self-hosted hub, no data leaves your network.
Which depreciation period should we use?

The one finance uses for the asset, so the rate card agrees with the books. If servers stay in service after they are fully depreciated, decide explicitly whether their hardware cost drops to zero or stays at a replacement rate.

Should staff time be in the rate?

Include it if you want a full comparison with managed cloud services; leave it out if the goal is only to make capacity visible to the teams using it. Either way, say which you chose.

What about clusters on VMware or OpenShift?

The same method applies to the hosts underneath. Price the hosts, then let the rate card apply to the Kubernetes nodes that run on them, by pool or label.

Does KubeOn need internet access for this?

No. A self-hosted hub can run in an air-gapped data center with images from your registry, using rate cards instead of a cloud billing export.

See your own clusters in KubeOn.

A 30-minute walkthrough on your billing data, with an engineer who has run Kubernetes cost programs.