Skip to content

Policy simulator

Check your rotation schedule before deploying. Enter your RotationPolicy configuration and fleet size, and instantly see which day each node gets rotated — and whether every node makes it before its expireAfter backstop fires.

When to use

  • Before choosing a maintenance window — test whether the window is wide enough for your fleet
  • When adjusting minRotationChances, cooldownAfter, or expireAfter — see the effect immediately
  • To understand why ThroughputBurstShortfall or ThroughputBelowArrival warnings fire
  • To visualize how a synchronized batch (all nodes the same age) interacts with your schedule

How to read the result

  • Green nodes complete their rotation before their expireAfter deadline — the graceful path works.
  • Orange nodes are rotated via the surge-less forceful fallback (if enabled) — still inside the window, still PDB-respecting, but without make-before-break.
  • Red nodes reach their expireAfter deadline before the controller can rotate them — they fall back to Karpenter's native forceful expiration.

A healthy configuration should show all green. Orange means throughput is tight but controlled. Red means the schedule needs widening.

Scope

The simulator models rotation starts and completions, including forceful fallback. It does not model failures (surge timeouts, retryBackoff, failurePause). The result is a best-case projection, not a production guarantee.

How it works (technical)

This page runs the controller's own Go code — the ageThreshold derivation, candidate-selection predicate, and start gates — compiled to WebAssembly. The simulator and the controller share one implementation and cannot drift apart (a CI check guards this).

Policy

The YAML is authoritative — it is what the simulator decodes, exactly as a cluster would. The form edits it in place.

Maintenance window — when rotation may START
Days
Which weekdays the window recurs on
Derivation — how early a node is picked
Surge — how one rotation runs

Fleet

The nodes to simulate. The generator creates a batch; you can also edit individual rows.

NameCreated atexpireAftertGP

Simulated actual durations (what the virtual world does)

These are NOT the policy estimates: the estimates are the forecast, these are what actually happens. Moving them apart is the interesting case — a policy whose C is optimistic because its estimates are too low.

Horizon

A multiple of the LONGEST node lifetime (expireAfter). Not "generations": staggered createdAt, per-node overrides, window waits and cooldown all break that equivalence.

Lifetime coverage

2026-02-17T00:00:00.000Z

Exact horizon (ISO 8601)

Diagnostics

No diagnostics.