karpenter-costs-1

Karpenter Monitoring: Spot Savings and Node Pool Cost Breakdown

Published on April 05, 2026, 17:00 UTC 4 minutes New!

Karpenter now exposes enough pricing data to estimate Kubernetes node costs directly from Prometheus metrics. The existing Karpenter dashboards in the kubernetes-autoscaling-mixin already cover node pools, instance types, and scaling behavior. This post focuses on the new cost dashboard: estimated monthly cost, spot instance savings, and node pool cost breakdown in Grafana.

This builds on the earlier posts on Karpenter monitoring with Prometheus and Grafana, comprehensive Kubernetes autoscaling monitoring, and Kubernetes cost tracking with OpenCost. If you want actual cost allocation, shared resource accounting, and historical cost analysis, use OpenCost and the opencost-mixin. This Karpenter dashboard answers a narrower question: what does the current Karpenter-managed node fleet look like in dollars?

The dashboard is available in the kubernetes-autoscaling-mixin repository as kubernetes-autoscaling-mixin-karpenter-costs.json. It adds one new Karpenter dashboard:

  • Karpenter Costs: estimated monthly node cost, cost split by node pool / capacity type / architecture / instance type, and estimated spot savings.

Karpenter cost metrics used by the dashboard

The dashboard combines two kinds of Karpenter metrics:

  • karpenter_nodes_allocatable, which tells us which nodes are currently active and what labels they carry such as instance_type, capacity_type, zone, arch, and nodepool
  • karpenter_cloudprovider_instance_type_offering_price_estimate, which exposes Karpenter's current price estimate for a given instance type, capacity type, and zone

From there, the core calculation is straightforward: count active nodes per instance type and multiply that by the matching price estimate.

sum(
  max by (instance_type, capacity_type, zone) (
    karpenter_cloudprovider_instance_type_offering_price_estimate
  )
  * on (instance_type, capacity_type, zone)
  count by (region, zone, instance_type, capacity_type) (
    max by (node_name, region, zone, instance_type, capacity_type) (
      karpenter_nodes_allocatable{resource_type="cpu"}
    )
  )
)

That gives you something useful very quickly. It is also important to be precise about what it is not:

  • It is not cloud billing data.
  • It does not include control plane charges, load balancers, disks, or network egress.
  • It does not allocate shared cluster costs to namespaces or workloads.
  • It reflects the current fleet shape and current price estimates, not a full historical bill.

That limitation is why the dashboard description points directly to OpenCost for deeper analysis.

How to enable the Karpenter cost dashboard

If you already use the kubernetes-autoscaling-mixin for Karpenter monitoring, update the mixin and import the dashboard JSON like the other Karpenter dashboards.

If you only want the Karpenter dashboards enabled, a minimal config.libsonnet still looks like this:

{
  _config+:: {
    karpenter+: {
      enabled: true,
    },
    clusterAutoscaler+: {
      enabled: false,
    },
    vpa+: {
      enabled: false,
    },
    keda+: {
      enabled: false,
    },
  },
}

What the dashboard shows

The dashboard has two sections.

Cost breakdown

The first section shows the current monthly run rate and breaks it down by:

  • capacity type
  • architecture
  • node pool
  • instance type

There is also a node pool time series and a table with monthly cost, monthly cost per instance, and current instance count by instance type. That makes it easy to see whether a node pool is expensive because of replica count, instance choice, or both.

karpenter-costs-1

Spot savings

The second section compares spot and on-demand price estimates for the same instance types and zones.

It shows:

  • estimated monthly spot savings by node pool
  • a spot versus on-demand table with monthly cost, savings in dollars, and savings percentage

This is useful when you want to see whether a node pool is getting real value from spot capacity.

karpenter-costs-2

Where this fits next to OpenCost

OpenCost is still the right tool for full Kubernetes cost analysis and allocation. This dashboard answers a narrower question: what the current Karpenter-managed node fleet looks like in dollars.

That makes it useful for day-to-day tuning, such as checking which node pools cost the most, how much of the fleet is still on on-demand, and whether an instance mix change is reducing spend.

Limits

The dashboard is an estimate, not billing data.

  • prices can vary by zone and capacity type over time
  • it reflects the current fleet rather than a full bill
  • spot savings are based on Karpenter price estimates
  • non-node costs are out of scope

Summary

The new Karpenter cost dashboard in the kubernetes-autoscaling-mixin gives a practical estimate of current node spend, spot instance savings, and node pool cost distribution using only Karpenter metrics already in Prometheus. It is a good fit for cluster operators who want quick cost feedback while tuning node pools, capacity types, and instance selections.

For billing accuracy, allocation by namespace, or broader Kubernetes cost analysis, keep OpenCost in the stack. For fast answers about what Karpenter is doing to your node bill right now, this dashboard is the missing piece.

Related Posts

Kubernetes Cost Tracking Simplified with OpenCost, Prometheus, and Grafana

OpenCost is an open-source tool designed to help you monitor and understand the cost of your cloud infrastructure. As a project under the Cloud Native Computing Foundation (CNCF), OpenCost offers a transparent and powerful solution for cloud cost management. It provides both a user-friendly interface for visualizing cloud costs and Prometheus metrics, enabling you to query and visualize these costs using Grafana. The popular tool KubeCost is built on top of OpenCost, offering an enhanced feature set and user experience. However, KubeCost is not open-source, and its free plan has limitations on data retention and storage. Given these constraints and a preference for consolidating data visualization within Grafana, I opted to use OpenCost. This blog post will introduce the opencost-mixin - a set of Prometheus rules and Grafana dashboards for OpenCost.

Configuring VPA to Use Historical Metrics for Recommendations and Expose Them in Kube-state-metrics

The Vertical Pod Autoscaler (VPA) can manage both your pods' resource requests but also recommend what the limits and requests for a pod should be. Recently, the kube-state-metrics project removed built-in support for VPA recommendation metrics, which made the VPA require additional configuration to be valuable. This blog post will cover how to configure the VPA to expose the recommendation metrics and how to visualize them in Grafana.

Comprehensive Kubernetes Autoscaling Monitoring with Prometheus and Grafana

The kubernetes-mixin is a popular resource for providing excellent dashboards and alerts for monitoring Kubernetes clusters. However, there’s still not much in place yet for autoscaling tools like PDBs, HPAs/VPAs, KEDA, Karpenter, or the Cluster Autoscaler. These essential components are commonly deployed in Kubernetes environments but don't have standardized, open source monitoring solutions. This blog post aims to solve that by introducing the kubernetes-autoscaling-mixin - a set of Prometheus rules and Grafana dashboards for Kubernetes autoscaling. This mixin includes coverage for Kubernetes core components such as HPA and PDB, as well as additional components like the KEDA, VPA, Karpenter, and the Cluster Autoscaler, ensuring you have visibility into the autoscaling mechanisms that keep your cluster running efficiently.