Skip to content

Split rule.status.NodeEvaluationResults into a separate CRD NodeReadinessEvaluation #89

Open
0 of 1 issue completed

Description

@ajaysundark

We discussed this in the past about eventually splitting the node evaluation results from the rule status object and while I have been going through the sig-arch api-conventions, I found below guidelines-

References in the status of the referee to the referrer may be permitted, when the references are one-to-one and do not need to be frequently updated, particularly in an edge-based manner

Our current usage seem to be in conflict with these guidelines, having 1 to many node references in rule status requiring frequent updates.

While having node results directly in the status is nice for observability, this has caused us some concurrency issues that we fixed in the past.

We need to investigate separating the node references into their own. We could decide this after some user feedback or scalability tests.

This applies to three fields - AppliedNodes, FailedNodes, and NodeEvaluations in NodeReadinessRuleStatus object.

Activity

  1. changed the title [-]Break rule.status.NodeEvaluationResults into a separate CRD NodeReadinessEvaluation[/-] [+]Split rule.status.NodeEvaluationResults into a separate CRD NodeReadinessEvaluation[/+] on Jan 16, 2026
  2. ajaysundark commented on Jan 18, 2026

    @ajaysundark
    ContributorAuthor
  3. Karthik-K-N commented on Jan 18, 2026

    @Karthik-K-N
    Contributor

    Thanks for tagging, I can explore on this share my observation.

  4. added
    kind/api-changeCategorizes issue or PR as related to adding, removing, or otherwise changing an API
    on Jan 22, 2026
  5. ajaysundark commented on Jan 25, 2026

    @ajaysundark
    ContributorAuthor

    /remove-priority backlog

  6. ajaysundark commented on Jan 25, 2026

    @ajaysundark
    ContributorAuthor

    In addition to handling complexity of concurrent updates, storing node-evaluation results in single rule object will likely exceed the size of the etcd 1.5MB limit -- ref: similar reasoning for scaling endpoint slices to pod objects here: https://kubernetes.io/blog/2020/09/02/scaling-kubernetes-networking-with-endpointslices/#scalability-limitations-of-the-endpoints-api

    @Karthik-K-N I think we could prioritize this sooner for reliability of the controller in high scale scenarios.

  7. ajaysundark commented on Jan 25, 2026

    @ajaysundark
    ContributorAuthor

    Copying discussions w/ Karthik here for completeness --

    I think we still need to think it through.

    We'd need to split this into two separate problems:

    1. Removing node-references from rule-status: AppliedNodes, FailedNodes and NodeEvaluations.
    2. Redesign new CR for NodeEvaluations.

    Reading through https://kubernetes.io/blog/2020/09/02/scaling-kubernetes-networking-with-endpointslices/#scalability-limitations-of-the-endpoints-api, I realized  (1) is more of a concern than (2) for scale.

    To answer your question on cardinality of NodeEvaluation for (2):

    you mean to say 1 result object per node, This will contain all the applicable rules for that node?

    we have two options -
    [A] 1 node-eval per rule per node, alternatively
    [B] 1 node-eval per node (merging all rule results into this single object).

    [A] Assuming (1 - 15) rules x 5000 node objects this would raise to (5000 - 75000) eval objects. This will bring in lot of complexity around cleaning up / latency.
    [B] 5k eval objects is better, but we are doubling the 'node-like' objects in a cluster. Cleaning up may be manageable with owner-references but I think we may uncover more complexities as we scale test.

    We can handle (2) in incremental designs along with planning for scale-tests. We could plan for (1) sooner,

  8. Karthik-K-N commented on Jan 27, 2026

    @Karthik-K-N
    Contributor

    I agree, In this case

    Removing node-references from rule-status: AppliedNodes, FailedNodes and NodeEvaluations.

    How the user is going to know whether the rule is applied to Node or not, Are events sufficient?

  9. Karthik-K-N commented on Jan 27, 2026

    @Karthik-K-N
    Contributor

    Given that I have done API changes previously I can take this up, If no one is currently working
    /assign

  10. k8s-triage-robot commented on Apr 27, 2026

    @k8s-triage-robot

    The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

    This bot triages un-triaged issues according to the following rules:

    • After 90d of inactivity, lifecycle/stale is applied
    • After 30d of inactivity since lifecycle/stale was applied, lifecycle/rotten is applied
    • After 30d of inactivity since lifecycle/rotten was applied, the issue is closed

    You can:

    • Mark this issue as fresh with /remove-lifecycle stale
    • Close this issue with /close
    • Offer to help out with Issue Triage

    Please send feedback to sig-contributor-experience at kubernetes/community.

    /lifecycle stale

  11. added
    lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale.
    on Apr 27, 2026
  12. Karthik-K-N commented on Apr 27, 2026

    @Karthik-K-N
    Contributor

    /remove-lifecycle stale

  13. removed
    lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale.
    on Apr 27, 2026
  14. k8s-triage-robot commented on Oct 17, 2026

    @k8s-triage-robot

    The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

    This bot triages un-triaged issues according to the following rules:

    • After 90d of inactivity, lifecycle/stale is applied
    • After 30d of inactivity since lifecycle/stale was applied, lifecycle/rotten is applied
    • After 30d of inactivity since lifecycle/rotten was applied, the issue is closed

    You can:

    • Mark this issue as fresh with /remove-lifecycle stale
    • Close this issue with /close
    • Offer to help out with Issue Triage

    Please send feedback to sig-contributor-experience at kubernetes/community.

    /lifecycle stale

  15. added
    lifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale.
    on Oct 17, 2026
  16. ajaysundark commented on Oct 18, 2026

    @ajaysundark
    ContributorAuthor

    /remove-lifecycle rotten

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

Metadata

Metadata

Assignees

Labels

kind/api-changeCategorizes issue or PR as related to adding, removing, or otherwise changing an APIlifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale.

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions