Repository navigation
MCO-2599: makes bootc-operator aware of karpenter (backport #204) - #293
Merged
Merged
Conversation
Add an internal Karpenter integration layer based on unstructured.Unstructured. Keep Karpenter out of the operator's Go dependencies and scheme registration so clusters without the NodeClaim CRD continue to work normally. Add tests for metadata initialization, status parsing, error handling, condition evaluation, and deep-copy behavior. Assisted-by: AI Signed-off-by: Zack Zlotnik <zzlotnik@redhat.com> (cherry picked from commit 8fdf674)
Detect NodeClaim and node-level disruption signals before assigning reboot slots or starting drains, and defer updates while Karpenter is rebooting, disrupting, or terminating a node. Temporarily apply do-not-repair and do-not-disrupt protection to Karpenter-managed Nodes and NodeClaims during update slots. Track ownership on BootcNodes and remove only annotations added by the operator when the slot is released. Add support for bootc.dev/os-not-ready startup taints. Remove it when the on-disk image matches the BootcNode desired image and the taint was present when the node joined the cluster. Assisted-by: AI Signed-off-by: Zack Zlotnik <zzlotnik@redhat.com> (cherry picked from commit 8ade4a9)
Add unit and envtest coverage for Karpenter-aware rollout behavior. Assisted-by: AI Signed-off-by: Zack Zlotnik <zzlotnik@redhat.com> (cherry picked from commit 10dd383)
Add coverage for the bootc.dev/os-not-ready startup taint lifecycle. Assisted-by: AI Signed-off-by: Zack Zlotnik <zzlotnik@redhat.com> (cherry picked from commit 3d6c308)
Document Karpenter integration and OS initialization taint behavior. Assisted-by: AI Signed-off-by: Zack Zlotnik <zzlotnik@redhat.com> (cherry picked from commit 1e58b98)
Assisted-by: AI Signed-off-by: Zack Zlotnik <zzlotnik@redhat.com> (cherry picked from commit e35ceb9)
Signed-off-by: Zack Zlotnik <zzlotnik@redhat.com> (cherry picked from commit b936246)
A deferred candidate can block other staged nodes from being slotted under certain conditions. Instead, we should consider all unslotted nodes up until we reach the maximum capacity for unavailable nodes. All slotted nodes should continue to be processed regardless of capacity. Assisted-by: AI Signed-off-by: Zack Zlotnik <zzlotnik@redhat.com> (cherry picked from commit 2ca67d4)
alicefr
approved these changes
Nov 5, 2026
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.
If a cluster contains both bootc-operator and Karpenter, it is possible that Karpenter could reap cluster nodes while a bootc-operator driven update is in progress. To prevent that, we detect whether the Node object is owned by a Karpenter NodeClaim object. And in that situation, we apply both the Karpenter Do Not Repair (
karpenter.sh/do-not-repair) and Do Not Disrupt (karpenter.sh/do-not-disrupt) annotations to each node when it is cordoned for an update and we remove it after the update is completed.This is an automatic backport of pull request #204 done by Mergify.