Kubernetes spot instances are nodes drawn from the provider's spare capacity, sold at a lower, variable price and reclaimable at any time; in a cluster they become a node pool of their own, tainted, on which only workloads run that tolerate an interruption. The price is known, the risk is the interruption, and both show in billing data differently from on-demand capacity. This page describes which workloads qualify, how interruptions are handled, how mixed pools with an on-demand fallback work, how spot shows in each provider's data, and what a pool saves and risks. The purchase option itself, its pricing and its limits are explained in spot and preemptible capacity; this page is about the cluster.

How it works

A spot node is an ordinary virtual machine with a different purchase option. The provider takes it back when it needs the capacity, with short warning: AWS announces an interruption two minutes ahead as an EventBridge event and in the instance metadata, and may send a rebalance recommendation before that; Azure evicts Spot VMs by capacity or by the maximum price you set; GKE gives the pods of a Spot node 30 seconds by default to shut down. In that time the node is cordoned and drained so that pods end cleanly and are rescheduled. On EKS, Karpenter does that through an SQS queue of interruption events, or the AWS Node Termination Handler as a DaemonSet; EKS Auto Mode handles the events itself. AKS and GKE drain the node before eviction.

Suitable are workloads that survive an interruption without data loss, unnoticed by users: batch jobs with checkpoints, queue workers, CI runners, stateless replicas behind a load balancer, development environments. Unsuitable are databases, single-replica controllers, pods with local storage and anything that starts slower than the warning. A PodDisruptionBudget protects during the drain, not once the notice expires.

A spot pool gets a taint so that only pods with a matching toleration land on it, and a label for node affinity: AKS sets kubernetes.azure.com/scalesetpriority=spot:NoSchedule, GKE cloud.google.com/gke-spot=true as a label and, on automatically created pools, as a taint, Karpenter distinguishes with karpenter.sh/capacity-type: spot or on-demand. Mixed pools lower the risk: a NodePool permitting many instance types and zones finds capacity more often, and an on-demand fallback pool takes the pods when spot capacity is missing; Karpenter prefers spot and falls back to on-demand when the NodePool allows both, and consolidation deletes spot nodes by default but replaces them with cheaper ones only under the SpotToSpotConsolidation feature flag (Cluster autoscaler, Karpenter and node provisioning).

the provider needsthe capacityyes: many typesand zones permittednoA pod with the spot tolerationand affinityA node in the spot poolThe notice: two minutes on AWS,30 seconds on GKE, an evictionon AzureCordon and drain: pods endcleanly within the windowSpot capacityelsewhere?Rescheduled on anotherspot nodeThe on-demand fallback pool,at the full price
A spot pool is reached only through its taint, and when the provider takes a node back the notice window is what drains the pods and moves them to another spot node or the on-demand fallback

AWS

The spot price per instance type and Availability Zone moves with supply and demand; in the Cost and Usage Report, spot nodes sit under Amazon EC2 with usage types such as EUC1-SpotUsage:m6i.large at the price of that hour. If AWS interrupts a Linux instance in its first hour, it costs nothing; after that the seconds used are charged, and whoever terminates it themselves always pays the seconds. EKS managed node groups and Karpenter support spot; Fargate Spot exists for ECS only.

Azure

A Spot node pool is a secondary pool, never the default pool, with a variable price per region and VM size and a maximum price in USD, -1 meaning up to the on-demand price. The eviction policy Delete deletes the VM, Deallocate stops it; stopped VMs keep counting against the compute quota and can block scaling and upgrades. The lines carry the meter with the suffix Spot in Azure Cost Management, say D4s v5 Spot, and the retail prices API returns the current spot price per region.

Google Cloud

Spot VMs have, unlike the older preemptible VMs with their 24-hour limit, no runtime limit and are reclaimed only when the provider needs the capacity. In the billing export they sit under Compute Engine with SKUs whose description contains Spot Preemptible, per machine family and region. Autopilot offers Spot Pods, which it places on Spot VMs and bills by requests at the spot rate.

What it means for your cost

A spot pool lowers the hourly price of the same machine; the saving is the gap to the on-demand price times the hours the pool actually runs on spot. Two things eat into it. Fallback hours on demand cost the full price, and the interruptions cost work: jobs that start over, starts, drains, replacement nodes booting. Spot nodes do not count towards a commitment: a Savings Plan or a reservation covers on-demand usage, and a pool that moves between spot and on demand makes commitment coverage swing. The split therefore follows the load: commitments for the baseline, spot for the interruptible part above it (capacity planning and headroom).

The gap between on-demand andspot price, times the hours thepool actually runs on spotThe savingLess: fallback hourson demand at thefull priceLess: the interruptionwork, jobs restarted,drains, replacementnodes bootingNot counted towards acommitment: the plan orreservation covers theon-demand base, spotsits beside it
The saving is the price gap times the hours on spot, less the fallback hours and the interruption work, and spot hours never count towards a commitment

In billing data a spot node is recognisable by its usage type, meter or SKU, not by the cluster; the pods on it cost proportionally less because the node price is lower (what a pod costs). The saving is proven when spot hours in the data rise and the on-demand hours of the same pool fall by the same measure; an interruption rate that costs more work than it saves is the signal to open the pool to other instance types or to take the workload back.

Where it goes wrong

  • Pods without a toleration on spot. Symptom: a database or a single-replica controller fails at an interruption. Cause: the spot pool has no taint, or the toleration was handed out too generously.
  • Fallback to on demand unnoticed. Symptom: spot hours fall, the bill rises. Cause: the NodePool falls back to on demand when spot capacity is missing, and nobody measures the share.
  • One instance type, one zone. Symptom: the spot pool stays empty or is interrupted often. Cause: too few permitted instance types and zones; the capacity of a single type is scarce.
  • Interruption without a drain. Symptom: jobs end with errors, requests are lost. Cause: no termination handler or queue processes the events; the warning passes unused.
  • Deallocate blocks the cluster. Symptom: scaling or upgrading an AKS cluster fails after evictions. Cause: the eviction policy Deallocate leaves stopped Spot VMs counting against the quota.
  • Commitment sized on spot. Symptom: a Savings Plan's utilisation drops after a pool moved to spot. Cause: spot hours are not covered by the commitment; it was sized on this pool's on-demand hours.

Example

List prices read on 2026-10-21 through the Azure Retail Prices API for Germany West Central, Linux: a Standard_D4s_v5 VM (4 vCPU, 16 GiB) costs USD 0.23 per hour as a regular VM and USD 0.042504 per hour as a Spot VM; the spot price is variable and holds at the time of reading.

A pool of five D4s_v5 costs 5 × 0.23 × 730 = USD 839.50 a month regular, 5 × 0.042504 × 730 = USD 155.14 on spot, a gap of USD 684.36. If the pool runs on the on-demand fallback for 10 percent of the hours because spot capacity is missing, those 73 hours cost 5 × 0.23 × 73 = USD 83.95 instead of 5 × 0.042504 × 73 = USD 15.51, and the month's saving shrinks by USD 68.44. What the interruptions themselves cost is not on the bill: repeated jobs and the minutes replacement nodes take to boot are paid in time.

Sources

Read on 2026-10-21. AWS Spot Instance interruptions, interruption notices and billing for interrupted Spot Instances, AWS Node Termination Handler, Karpenter disruption, Microsoft Spot node pools in AKS and Azure Retail Prices API, Google Cloud Spot VMs in GKE.