How-to Guides
Azure cloud pricing
How Kubeadapt prices Azure clusters. Pay-as-you-go and Spot VMs work without setup; Reservation and Savings Plan attribution is on the roadmap.
You installed the agent on an AKS cluster and the dashboard fills in node cost from the first snapshot. For Azure today that's the entire integration — there's no Azure-side connection to make. Kubeadapt reads the public Azure Retail Prices API, identifies Spot VMs from cluster node labels, and attributes cost without any credentials in your Azure tenant.
What isn't reflected yet: Reserved VM Instances and Azure Savings Plan discounts. The cluster shows pay-as-you-go prices even if your finance team has committed to a 1- or 3-year reservation on the underlying VM families.
What works today
| Pricing type | Setup required | How it works | Status |
|---|---|---|---|
| Pay-as-you-go (on-demand) | None | Fetched from the Azure Retail Prices API on a schedule | Supported |
| Spot VMs | None | Real-time spot prices per region and VM size | Supported |
| Reserved VM Instances | — | — | Planned |
| Azure Savings Plans | — | — | Planned |
How it works
Kubeadapt fetches public pricing from the Azure Retail Prices API on a regular schedule and caches it. No Azure AD app registration, no service principal, no subscription read-role required — public pricing is read on Kubeadapt's side, not from your tenant.
What Kubeadapt reads from inside the cluster:
- VM size — from
node.kubernetes.io/instance-type(e.g.Standard_D4s_v5) - Region — from
topology.kubernetes.io/region(e.g.eastus) - Capacity type — Spot vs. regular inferred from the
kubernetes.azure.com/scalesetpriority=spotlabel that AKS applies to spot node pools
Standard AKS node pools set these labels automatically. For self-managed Kubernetes on Azure VMs, ensure your kubelet or cluster autoscaler applies the well-known topology labels.
When you'd want a cloud-account integration
You wouldn't, today. Unlike AWS, where the Cost Explorer API exposes Reservation and Savings Plan utilization that Kubeadapt can pull, Azure Reservation attribution requires reading Cost Management exports and reconciling reservation coverage against running VMs. That work is on the roadmap; track it on the feedback portal.
In the meantime, if you have material RIs or Savings Plans in place, your real Azure invoice will be lower than what Kubeadapt's Cost Explorer projects. Treat Kubeadapt numbers as pay-as-you-go-equivalent until commitment attribution ships.
Troubleshooting
Spot nodes show pay-as-you-go prices. Check the Spot label:
kubectl get nodes -L kubernetes.azure.com/scalesetpriorityIf the column is empty on nodes that you know live in a Spot scale set, the AKS node pool wasn't created with --priority Spot, or the underlying VMs were provisioned outside AKS. Recreate the node pool with the Spot priority, or set the label manually on legacy nodes.
Some nodes show $0 cost. The VM size isn't matching anything in the retail price catalog. Two common cases:
- The VM size string in
instance-typehas a casing or suffix mismatch (e.g.standard_d4s_v5rather thanStandard_D4s_v5). Some clusters set lowercase labels; the catalog uses canonical Azure naming. Re-label or upgrade kubelet. - New VM series that haven't propagated to the catalog yet — wait for the next pricing refresh, then re-check. If it persists for more than a day, contact support with the exact instance-type value.
Cluster shows region as "unknown". The topology.kubernetes.io/region label is missing. AKS sets this automatically; if it's missing, the cluster was likely set up before well-known labels became standard, or kubelet was started without --cloud-provider=azure. Re-label nodes or upgrade the node pool.
Next steps
- Connect a cluster — the index for all four providers
- AWS integration — the contrast case, where commitment attribution does ship today
- Configuration overview — the Helm chart and agent values