CostLensKubernetes Costs

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.

Updated August 20266 min read

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:

CloudService
AWSAmazon EKS (Elastic Kubernetes Service)
AzureAzure Kubernetes Service (AKS)
Google CloudGoogle 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:

KPIMeaning
ClustersHow many EKS / AKS / GKE clusters CostLens has discovered
Node costTotal per-cluster node compute attributed over the selected range (see Node cost attribution)
Control-plane spendThe actual control-plane / management charge billed over the range, from your bill
Est. control-plane / moA 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:

CloudWhat it uses
Amazon EKSThe aws:eks:workload-name tag from Split Cost Allocation Data
Google GKEThe goog-k8s-controller-name label from GKE cost allocation
Azure AKSThe 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 cloudCostLens shows
Clusters + control-plane spendNothing (works out of the box)The panel + cluster table
Per-cluster node costEKS: aws:eks:cluster-name tag · GKE: cost allocation · AKS: automaticThe Node cost column
Cost per namespaceEKS: Split Cost Allocation · GKE: cost allocation · AKS: cost analysis add-onThe Top namespaces table + trend
Cost per workloadEKS: workload tags · GKE: controller labels · AKS: cost analysis add-onThe 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.

CostLens
Previous
Billing & Costs
CostLens
Next
Kubernetes Optimization