Skip to content

KEP-5517: Introduce DRA for Native Resources KEP#5755

Merged
k8s-ci-robot merged 1 commit intokubernetes:masterfrom
pravk03:native-dra
Feb 11, 2026
Merged

KEP-5517: Introduce DRA for Native Resources KEP#5755
k8s-ci-robot merged 1 commit intokubernetes:masterfrom
pravk03:native-dra

Conversation

@pravk03
Copy link
Contributor

@pravk03 pravk03 commented Dec 25, 2025

  • One-line PR description: Support native resource management through DRA.
  • Other comments:

@k8s-ci-robot
Copy link
Contributor

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@k8s-ci-robot k8s-ci-robot added do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. kind/kep Categorizes KEP tracking issues and PRs modifying the KEP directory sig/node Categorizes an issue or PR as relevant to SIG Node. labels Dec 25, 2025
@k8s-ci-robot k8s-ci-robot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. labels Dec 25, 2025
@pravk03 pravk03 force-pushed the native-dra branch 2 times, most recently from dfa064c to 02706c7 Compare December 26, 2025 19:53
@ffromani
Copy link
Contributor

/cc

@kad
Copy link
Member

kad commented Dec 29, 2025

/cc

@k8s-ci-robot k8s-ci-robot requested a review from kad December 29, 2025 17:24
@pravk03 pravk03 force-pushed the native-dra branch 3 times, most recently from df2979a to 9146641 Compare January 1, 2026 11:48
@pravk03 pravk03 marked this pull request as ready for review January 5, 2026 18:25
@k8s-ci-robot k8s-ci-robot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jan 5, 2026
@pravk03
Copy link
Contributor Author

pravk03 commented Jan 5, 2026

/cc @johnbelamaric

@mortent
Copy link
Member

mortent commented Jan 6, 2026

/wg device-management

@k8s-ci-robot k8s-ci-robot added the wg/device-management Categorizes an issue or PR as relevant to WG Device Management. label Jan 6, 2026
@pohly pohly moved this from 🆕 New to 👀 In review in Dynamic Resource Allocation Jan 7, 2026
Copy link
Member

@dom4ha dom4ha left a comment

Choose a reason for hiding this comment

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

Have you considered defining some sort of framework level consumable counter that different plugins could consume capacity from? DRA devices could use this counter using Consumable Capacity feature and NodeResources plugin would be extended somehow to use it as well.

It would be a bit cleaner conceptually, but we'd introduce quite significant framework change, which may be harder to get through the process.

#### Unreferenced Claims

If a `ResourceClaim` is listed in `pod.Spec.ResourceClaims` but not referenced by any container in `pod.Spec.Containers[*].Resources.Claims`.
The resources associated with this claim ARE still accounted for against the node's capacity. The DRA allocator reserves the devices for the pod,
Copy link
Member

Choose a reason for hiding this comment

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

What about in case of "AddPerReference" accounting policy?

Copy link
Member

Choose a reason for hiding this comment

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

Have you considered defining some sort of framework level consumable counter that different plugins could consume capacity from? DRA devices could use this counter using Consumable Capacity feature and NodeResources plugin would be extended somehow to use it as well.

So, one other option we thought about was simply to treat the NodeAllocatable as CounterSet that is implicitly always available with a well-known name. If we additionally layer in a concept of translating consumed capacity into counter set consumption (ie, a mapping between our current consumable capacity concept and our counter set concept), then we can solve many of the same problems.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

What about in case of "AddPerReference" accounting policy?

Updated this section. In the case of unreferenced claims, we should account for it once when we update NodeInfo irrespective of the accounting policy.

Copy link
Member

Choose a reason for hiding this comment

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

So, one other option we thought about was simply to treat the NodeAllocatable as CounterSet that is implicitly always available with a well-known name. If we additionally layer in a concept of translating consumed capacity into counter set consumption (ie, a mapping between our current consumable capacity concept and our counter set concept), then we can solve many of the same problems.

@johnbelamaric I believe this is something that we can still consider post-alpha. Note that it may also address the problem of scoring (node fit would see a counter aggregating native resource request coming from different plugins.

Maybe we could mention this option for the future consideration.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@dom4ha I have covered scoring in "Future Enhancements" section. In the current proposal (and draft implementation), scoring in NodeResourcesFit does not consider claim requests. But it should be possible to introduce unified scoring.

@pravk03 pravk03 force-pushed the native-dra branch 2 times, most recently from c5ae967 to b7623ed Compare February 5, 2026 07:35
@liggitt liggitt moved this to Assigned in API Reviews Feb 5, 2026
@pravk03
Copy link
Contributor Author

pravk03 commented Feb 9, 2026

Summary of modifications made KEP based on discussions. This should help reduce the scope and implementation complexity on the scheduler side.

  1. Removed AccountingPolicy from Device and DeviceClass APIs. For the Alpha scope, we will support a single accounting policy where claim requests is allocated once and is additive to the pod's standard resource requests. The AccountingPolicy field along with supported policies has been moved to the "Future Enhancements" section for reconsideration in Alpha 2/Beta.
  2. Sharing native resource claims between pods is excluded from alpha. The DynamicResources plugin will be updated to reject any pod that references a claim already in use by an existing pod. This reduces implementation complexity and allows for more discussion on node-level enforcement and cgroup management.
  3. Pod Level Resources, if specified will take precedence and determine the overall resource footprint. Added a validation step in the DynamicResources plugin to ensure that container requests (including native resource claims) do not exceed pod-level requests.

cc @johnbelamaric @dchen1107 @SergeyKanzhelev @dom4ha

@dom4ha
Copy link
Member

dom4ha commented Feb 10, 2026

/approve

Thanks for reducing the scope, which should be helpful.

Copy link
Member

@johnbelamaric johnbelamaric left a comment

Choose a reason for hiding this comment

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

PRR is fine for alpha

@pravk03
Copy link
Contributor Author

pravk03 commented Feb 10, 2026

/hold

(for sig-node lgtm)

@k8s-ci-robot k8s-ci-robot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Feb 10, 2026
- The Kubelet's admission handler is updated to consider native resource claims in `Pod.Status`.
- All unit and integration tests outlined in the Test Plan are implemented and verified.

#### Alpha2 / Beta
Copy link
Member

Choose a reason for hiding this comment

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

how do we know that we are moving in the right direction by making kubelet read native resources added by DRA from Pod Status? Is it part of "Gather feedback from alpha"?

Copy link
Contributor Author

@pravk03 pravk03 Feb 11, 2026

Choose a reason for hiding this comment

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

Do you mean populating the claim information in pod status rather than ResourceClaim status ?. Or the general idea of having kubelet having to look outside of pod.spec ?

@SergeyKanzhelev
Copy link
Member

The new scope seems more reasonable. I am still very un-easy on a few topics:

  1. Can we GA the Native Resources DRA plugin so people can start adopting it (before we fully GA-ed this KEP)? If so - we may want to define a migration plan or just say that it will be a different DRA plugin once this KEP is GA.
  2. Are there real world frameworks or users who lined up to try the fungibility between GPU and CPU? If we have nobody confirming that this is "likely" the way to go - it feels like we are implementing an expensive solution to the problem nobody is solving right now. Will we have enough feedback after alpha to decide on the path forward?

@johnbelamaric
Copy link
Member

/approve for PRR

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Feb 10, 2026
@pravk03
Copy link
Contributor Author

pravk03 commented Feb 10, 2026

  1. Can we GA the Native Resources DRA plugin so people can start adopting it (before we fully GA-ed this KEP)? If so - we may want to define a migration plan or just say that it will be a different DRA plugin once this KEP is GA.

I think the answer depends heavily on the specific plugin implementation. Specifically thinking of dra-driver-cpu, we can support adoption now using existing workarounds, such as mirroring claim requests in the Pod Spec. I view having Pod Level Resources define the overall shape (including claims) as one clean path for migrating to this KEP, but this definitely needs more thought. I am not sure if the same approach works for Memory or other drivers. @ffromani, since you are working on both CPU and Memory drivers, you may have any thoughts here?

On the contrary, without the understanding on native claims in scheduler and kubelet we would have to rely on workarounds (potentially different) in all the native resource driver implementations ?.

  1. Are there real world frameworks or users who lined up to try the fungibility between GPU and CPU? If we have nobody confirming that this is "likely" the way to go - it feels like we are implementing an expensive solution to the problem nobody is solving right now. Will we have enough feedback after alpha to decide on the path forward?

Yes, we have seen interest in GPU/CPU fungibility.

@ffromani
Copy link
Contributor

ffromani commented Feb 11, 2026

  1. Can we GA the Native Resources DRA plugin so people can start adopting it (before we fully GA-ed this KEP)? If so - we may want to define a migration plan or just say that it will be a different DRA plugin once this KEP is GA.

I think the answer depends heavily on the specific plugin implementation. Specifically thinking of dra-driver-cpu, we can support adoption now using existing workarounds, such as mirroring claim requests in the Pod Spec. I view having Pod Level Resources define the overall shape (including claims) as one clean path for migrating to this KEP, but this definitely needs more thought. I am not sure if the same approach works for Memory or other drivers. @ffromani, since you are working on both CPU and Memory drivers, you may have any thoughts here?

Like you, I tend to believe that combining with Pod Level Resources should work, but we need more data here.

I see the point about experimenting with drivers before adding important changes into core kubernetes. I'm not against it, even if I see clearly the value in this KEP. The issues with this approach (try external drivers first) boils down to chicken/egg problems:

  • the amount of workarounds needed is likely to limit significantly the UX, then the adoption, which provides us too little data
  • what drivers can actually do is limited, which in turn constraints negatively the adoption, which circles back to too little data.

What I'm trying to say is that I see the value in experimenting out of tree and I personally would encourage that but without some core kubernetes changes, be them in the scheduler, in the kubelet or likely both, what drivers for core resources can do is very limited, and that hampers early adoption.

@dchen1107
Copy link
Member

/lgtm
/approve

Thank you all for the extensive discussions, both online and offline. We’ve successfully narrowed the scope to the most essential components. While some open questions remain, I believe it's ready to move forward into the implementation phase to continue exploring those details.

Agreed with Sergey above to move cpu dra driver to GA without being blocked by this KEP, so that we can have early and more feedbacks from the users.

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Feb 11, 2026
@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: dchen1107, dom4ha, johnbelamaric, pravk03

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

The pull request process is described 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

@johnbelamaric
Copy link
Member

/hold cancel

@k8s-ci-robot k8s-ci-robot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Feb 11, 2026
@k8s-ci-robot k8s-ci-robot merged commit 7e0cdf1 into kubernetes:master Feb 11, 2026
4 checks passed
@k8s-ci-robot k8s-ci-robot added this to the v1.36 milestone Feb 11, 2026
@mortent mortent moved this from 👀 In review to ✅ Done in Dynamic Resource Allocation Feb 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api-review Categorizes an issue or PR as actively needing an API review. approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/kep Categorizes KEP tracking issues and PRs modifying the KEP directory lgtm "Looks good to me", indicates that a PR is ready to be merged. sig/node Categorizes an issue or PR as relevant to SIG Node. sig/scheduling Categorizes an issue or PR as relevant to SIG Scheduling. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. wg/device-management Categorizes an issue or PR as relevant to WG Device Management.

Projects

Archived in project
Status: Done
Status: Done

Development

Successfully merging this pull request may close these issues.