Skip to content

docs: add nodepool rollout status RFC - #3216

Open
cnmcavoy wants to merge 2 commits into
kubernetes-sigs:mainfrom
indeedeng:nodepool-rollout-status
Open

docs: add nodepool rollout status RFC#3216
cnmcavoy wants to merge 2 commits into
kubernetes-sigs:mainfrom
indeedeng:nodepool-rollout-status

Conversation

@cnmcavoy

@cnmcavoy cnmcavoy commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Fixes #3071

Description
Karpenter does not exposes any aggregate signal on the NodePool that answers the question an operator or an external orchestrator asks after pushing a change: "has this NodePool finished rolling out the spec I just applied?"

We propose surfacing how many NodeClaims were provisioned from the NodePool's current spec revision. Drift is the mechanism that eventually makes those numbers converge; the revision is the contract consumers gate on.

How was this change tested?
Documentation-only change. Follows the RFC template defined in the /designs dir.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@kubernetes-prow

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: cnmcavoy
Once this PR has been reviewed and has the lgtm label, please assign maciekpytel for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@kubernetes-prow kubernetes-prow Bot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Aug 6, 2026
generation: 12
status:
observedGeneration: 12 # NEW: the generation the counts below were derived from
nodeClaims: 20 # NEW: NodeClaims owned by this NodePool

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Been thinking about this, I think we want this to be status.nodes, status.upToDateNodes, status.readyNodes, etc. The end user doesn't care about Nodeclaims

nodes: 20
resources: {...}
conditions:
- type: NodeClaimsUpToDate # NEW

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I kinda like this mirroring the drift condition on the nodeclaim, I know @jmdeal disagrees


Core workload controllers solve this by reporting rollout accounting on the parent: a Deployment reports `replicas`/`updatedReplicas`/`readyReplicas` plus `observedGeneration`, a DaemonSet reports `desiredNumberScheduled`/`updatedNumberScheduled`, and Cluster API reports `upToDateReplicas` on MachineDeployments alongside an `UpToDate` condition on Machines. `kubectl rollout status` and essentially all GitOps tooling are built on that convention. NodePool already aggregates `status.nodes` and `status.resources`; this RFC extends that aggregation to rollout progress.

Earlier attempts at this are [#3108](https://github.com/kubernetes-sigs/karpenter/pull/3108) and [#3177](https://github.com/kubernetes-sigs/karpenter/pull/3177). The difference from these is that we do not propose surfacing "drift" on the NodePool. We propose surfacing *how many NodeClaims were provisioned from the NodePool's current spec revision*. Drift is the mechanism that eventually makes those numbers converge; the revision is the contract consumers gate on.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Love this approach, I think this is a much more user oriented design than surfacing too much of the drift internals

conditions:
- type: NodeClaimsUpToDate # NEW
status: "False"
reason: RolloutInProgress

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am curious what other reasons there would be besides rollout in progress

name: default
generation: 12
status:
observedGeneration: 12 # NEW: the generation the counts below were derived from

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we bump this when the nodeclass changes too?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Surface NodeClaim drift/rollout progress in NodePool status

2 participants