Count Every Dollar Once: One Total Across Cloud, Clusters, Hosts and AI

Add up your cloud bill, your Kubernetes cost and your host cost and you will almost certainly count some of it twice. Here is the rule we use to get one honest total.

Ask how much the organisation spends on infrastructure and you will usually get a sum.

Cloud bill, plus the Kubernetes cost report, plus what the VMs cost, plus the AI tools. Four numbers from four places, added together.

The total is wrong, and it is wrong in the expensive direction.

Where the double counting comes from

Your EKS cluster runs on EC2 instances. Those instances are on your AWS bill. Your Kubernetes cost tool also prices those same nodes and splits them across namespaces. Add both and you have paid for the cluster twice.

The same goes for a VM you track with a host agent. If that VM lives in a connected Azure subscription, its cost is already inside the Azure bill. Add the host figure on top and it is counted twice.

None of the individual numbers are wrong. They are different views of the same money. The mistake is treating views as layers.

Say your AWS bill is $10,000. The EKS cluster on it accounts for $4,000, and a VM on it tracked by the host agent accounts for $1,500. The total is $10,000, not $15,500. Add $800 of AI plans billed by the AI vendor and it is $10,800.

The rule

We sort every source into one of two kinds.

Additive layers are money nobody else has counted:

  • connected cloud bills,
  • self-hosted clusters (k3s, bare metal, on premises, or a cloud you have not connected),
  • hosts that are not billed through a connected cloud,
  • AI plans and usage billed by the AI vendor. Usage billed through your cloud, such as Bedrock or Azure OpenAI, is already on that cloud bill.

Overlays are breakdowns of money already in a layer. A cluster running in a connected cloud account is an overlay: it explains part of that cloud bill, it never adds to it.

The total is the sum of the layers. Overlays are shown inside the bill they belong to.

Knowing which is which

For a cluster, the signal is its billing link: which cloud account and which nodes it runs on. With a link, the overlap is exact. Without one, we do not guess. An unlinked cluster is counted on its own, with a warning to link it if its nodes sit in a connected account. A guess that folds a standalone cluster into the wrong bill would make the total quietly wrong, and quiet errors are the ones that last.

For a host, you set where it is billed through. Anything you leave unset is counted on its own, same as an unlinked cluster.

The timing problem

Clusters and hosts report every day. Cloud bills arrive a day or two late, and they settle over the following days.

So for the most recent days, a cluster's estimate is all there is. We count it, marked as an estimate, until the cloud bill for those days arrives. Once it does, the bill wins. Any of the estimate that runs past the bill is dropped, not added on top.

What you get

One number for what the organisation spent, with each source next to it and a note on anything still estimated.

It sounds like a small thing. It is the number finance asks for first, and the one most tools cannot give without a spreadsheet and an afternoon.

See the Overview in the demo or connect your first account.