feat(arc): let a sized profile's runner pods overflow onto burst nodes - #26
Merged
Merged
Conversation
A scale-set profile can now set burst: the label a cluster autoscaler's burst nodes carry, tolerations for their taint, and how many runners those nodes hold at most. The runner pods then trade the eligibility nodeSelector for a required node affinity accepting either the eligibility label or the burst label, with a preferred term that keeps them on the fixed nodes while those have room. The listener keeps the eligibility nodeSelector. burst.max_runners is added to the ceiling sizing derives, uniform or measured, so ARC creates more runner pods than the fixed nodes hold and the extra ones pend until the autoscaler adds a node. A profile without burst renders exactly as before.
Mearman
marked this pull request as ready for review
September 30, 2026 08:30
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
🎉 This PR is included in version 1.6.0 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds an optional
burstkey to a scale-set profile, for fleets whose fixed nodes can overflow onto nodes a cluster autoscaler launches on demand (cloud instances that join the cluster labelled and tainted, and carry no eligibility label).With
burstset, the runner pods drop the eligibility nodeSelector for a required node affinity that accepts either the eligibility label orburst.node_label_key(any value, or one ofnode_label_values), plus a preferred term at the highest weight for nodes without the burst label, so the scheduler keeps using the fixed pool while it has room.burst.tolerationsgoes on the pod template. The listener keeps the eligibility nodeSelector so it never lands on a node that can be removed.burst.max_runnersis added to the ceiling sizing derives (uniform in the filter, measured in the overlay at install time), so ARC creates more pods than the fixed nodes hold and the surplus pends until the autoscaler adds a node. It needs sizing and rejectsmax_runnersandautoscaleon the same profile, since an explicit ceiling is final and the usage-driven autoscaler has no notion of nodes that do not exist yet.A profile without
burstrenders exactly as before. The placement logic is a newarc_runner_placementfilter with unit tests, andtests/unit/test_scale_set_overlay.pyrenders the real overlay through ansible-playbook for both paths.