Kubernetes Costs
See what your Kubernetes clusters really cost — control-plane spend, per-cluster node cost, and cost broken down by namespace and workload — across Amazon EKS, Azure AKS, and Google GKE.
Kubernetes hides cost. A cluster's bill is spread across compute, storage, networking, and a control-plane charge — and none of it tells you which team or service the money went to. CostLens pulls all of that back together into one Kubernetes panel and, when you enable your cloud's cost-allocation feature, breaks a cluster's spend down to the namespace and even the individual workload (deployment / controller).
It works the same way across all three managed-Kubernetes services:
| Cloud | Service |
|---|---|
| AWS | Amazon EKS (Elastic Kubernetes Service) |
| Azure | Azure Kubernetes Service (AKS) |
| Google Cloud | Google Kubernetes Engine (GKE) |
Install-nothing, works on private clusters
CostLens reads Kubernetes cost entirely from your cloud's own billing and management APIs — the same read-only access you granted when connecting the account. There is no agent to install in the cluster and no Kubernetes API access required, so it works on private clusters with no extra setup.
Where to find it
Open the Billing page. The Kubernetes panel appears automatically once CostLens has discovered a managed-Kubernetes cluster in any connected account. If you run no Kubernetes, the panel stays hidden.
Use the account selector at the top of the page to focus on a single account, or leave it on All Accounts to see every cluster across every cloud in one place.
What the panel shows
At the top are four summary figures:
| KPI | Meaning |
|---|---|
| Clusters | How many EKS / AKS / GKE clusters CostLens has discovered |
| Node cost | Total per-cluster node compute attributed over the selected range (see Node cost attribution) |
| Control-plane spend | The actual control-plane / management charge billed over the range, from your bill |
| Est. control-plane / mo | A per-cluster monthly estimate of the control-plane fee |
Below that, a table lists every cluster with its cloud, owning account, region, Kubernetes version, status, attributed node cost, and control-plane cost.
Control-plane vs node cost
Most Kubernetes spend is node cost — the VMs your pods run on — which the cloud bills under compute (EC2 / Virtual Machines / Compute Engine), not under the Kubernetes service. The Kubernetes service line on your bill is only the small control-plane fee (roughly $73/month per cluster on EKS and GKE; free on the AKS standard tier). CostLens shows both, so you see the whole picture rather than just the control-plane sliver.
Node cost attribution
Because node compute is billed under the compute service, attributing it back to a specific cluster needs a cost-allocation signal. Each cloud provides one; enable it once and the per-cluster Node cost column fills in within about 24 hours.
Amazon EKS — activate the cluster cost-allocation tag
In the AWS Billing console, open Cost allocation tags, find aws:eks:cluster-name under AWS-generated tags, and activate it. AWS then tags the cluster's node compute (EC2 / EBS / networking) so CostLens can total it per cluster.
Google GKE — enable GKE cost allocation
On the cluster, turn on GKE cost allocation (Kubernetes Engine → your cluster → Enable GKE cost allocation). Google then writes the goog-k8s-cluster-name label onto the node compute in your BigQuery billing export, which CostLens totals per cluster.
Azure AKS — no tag needed
AKS node compute lives in the cluster's node resource group (named MC_<resource-group>_<cluster>_<region>). CostLens attributes that resource group's spend to the cluster automatically — it only needs the Cost Management read access already granted when you connected the subscription.
Until the signal is active, the panel shows an amber note with the exact step for each cloud you run, and the Node cost column reads —.
Cost per namespace
Namespaces are how most teams carve up a shared cluster — one per team, environment, or service. CostLens shows a Top namespaces table (namespace, cluster, cloud, and cost) once you enable your cloud's namespace-level cost allocation.
Amazon EKS — enable Split Cost Allocation Data
In AWS Cost Management → Cost allocation tags, enable Split Cost Allocation Data for EKS, then activate the aws:eks:namespace cost-allocation tag. AWS splits each node's cost across the pods running on it and tags the result by namespace.
Google GKE — enable GKE cost allocation
The same GKE cost allocation switch that powers node attribution also emits the goog-k8s-namespace label into the BigQuery billing export — no extra step.
Azure AKS — enable the cost analysis add-on
Enable the AKS cost analysis add-on on the cluster. Azure Cost Management then allocates the cluster's spend by Kubernetes namespace.
Give it ~24 hours
After you enable a namespace or node cost-allocation feature, the cloud needs roughly a day to start emitting the allocated data. Until then CostLens shows an enablement hint instead of the breakdown — that's expected, not an error.
Namespace cost trend
Once namespace data is flowing, CostLens records each namespace's cost every month and draws a Namespace cost trend chart beneath the table — one line per namespace, so you can see which namespaces are growing and which are steady.
The trend builds up over time: history accrues from the first full month after you enable cost allocation, so the chart fills in month by month rather than back-filling the past.
Cost per workload
Within a namespace you can go one level finer — to the individual workload (deployment, statefulset, or other controller). In the Top namespaces table, click a namespace row to expand it and reveal its workloads and their costs.
This drill-down needs workload-level allocation to be enabled on the cluster:
| Cloud | What it uses |
|---|---|
| Amazon EKS | The aws:eks:workload-name tag from Split Cost Allocation Data |
| Google GKE | The goog-k8s-controller-name label from GKE cost allocation |
| Azure AKS | The controller dimension from the AKS cost analysis add-on |
If workload allocation isn't available, the expanded row shows a short note instead of a breakdown. The workload query only runs when you expand a row, so opening the panel never triggers extra cost.
A note on cost
CostLens is careful about what it costs you to see this data:
- Amazon EKS figures come from AWS Cost Explorer, which AWS bills at $0.01 per request on your account. CostLens caches every Kubernetes cost query for 6 hours and records the namespace trend only once per month, so the panel adds only a few cents of Cost Explorer usage.
- Google GKE figures come from your BigQuery billing export, and Azure AKS figures from Cost Management — both queried sparingly and cached the same way.
Requirements at a glance
| To see… | Enable on the cloud | CostLens shows |
|---|---|---|
| Clusters + control-plane spend | Nothing (works out of the box) | The panel + cluster table |
| Per-cluster node cost | EKS: aws:eks:cluster-name tag · GKE: cost allocation · AKS: automatic | The Node cost column |
| Cost per namespace | EKS: Split Cost Allocation · GKE: cost allocation · AKS: cost analysis add-on | The Top namespaces table + trend |
| Cost per workload | EKS: workload tags · GKE: controller labels · AKS: cost analysis add-on | The per-namespace drill-down |
Optimizing Kubernetes spend
Seeing cost is half the job — CostLens also recommends how to cut it. Its Kubernetes checks flag idle node pools, over-provisioned nodes, and workloads that could move to cheaper Spot capacity, across all three clouds. See Kubernetes Optimization for how those recommendations work.
Related
- Kubernetes Setup & Prerequisites — what to enable, per cloud, to get every layer of Kubernetes data
- Kubernetes Optimization — idle-node, right-sizing, and Spot recommendations
- Billing & Costs — the page the Kubernetes panel lives on
- Recommendations — how CostLens surfaces and prioritises savings