PricingPricingDocsDocsBlogBlogBook a demoBook a demoCompanyCompany (opens in a new tab)
Product
DocsAPI ReferencePricingConsole DemoBlogCompany
Start Freev3.4.7
Wave Karpenter

Spot Workload Placement

Keeps the first replicas of each workload on On-Demand and places the rest on Spot, by replica number, with no change to your YAML.

The challenge

AWS takes back a Spot node with 2 minutes of notice

AWS, Amazon EC2 User Guide, Spot Instance interruption notices; AWS, Amazon EC2 Spot Instances FAQ; karpenter.sh v1.14 docs, NodePools and Scheduling.

AWS issues a Spot interruption notice two minutes before EC2 stops or terminates the instance (AWS EC2 User Guide). In exchange, Spot Instances can save up to 90% off On-Demand prices (AWS Spot FAQ).

By default, when a NodePool allows both, Karpenter launches Spot before On-Demand (karpenter.sh). Nothing keeps a part of the replicas on On-Demand, so every replica can be on nodes that get the notice.

Karpenter can split a workload with one NodePool per capacity type and a topology spread, and its docs call this a crude method (karpenter.sh).

All 10 replicas on Spot, then 5 kept on On-Demand by threshold 5Without WaveWith Waveall 10 on Spot5 stay On-Demand
Without Wave
All 10 replicas on Spot nodes, and AWS takes one node back with 2 minutes of notice2 min noticeSpot1234Spot567Spot8910no replica on On-Demand
By default, when a NodePool allows Spot and On-Demand, Karpenter launches Spot first, so all 10 replicas can land on Spot. A 2-minute interruption notice drains one node, and its 4 replicas must start somewhere else.
With Wave
Threshold 5: replicas 1 to 5 on On-Demand, 6 to 10 on Spotthreshold 52 min noticeOn-Demand12345Spot678Spot910Pods 1 to 5 stay on On-Demand
With threshold 5, Wave places Pods by replica number: 1 to 5 on On-Demand, 6 to 10 on Spot. A 2-minute notice still drains a Spot node, and replicas 1 to 5 keep running.

2-minute notice: AWS EC2 User Guide. Spot before On-Demand when a NodePool allows both: karpenter.sh v1.14 docs. Placement by replica number, blue for On-Demand and orange for Spot: Wave Spot Workload Placement docs. The node split is illustrative.

How Wave does it

From a new Pod to its node
Karpenter by defaultNo On-Demand base
  1. NodePool
    allows Spot and On-Demand
  2. ↓used by→
    Karpenter
    launches Spot first when both are allowed
  3. ↓places→
    Deployment
    every replica can land on Spot
  4. ↓reclaims→
    Spot interruption
    2-minute notice, then the node drains
Wave Spot Workload PlacementBase kept on On-Demand
  1. Wave Console
    threshold per workload, or a CR
  2. ↓Pod create→
    Mutating webhook
    intercepts each new Pod
  3. ↓injects→
    nodeAffinity
    set by the replica number
  4. ↓places→
    Placement
    1 to threshold On-Demand, the rest Spot
Spot before On-Demand: karpenter.sh v1.14 docs, NodePools. 2-minute notice: AWS EC2 User Guide. Threshold, webhook, and nodeAffinity by replica number: Wave Spot Workload Placement docs.
1

Set a threshold

Pick a Deployment, an Argo Rollout, or an OpenShift DeploymentConfig in Wave Console, or apply a WaveKarpenterSpotPlacement CR, and set the Pod Spot Threshold.

2

Wave sets the affinity

A MutatingWebhookConfiguration adds nodeAffinity to each new Pod by its replica number. With threshold 5, Pods 1 to 5 go to On-Demand and Pods 6 and up go to Spot. Your YAML does not change.

3

Choose Prefer or Require

Prefer uses Spot and falls back to On-Demand when Spot is short. Require keeps the Pod Pending until Spot capacity exists. The webhook needs a TLS certificate, from cert-manager or your own.

Related in Wave Karpenter

Karpenter Dashboard →Node Warmup →Read the docs →
Book a demoStart free
Product
WaveWave GPULLM Serving Professional ServiceWave AI Agent2026 Q4
Resources
DocsAPI ReferenceBlogConsole DemoPricing
Company
STCLabBook a demoContact
STCLab© 2026 Wave All rights reserved.
Terms of ServicePrivacy PolicyCookies