Pools CostGraph creates
CostGraph creates a NodePool when splitting an existing pool saves money, for example moving workloads that need less memory off a pool sized for memory-heavy ones. It is off by default.karpenter.sh
NodePools. It is not granted otherwise.
A pool created by CostGraph:
- Is labelled
costgraph.ai/managed: "true". - Is copied from the pool it splits, including its node class, so it launches the same kind of nodes.
- Carries the label and taint
costgraph.ai/poolin its node template. Only workloads steered to the pool run on it. - Has weight 50 so Karpenter prefers it for the workloads steered to it.
- Sets a node termination grace period (24h unless the source pool sets one).
autopilot.costgraph.ai/placement: auto.
Their pods then get a matching toleration and node selector, but only while the
pool exists in the cluster. Existing tolerations and node selectors are kept, and
a pod that already selects a different costgraph.ai/pool is left alone. For GPU workloads, the owned pool is created from a
pool that already runs GPU nodes.
Safety
- Only the
karpenter.sh/v1API is supported. On other versions CostGraph shows recommendations and YAML only. - Before every write, the change is checked against the Karpenter version installed in your cluster with a dry run. If it does not fit, nothing is applied and the pool shows why, with the YAML for review.
- A pool you created with the same name is never touched. CostGraph reports the conflict instead.
- Changing a pool’s node template replaces every node in it. CostGraph changes the template of a pool at most once every 7 days, and only for a material change. Weight, limits and disruption settings are updated freely because they do not replace nodes.
- When a proposal goes away, CostGraph stops steering new pods to the pool first. It deletes the pool only after the proposal has been gone for three polls and no running or pending pod selects the pool.
global.autopilot.ownedNodePools.enabled=false to stop creating and changing pools, or global.autopilot.paused=true to pause everything.