Loading...


Updated 19 Oct 2026 • 7 mins read

Kubernetes cost monitoring fails because the cloud bills nodes while teams own namespaces, and because cluster cost tools stop at the cluster edge. This walkthrough shows how Opslyft reads per-pod metrics from managed Prometheus, allocates node cost to pods, namespaces, and services, and shows it beside the RDS, S3, and egress each service uses.
Kubernetes cost monitoring has a structural problem that no amount of dashboarding fixes: the cloud bills nodes, and teams own namespaces. An EKS, AKS, or GKE invoice can say that a node cost $140 last month. It cannot say that the payments namespace used 31 percent of it, the growth namespace 22 percent, and idle headroom the rest, because the scheduler's decisions never reach billing. And even the tools that solve that, the container cost tools, stop at the cluster edge: they show what a namespace's pods cost and nothing about the RDS instance those pods query, the S3 bucket they read, or the egress they generate, which together are often larger than the pods.
This page is about how Opslyft does both: reads per-pod metrics from each cloud's managed Prometheus, allocates node cost to pods, namespaces, and services, and shows that cost in the same view as the databases, storage, and network the same service depends on, so a team's number is its whole footprint. The allocation method is in our guides to container cost visibility and allocating Kubernetes costs; this page is about the product.
The short answer: Kubernetes cost monitoring means allocating node cost, which is what the cloud bills, to the pods, namespaces, services, and teams that consumed it, continuously, and showing it where the team can act. Opslyft does this without a cost agent on the cluster: it reads per-pod CPU, memory, and request metrics from Amazon Managed Service for Prometheus, Azure Monitor managed Prometheus, or Google Cloud Managed Service for Prometheus, joins them to the cloud billing export, and allocates each node's cost by the share each pod reserved or used, with idle capacity and system pods split by an explicit rule. Explorer then shows pod, service, and namespace cost beside the RDS, S3, NAT, egress, load balancer, and Snowflake spend the same service uses, so a namespace's cost is its full footprint; Dimension Studio attributes it to teams and customers; Monitor catches a namespace anomaly with its cause; and Tickets routes the fix to the owner.
| Problem | What causes it | What a cluster cost tool does | What is still missing |
|---|---|---|---|
| Nodes, not namespaces | Billing records node-hours; the scheduler's placement is never sent to billing | Joins node cost to per-pod metrics and allocates by namespace | Nothing; this part is solved |
| The cluster edge | A service's cost is its pods plus the RDS, S3, cache, queue, NAT, and egress it uses | Shows the pods | Everything outside the cluster, often the larger half |
| Many clusters, many clouds | Each cluster and each cloud reports separately | Per-cluster views, sometimes aggregated | One allocation model across EKS, AKS, GKE, and the rest of each bill |
Opslyft reads per-pod CPU and memory usage and resource requests from the managed Prometheus service each cloud already offers: Amazon Managed Service for Prometheus on EKS, Azure Monitor managed Prometheus on AKS, and Google Cloud Managed Service for Prometheus on GKE. The cluster needs nothing new deployed for cost; the metrics the platform team already collects for operations become the usage side of the allocation, and rolling out to a second or tenth cluster is a configuration change.
The cloud billing export supplies what each node cost, hour by hour, including the Spot and committed rates actually paid. Opslyft joins that to the per-pod metrics and allocates each node's cost to the pods that ran on it by the greater of requests and usage, time-weighted, so a short-lived pod and an always-on one are charged for exactly the capacity they held. Idle node capacity and system pods are allocated by an explicit rule, fixed, proportional, or to the platform team, and reported rather than hidden, and the requests-versus-usage gap is shown per workload because that gap is where most cluster waste sits.
Explorer breaks Kubernetes cost down by pod, service, and namespace in the same view as the rest of the bill: the EC2, EBS, load balancers, NAT, and egress around the cluster, and the RDS, S3, and Snowflake the services inside it depend on, across AWS, Azure, GCP, OCI, and Kubernetes, tracked over time so a namespace's growth is visible before the invoice. Dimension Studio attributes shared services to the namespaces that consume them by rule, and maps namespaces to teams, products, and customers, which is how a Kubernetes-heavy product reports cost per customer rather than cost per node.
Because the metrics source and the billing source are normalized per cloud, one allocation model runs across every cluster on every cloud, and the result is comparable: a namespace on EKS and a namespace on GKE are costed the same way, and both appear in the same Canvas view the platform team and finance share.
Atlas inventories every node, volume, and load balancer with an owner and a cost and records the change behind a cost movement, a node pool resized, a cluster that crossed into extended support. Its recommendations surface the requests-versus-usage gap per workload, weighted by purpose and criticality. Monitor detects namespace-level anomalies with a root-cause explanation, a deployment whose replicas tripled, a NAT Gateway processing ten times its usual traffic, and sends them to the owning team's Slack channel; Tickets turns the fix into an assigned item in Jira, ServiceNow, or Asana tracked to a measured saving; and Iris answers which namespaces grew fastest this month and why, in plain English.
A company runs three EKS clusters and one GKE cluster for a multi-tenant product, about $62,000 a month in node cost, with a container cost tool showing namespace cost per cluster. Finance asks what the enterprise tier costs to serve, and the answer takes a week, because the tier's namespaces are on two clusters and the tool cannot see the Aurora cluster, the S3 buckets, or the egress the tier's services use.
With managed Prometheus connected on all four clusters and the billing exports joined, Opslyft allocates the $62,000 by namespace with one model, and Dimension Studio maps namespaces to tiers and customers. The enterprise tier's namespaces turn out to be $19,000 of cluster cost, plus $8,400 of shared Aurora attributed by query share, $2,100 of S3 and NAT, and $1,300 of egress: about $30,800, which is the number finance needed and the number the cluster tool put at $19,000. The requests-versus-usage view also shows the tier's largest service reserving three times what it uses; the ticket to the owning team right-sizes requests, Karpenter consolidates nodes, and the tier's cluster cost falls by $5,200 a month, measured against the ticket.
Proof: Disprz, six platforms and shared services allocated to customers
Disprz, serving 1.5 million learners across AWS, Azure, GCP, OCI, Talkbox, and PubNub, had 50 to 60 shared services and many untagged resources, and spent a week every month allocating customer cost by hand. With Opslyft the shared services were attributed to customers by real usage, allocation became 100 percent automated, and 40 hours a month returned to the team, with customer-level profitability by tier visible for the first time. Read the full story: Disprz saves 40 hours monthly with automated cost attribution
If you run one cluster on one cloud and the cluster itself is the whole question, an open-source or cluster-only tool will serve. The platform earns its place when the cluster is a third of the bill and finance needs the rest.
Kubernetes cost monitoring is two problems: turning nodes into namespaces, which cluster tools solve, and turning namespaces into a service's full footprint across the RDS, S3, and network it uses, which they do not. Opslyft reads the metrics you already collect in managed Prometheus, allocates node cost by pod and namespace with one model across every cluster and cloud, and shows the result beside everything else the same service costs, attributed to teams and customers, monitored for anomalies, and routed as tickets. That is what Opslyft's cost visibility is built for on Kubernetes; for the optimization levers once the number is visible, see our Kubernetes cost optimization guide.
Kubernetes cost monitoring is attributing the cost of a cluster, which the cloud bills as nodes, to the pods, namespaces, services, and teams that actually consumed it, continuously, so that a team can see what its workloads cost and act when the number moves. It requires joining cloud billing data with per-pod usage metrics over time, because the cloud invoice knows what a node cost and not which namespace used it.
Because the scheduler's placement of pods on nodes happens inside Kubernetes and is never sent to billing. AWS, Azure, and Google bill EC2, VM, and Compute Engine node-hours; which of forty pods from six teams ran on a given node is known only from cluster metrics. Namespace cost is derived by allocating each node's cost by the share each pod reserved or used, which is why it needs a metrics source and an allocation engine.
Managed Prometheus services, Amazon Managed Service for Prometheus, Azure Monitor managed Prometheus, and Google Cloud Managed Service for Prometheus, collect per-pod CPU, memory, and request metrics from clusters at scale without running Prometheus yourself. Opslyft reads those metrics as the usage side of the allocation, joins them to the cloud bill, and allocates node cost to pods, namespaces, and services, so there is no separate agent to install for cost.
By requests, or more precisely the greater of requests and usage. A pod's resource request reserves node capacity whether or not it is used, so charging by usage alone lets teams reserve large amounts for free and removes the incentive to size requests accurately. Opslyft shows both, so a team sees what it reserved, what it used, and the gap, which is where most cluster waste lives.
Because Opslyft allocates the whole bill, not only the cluster. Explorer shows a namespace's share of node cost in the same view as the RDS instances, S3 buckets, NAT and egress, load balancers, and Snowflake warehouses the same service depends on, and Dimension Studio attributes shared services to the namespaces that consume them, so a team's number is its full footprint rather than its pods alone.
Yes. Opslyft reads metrics from each cloud's managed Prometheus and billing from each cloud's export, normalizes them, and allocates with one model across clusters on AWS, Azure, and Google Cloud, with Kubernetes cost shown beside everything else the same teams run on those clouds, OCI, and Snowflake.
Once a cluster's managed Prometheus endpoint and the cloud billing export are connected, pod, namespace, and service cost appears in Explorer with the rest of the bill, and allocation to teams follows Dimension Studio's existing mapping. There is no cost agent to deploy on the cluster, which is what makes multi-cluster rollout a configuration task rather than a project.