Skip to content

MCO-2599: makes bootc-operator aware of karpenter (backport #204) - #293

Merged
alicefr merged 8 commits into
release-0.2from
mergify/bp/release-0.2/pr-204
Nov 5, 2026
Merged

alicefr merged 8 commits into
release-0.2from
mergify/bp/release-0.2/pr-204

Conversation

@mergify

@mergify mergify Bot commented Nov 5, 2026

Copy link
Copy Markdown

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.

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
alicefr merged commit aceb858 into release-0.2 Nov 5, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants