Auto-provisioning profiles

Auto-provisioning profiles control how the node auto-provisioner behaves when it considers consolidating a Fleet. Profiles let you balance cost optimization against workload disruption, so the auto-provisioner’s behavior matches the sensitivity of your workloads.

Background: Consolidation

CFKE continuously checks whether the current set of nodes in a Fleet is the most efficient way to run your workloads. If Pods can fit onto fewer or smaller nodes, CFKE consolidates the Fleet. It evicts Pods from underused nodes, reschedules them onto a smaller footprint, and removes the freed nodes. Consolidation is the main reason CFKE is cost efficient without manual right-sizing.

The trade-off is that consolidation evicts Pods. Workloads that tolerate restarts benefit from aggressive consolidation because they cost less to run. Workloads that are sensitive to disruption (long-running jobs, stateful services, sessions with warm caches) may prefer a stable environment, even if some capacity stays unused.

Available profiles

You can pick the consolidation policy that fits each Fleet:

  • Conservative (conservative, default): the auto-provisioner prioritizes the stability of the Fleet. It removes nodes that are already empty, for example because their Pods finished, scaled down, or moved away on their own. It does not evict running Pods only to repack them onto a cheaper layout. This profile keeps long-running workloads stable, but unused capacity can stay in the Fleet for longer.
  • Aggressive (aggressive): the auto-provisioner prioritizes cost optimization. It disrupts and replaces underused nodes whenever it detects a cheaper layout. This includes evicting running Pods to repack them onto fewer or smaller nodes. This profile gives the lowest infrastructure cost but the highest rate of Pod evictions.

Picking a profile

The right profile depends on what your workloads look like:

  • Stateless services with fast restarts and no warm-cache dependency: the aggressive profile is usually the right choice. Evictions are cheap and the savings add up.
  • Long-running batch jobs, large model training runs, services with expensive warm-up, or workloads with tight availability SLOs: use the conservative profile, which is also the default. It avoids unexpected evictions and keeps workloads on stable nodes.
  • Mixed clusters: run multiple Fleets, each with its own profile. Use Fleet constraints and Pod scheduling rules to send each workload to the Fleet with the right policy.

Pod-level controls such as PodDisruptionBudget, terminationGracePeriodSeconds, and the karpenter.sh/do-not-disrupt annotation continue to work alongside profiles. Profiles set the default behavior for the Fleet. Pod-level controls fine-tune individual workloads.

Configuring a profile

Set the profile when you create or update a Fleet through the API or the Cloudfleet Console. In the API, set the scalingProfile field on the Fleet to aggressive or conservative. If you omit the field, the Fleet uses the conservative profile.

json
{
  "scalingProfile": "aggressive"
}

Each Fleet has its own profile, so you can mix aggressive and conservative Fleets in the same cluster. Use Fleet constraints and Pod scheduling rules to send workloads to the right Fleet.

On this page