From be711ec82d8c0f548ac8fa5b43bb596aafadddae Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Fri, 5 Dec 2025 11:41:12 -0500 Subject: [PATCH 1/9] DRA GA, admin access, priority lists --- ...des-pods-allocate-dra-configure-about.adoc | 176 +++++++++++++++--- .../nodes-pods-allocate-dra-configure.adoc | 20 +- nodes/pods/nodes-pods-allocate-dra.adoc | 6 - 3 files changed, 150 insertions(+), 52 deletions(-) diff --git a/modules/nodes-pods-allocate-dra-configure-about.adoc b/modules/nodes-pods-allocate-dra-configure-about.adoc index 8db785a7c1a9..8d0745c5b8d6 100644 --- a/modules/nodes-pods-allocate-dra-configure-about.adoc +++ b/modules/nodes-pods-allocate-dra-configure-about.adoc @@ -17,7 +17,7 @@ The following example `DeviceClass` object selects any device that is managed by .Example device class object [source,yaml] ---- -apiVersion: resource.k8s.io/v1beta1 +apiVersion: resource.k8s.io/v1 kind: DeviceClass metadata: name: example-device-class @@ -34,12 +34,12 @@ The Dynamic Resource Allocation (DRA) driver on each node creates and manages _r Resource claim template:: Cluster administrators and operators can create a _resource claim template_ to request a GPU from a specific device class. Resource claim templates provide pods with access to separate, similar resources. {product-title} uses a resource claim template to generate a resource claim for the pod. Each resource claim that {product-title} generates from the template is bound to a specific pod. When the pod terminates, {product-title} deletes the corresponding resource claim. + -The following example resource claim template requests devices in the `example-device-class` device class. +The following example resource claim template uses CEL expressions to request devices in the `example-device-class` device class. Because the `firstAvailable` parameter is included in the request, the first requested device is allocated to the requesting pod. If the first device is not available, the second device is allocated. If neither device is available, the scheduler cannot create the requesting pod. Alternatively, you can specify `exactly` instead of `firstAvailable` to require that all devices must be available. For more information, see _Priority lists_ in this section. + .Example resource claim template object [source,yaml] ---- -apiVersion: resource.k8s.io/v1beta1 +apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: namespace: gpu-test1 @@ -48,20 +48,30 @@ spec: # ... spec: devices: - requests: - - name: gpu + requests: + - name: req-0 + firstAvailable: + - name: 1g-5gb deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" + - name: 1g-5gb-2 + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" ---- Resource claim:: Admins and operators can create a _resource claim_ to request a GPU from a specific device class. A resource claim differs from a resource claim template by allowing you to share GPUs with multiple pods. Also, resource claims are not deleted when a requesting pod is terminated. + -The following example resource claim template uses CEL expressions to request specific devices in the `example-device-class` device class that are of a specific size. +The following example resource claim uses CEL expressions to request specific devices in the `example-device-class` device class that are of a specific size. Because the `exactly` parameter is included in the request, all of the devices must be available before the scheduler can create the requesting pod. Alternatively, you can specify `firstAvailable` instead of `exactly` to create a prioritized list of devices, in case one of the requested devices is not available. For more information, see _Priority lists_ in this section. + .Example resource claim object [source,yaml] ---- -apiVersion: resource.k8s.io/v1beta1 +apiVersion: resource.k8s.io/v1 kind: ResourceClaim metadata: namespace: gpu-claim @@ -69,26 +79,138 @@ metadata: spec: devices: requests: - - name: 1g-5gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - - name: 1g-5gb-2 - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - - name: 2g-10gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" - - name: 3g-20gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" + - name: req-0 + exactly: + - name: 1g-5gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" + - name: 1g-5gb-2 + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" + - name: 2g-10gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" + - name: 3g-20gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" +---- + +Admin access:: +A cluster administrator can gain privileged access to a device that is in use by other users. This enables administrators to perform tasks such as monitoring the health and status of devices while ensuring that users can continue to use these devices with their workloads. ++ +To gain admin access, an administrator must create a resource claim or resource claim template with the `adminAccess: true` parameter in a namespace that includes the `resource.kubernetes.io/admin-access: "true"` label. Non-administrator users cannot access namespaces with this label. ++ +.Example namespace with admin access label +[source,yaml] +---- +apiVersion: v1 +kind: Namespace +metadata: + labels: + resource.kubernetes.io/admin-access: "true" +# ... +---- ++ +In the following example, the administrator is granted access to the `2g-10gb` device: ++ +.Example resource claim object with admin access +[source,yaml] +---- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + name: large-black-cat-claim-template +spec: + devices: + requests: + - name: req-0 + exactly: + - name: 2g-10gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" +---- ++ +-- +where: + +`spec.devices.requests.name.exactly.adminAccess:true`:: Specifies that the admin access mode is enabled for the specified device. +-- + +Priority lists:: +In both resource claim templates and resource claims, you can either require all requested devices be available before a pod can be scheduled, or create a prioritized list of two resources in case the first resource is not available. ++ +In the `ResourceClaimTemplate` or `ResourceClaim` object, specify `exactly` to require all devices to be available or `firstAvailable` to create a priority list. ++ +In the following example, the scheduler can create the pod if either requested device is available. The `2g-10gb` device is allocated to the pod first. If the `2g-10gb` device is not available, the `3g-20gb` device is allocated. ++ +.Example resource claim object with a priority list +[source,yaml] +---- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + name: large-black-cat-claim-template +spec: + devices: + requests: + - name: req-0 + firstAvailable: + - name: 2g-10gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" + - name: 3g-20gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" +---- ++ +In the following example, the scheduler can create the pod only if all of the requested devices are available. If any of the requested devices is not available, the scheduler cannot create the pod. ++ +.Example resource claim object with admin access +[source,yaml] +---- +apiVersion: resource.k8s.io/v1 +kind: ResourceClaimTemplate +metadata: + name: large-black-cat-claim-template +spec: + devices: + requests: + - name: req-0 + exactly: + - name: 1g-5gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" + - name: 1g-5gb-2 + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" + - name: 2g-10gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" + - name: 3g-20gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" ---- For more information on configuring resource claims, resource claim templates, see link:https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/["Dynamic Resource Allocation"] (Kubernetes documentation). diff --git a/modules/nodes-pods-allocate-dra-configure.adoc b/modules/nodes-pods-allocate-dra-configure.adoc index 01628a9671bb..cb3054c1a389 100644 --- a/modules/nodes-pods-allocate-dra-configure.adoc +++ b/modules/nodes-pods-allocate-dra-configure.adoc @@ -16,24 +16,6 @@ The example in the following procedure creates a resource claim template to assi //Remove for TP * The Nvidia GPU Operator is installed. For more information see "Adding Operators to a cluster" in the _Additional Resources_ section. * A resource slice has been created. * A resource claim and/or resource claim template has been created. -* You enabled the required Technology Preview features for your cluster by editing the `FeatureGate` CR named `cluster`: -+ -.Example `FeatureGate` CR -[source,yaml] ----- -apiVersion: config.openshift.io/v1 -kind: FeatureGate -metadata: - name: cluster -spec: - featureSet: TechPreviewNoUpgrade <1> ----- -<1> Enables the required features. -+ -[WARNING] -==== -Enabling the `TechPreviewNoUpgrade` feature set on your cluster cannot be undone and prevents minor version updates. This feature set allows you to enable these Technology Preview features on test clusters, where you can fully test them. Do not enable this feature set on production clusters. -==== .Procedure @@ -73,7 +55,7 @@ spec: resourceClaims: <2> - name: gpu-claim-template resourceClaimTemplateName: example-resource-claim-template - - name: gpu-claim + - name: gpu-devices resourceClaimName: example-resource-claim ---- <1> Specifies one or more resource claims to use with this container. diff --git a/nodes/pods/nodes-pods-allocate-dra.adoc b/nodes/pods/nodes-pods-allocate-dra.adoc index 347409ff70d2..302d173799b0 100644 --- a/nodes/pods/nodes-pods-allocate-dra.adoc +++ b/nodes/pods/nodes-pods-allocate-dra.adoc @@ -10,12 +10,6 @@ toc::[] // Naming taken from https://issues.redhat.com/browse/OCPSTRAT-2384. Is this correct? {attribute-based-full} enables fine-tuned control over graphics processing unit (GPU) resource allocation in {product-title}, allowing pods to request GPUs based on specific device attributes, including product name, GPU memory capacity, compute capability, vendor name and driver version. These attributes are exposed by a third-party Dynamic Resource Allocation (DRA) driver. -// Hiding until GA. The driver is not integrated in the TP version -// This attribute-based resource allocation is achieved through the integration of the NVIDIA Kubernetes DRA driver into OpenShift. - -:FeatureName: {attribute-based-full} -include::snippets/technology-preview.adoc[] - // The following include statements pull in the module files that comprise // the assembly. Include any combination of concept, procedure, or reference // modules required to cover the user story. You can also include other From c8d202b4be712241dfd7418877c4c9caafe43940 Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Fri, 5 Dec 2025 12:53:35 -0500 Subject: [PATCH 2/9] updated examples --- ...des-pods-allocate-dra-configure-about.adoc | 123 ++++++------------ 1 file changed, 41 insertions(+), 82 deletions(-) diff --git a/modules/nodes-pods-allocate-dra-configure-about.adoc b/modules/nodes-pods-allocate-dra-configure-about.adoc index 8d0745c5b8d6..e3dc37f5cdf8 100644 --- a/modules/nodes-pods-allocate-dra-configure-about.adoc +++ b/modules/nodes-pods-allocate-dra-configure-about.adoc @@ -27,6 +27,12 @@ spec: expression: |- device.driver == "driver.example.com" ---- ++ +-- +where: + +`spec.selectors`:: Specifies uses CEL expressions to request devices in the specified device class. +-- Resource slice:: The Dynamic Resource Allocation (DRA) driver on each node creates and manages _resource slices_ in the cluster. A resource slice represents one or more GPU resources that are attached to nodes. When a resource claim is created and used in a pod, {product-title} uses the resource slices to find nodes that have access to the requested resources. After finding an eligible resource slice for the resource claim, the {product-title} scheduler updates the resource claim with the allocation details, allocates resources to the resource claim, and schedules the pod onto a node that can access the resources. @@ -34,7 +40,7 @@ The Dynamic Resource Allocation (DRA) driver on each node creates and manages _r Resource claim template:: Cluster administrators and operators can create a _resource claim template_ to request a GPU from a specific device class. Resource claim templates provide pods with access to separate, similar resources. {product-title} uses a resource claim template to generate a resource claim for the pod. Each resource claim that {product-title} generates from the template is bound to a specific pod. When the pod terminates, {product-title} deletes the corresponding resource claim. + -The following example resource claim template uses CEL expressions to request devices in the `example-device-class` device class. Because the `firstAvailable` parameter is included in the request, the first requested device is allocated to the requesting pod. If the first device is not available, the second device is allocated. If neither device is available, the scheduler cannot create the requesting pod. Alternatively, you can specify `exactly` instead of `firstAvailable` to require that all devices must be available. For more information, see _Priority lists_ in this section. +The following example resource claim template uses CEL expressions to request devices in the `example-device-class` device class. Because the `firstAvailable` parameter is included in the request, the first requested device is allocated to the requesting pod. If the first device is not available, the second device is allocated. If neither device is available, the scheduler cannot create the requesting pod. + .Example resource claim template object [source,yaml] @@ -42,32 +48,47 @@ The following example resource claim template uses CEL expressions to request de apiVersion: resource.k8s.io/v1 kind: ResourceClaimTemplate metadata: - namespace: gpu-test1 - name: gpu-claim-template + namespace: gpu-claim + name: gpu-devices spec: -# ... spec: devices: - requests: - - name: req-0 - firstAvailable: - - name: 1g-5gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - - name: 1g-5gb-2 + requests: + - name: req-0 + firstAvailable: + - name: 2g-10gb deviceClassName: example-device-class selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" + - cel: + expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" + - name: 3g-20gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" ---- ++ +-- +where: + +`spec.devices.requests.name`:: Configures a resource request. + +`spec.devices.requests.name.firstAvailable/exactly:`:: Specifies whether all of the requested devices must be available. This value must be `exactly` or `firstAvailable`. +* If `exactly`, all of the devices must be available before the scheduler can create the requesting pod. If any of the requested devices is not available, the scheduler cannot create the pod. +* If `firstAvailable`, the first requested device is allocated to the requesting pod. If the first device is not available, the second device is allocated. If neither device is available, the scheduler cannot create the requesting pod. + +`spec.devices.requests.deviceClassName`:: Specifies which device class to use with this request. + +`spec.devices.requests.selectors`:: Specifies uses CEL expressions to request devices in the specified device class. +-- Resource claim:: Admins and operators can create a _resource claim_ to request a GPU from a specific device class. A resource claim differs from a resource claim template by allowing you to share GPUs with multiple pods. Also, resource claims are not deleted when a requesting pod is terminated. + The following example resource claim uses CEL expressions to request specific devices in the `example-device-class` device class that are of a specific size. Because the `exactly` parameter is included in the request, all of the devices must be available before the scheduler can create the requesting pod. Alternatively, you can specify `firstAvailable` instead of `exactly` to create a prioritized list of devices, in case one of the requested devices is not available. For more information, see _Priority lists_ in this section. + +In the following example resource claim, the scheduler can create the pod only if all of the requested devices are available. If any of the requested devices is not available, the scheduler cannot create the pod. ++ .Example resource claim object [source,yaml] ---- @@ -86,11 +107,6 @@ spec: selectors: - cel: expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - - name: 1g-5gb-2 - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - name: 2g-10gb deviceClassName: example-device-class selectors: @@ -133,7 +149,8 @@ spec: requests: - name: req-0 exactly: - - name: 2g-10gb + allocationMode: All + adminAccess: true deviceClassName: example-device-class selectors: - cel: @@ -149,69 +166,11 @@ where: Priority lists:: In both resource claim templates and resource claims, you can either require all requested devices be available before a pod can be scheduled, or create a prioritized list of two resources in case the first resource is not available. + -In the `ResourceClaimTemplate` or `ResourceClaim` object, specify `exactly` to require all devices to be available or `firstAvailable` to create a priority list. +In the `ResourceClaimTemplate` or `ResourceClaim` object, you must specify `exactly` to require all devices to be available or `firstAvailable` to create a priority list. + -In the following example, the scheduler can create the pod if either requested device is available. The `2g-10gb` device is allocated to the pod first. If the `2g-10gb` device is not available, the `3g-20gb` device is allocated. +If you specify `firstAvailable`, the scheduler can create the pod if either of the two requested devices is available. The first requested device in the list is allocated to the pod first. If the first device is not available, the second device is allocated. + -.Example resource claim object with a priority list -[source,yaml] ----- -apiVersion: resource.k8s.io/v1 -kind: ResourceClaimTemplate -metadata: - name: large-black-cat-claim-template -spec: - devices: - requests: - - name: req-0 - firstAvailable: - - name: 2g-10gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" - - name: 3g-20gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" ----- -+ -In the following example, the scheduler can create the pod only if all of the requested devices are available. If any of the requested devices is not available, the scheduler cannot create the pod. -+ -.Example resource claim object with admin access -[source,yaml] ----- -apiVersion: resource.k8s.io/v1 -kind: ResourceClaimTemplate -metadata: - name: large-black-cat-claim-template -spec: - devices: - requests: - - name: req-0 - exactly: - - name: 1g-5gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - - name: 1g-5gb-2 - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - - name: 2g-10gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" - - name: 3g-20gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" ----- +If you specify `exactly`, the scheduler can create the pod only if all of the requested devices are available. If any of the requested devices is not available, the scheduler cannot create the pod. For more information on configuring resource claims, resource claim templates, see link:https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/["Dynamic Resource Allocation"] (Kubernetes documentation). From 343bf653c6197ef46ad0990a0a589cff7851696d Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Tue, 9 Dec 2025 11:15:18 -0500 Subject: [PATCH 3/9] Edits per sairameshv --- ...des-pods-allocate-dra-configure-about.adoc | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/modules/nodes-pods-allocate-dra-configure-about.adoc b/modules/nodes-pods-allocate-dra-configure-about.adoc index e3dc37f5cdf8..e17037ec427a 100644 --- a/modules/nodes-pods-allocate-dra-configure-about.adoc +++ b/modules/nodes-pods-allocate-dra-configure-about.adoc @@ -40,7 +40,9 @@ The Dynamic Resource Allocation (DRA) driver on each node creates and manages _r Resource claim template:: Cluster administrators and operators can create a _resource claim template_ to request a GPU from a specific device class. Resource claim templates provide pods with access to separate, similar resources. {product-title} uses a resource claim template to generate a resource claim for the pod. Each resource claim that {product-title} generates from the template is bound to a specific pod. When the pod terminates, {product-title} deletes the corresponding resource claim. + -The following example resource claim template uses CEL expressions to request devices in the `example-device-class` device class. Because the `firstAvailable` parameter is included in the request, the first requested device is allocated to the requesting pod. If the first device is not available, the second device is allocated. If neither device is available, the scheduler cannot create the requesting pod. +For the device request in a resource claim template, you must specify either a list of one or more device requests that the scheduler must meet, or a provide a prioritized list of requests for the scheduler to choose from. For more information, see _Prioritized list_ in this section. ++ +The following example resource claim template contains a device request with three sub-requests. Here, the `firstAvailable` parameter provides a prioritized list of requests. The scheduler checks the availability of each device in order and allocates the first available device when creating the pod. Each request uses a CEL expression to a device from the `example-device-class` device class. + .Example resource claim template object [source,yaml] @@ -56,6 +58,11 @@ spec: requests: - name: req-0 firstAvailable: + - name: 1g-5gb + deviceClassName: example-device-class + selectors: + - cel: + expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - name: 2g-10gb deviceClassName: example-device-class selectors: @@ -63,7 +70,7 @@ spec: expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" - name: 3g-20gb deviceClassName: example-device-class - selectors: + selectors: - cel: expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" ---- @@ -71,23 +78,21 @@ spec: -- where: -`spec.devices.requests.name`:: Configures a resource request. +`spec.spec.devices.requests`:: Configures a resource request. -`spec.devices.requests.name.firstAvailable/exactly:`:: Specifies whether all of the requested devices must be available. This value must be `exactly` or `firstAvailable`. -* If `exactly`, all of the devices must be available before the scheduler can create the requesting pod. If any of the requested devices is not available, the scheduler cannot create the pod. -* If `firstAvailable`, the first requested device is allocated to the requesting pod. If the first device is not available, the second device is allocated. If neither device is available, the scheduler cannot create the requesting pod. +`spec.spec.devices.requests.firstAvailable:`:: Specifies whether all of the requested devices must be available. In this example, `firstAvailable`. specifies two sub-requests, named: `2g-10gb` and `3g-20gb`. Alternatively, you can specify `exactly` to request one specific device. -`spec.devices.requests.deviceClassName`:: Specifies which device class to use with this request. +`spec.spec.devices.requests.deviceClassName`:: Specifies which device class to use with this request. -`spec.devices.requests.selectors`:: Specifies uses CEL expressions to request devices in the specified device class. +`spec.spec.devices.requests.selectors`:: Specifies uses CEL expressions to request specific devices from the specified device class. -- Resource claim:: Admins and operators can create a _resource claim_ to request a GPU from a specific device class. A resource claim differs from a resource claim template by allowing you to share GPUs with multiple pods. Also, resource claims are not deleted when a requesting pod is terminated. + -The following example resource claim uses CEL expressions to request specific devices in the `example-device-class` device class that are of a specific size. Because the `exactly` parameter is included in the request, all of the devices must be available before the scheduler can create the requesting pod. Alternatively, you can specify `firstAvailable` instead of `exactly` to create a prioritized list of devices, in case one of the requested devices is not available. For more information, see _Priority lists_ in this section. +For the device request in a resource claim, you must specify either a list of one or more device requests that the scheduler must meet, or a provide a prioritized list of requests for the scheduler to choose from. For more information, see _Prioritized list_ in this section. + -In the following example resource claim, the scheduler can create the pod only if all of the requested devices are available. If any of the requested devices is not available, the scheduler cannot create the pod. +The following example resource claim uses a CEL expression to request three device in the `example-device-class` device class. Here, the `exactly` parameter indicates that all of the requested devices must be available before the scheduler can allocate the devices when creating the pod. + .Example resource claim object [source,yaml] @@ -119,6 +124,13 @@ spec: expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" ---- +Prioritized list:: +In the `ResourceClaimTemplate` or `ResourceClaim` object, you must specify either `exactly` to request a specific device or `firstAvailable` to create a prioritized list of devices, in case the primary choice is not available. ++ +* `spec.devices.requests.firstAvailable` specifies multiple requests for a device, of which only one device needs to be available before the scheduler can create the requesting pod. The scheduler checks the availability of the devices in the order listed and selects the first available device. The scheduler can create the pod if one requested devices is available. + +* `spec.devices.requests.exactly` specifies one or more requests for a device, for which all of the devices must be available before the scheduler can create the requesting pod. Each of the devices must the request exactly for the request to be satisfied. If any of the requested devices is not available, the scheduler cannot create the pod. + Admin access:: A cluster administrator can gain privileged access to a device that is in use by other users. This enables administrators to perform tasks such as monitoring the health and status of devices while ensuring that users can continue to use these devices with their workloads. + @@ -160,18 +172,9 @@ spec: -- where: -`spec.devices.requests.name.exactly.adminAccess:true`:: Specifies that the admin access mode is enabled for the specified device. +`spec.devices.requests.exactly.adminAccess:true`:: Specifies that the admin access mode is enabled for the specified device. -- -Priority lists:: -In both resource claim templates and resource claims, you can either require all requested devices be available before a pod can be scheduled, or create a prioritized list of two resources in case the first resource is not available. -+ -In the `ResourceClaimTemplate` or `ResourceClaim` object, you must specify `exactly` to require all devices to be available or `firstAvailable` to create a priority list. -+ -If you specify `firstAvailable`, the scheduler can create the pod if either of the two requested devices is available. The first requested device in the list is allocated to the pod first. If the first device is not available, the second device is allocated. -+ -If you specify `exactly`, the scheduler can create the pod only if all of the requested devices are available. If any of the requested devices is not available, the scheduler cannot create the pod. - For more information on configuring resource claims, resource claim templates, see link:https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/["Dynamic Resource Allocation"] (Kubernetes documentation). For information on adding resource claims to pods, see "Adding resource claims to pods". From b2f991c7ad88c05fad79cfb11186b86c87d6ad2c Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Tue, 9 Dec 2025 14:27:47 -0500 Subject: [PATCH 4/9] edits and restructure --- modules/nodes-pods-allocate-dra-configure-about.adoc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/nodes-pods-allocate-dra-configure-about.adoc b/modules/nodes-pods-allocate-dra-configure-about.adoc index e17037ec427a..365fcf497ab4 100644 --- a/modules/nodes-pods-allocate-dra-configure-about.adoc +++ b/modules/nodes-pods-allocate-dra-configure-about.adoc @@ -9,6 +9,9 @@ // Taken from https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/#terminology {attribute-based-full} uses the following objects to provide the core graphics processing unit (GPU) allocation functionality. All of these API kinds are included in the `resource.k8s.io/v1beta2` API group. +DRA Driver:: +A Dynamic Resource Allocation (DRA) driver manages and exposes specialized resources within your cluster by interacting with the underlying hardware and making it available to the {produt-title} control plane. You must install a DRA driver in your cluster. Installation of the DRA driver is beyond the scope of this documentation. + Device class:: A device class is a category of devices that pods can claim and how to select specific device attributes in claims. Some device drivers contain their own device class. Alternatively, an administrator can create device classes. A device class contains a device selector, which is a link:https://cel.dev/[common expression language (CEL)] expression that must evaluate to true if a device satisfies the request. + @@ -35,7 +38,7 @@ where: -- Resource slice:: -The Dynamic Resource Allocation (DRA) driver on each node creates and manages _resource slices_ in the cluster. A resource slice represents one or more GPU resources that are attached to nodes. When a resource claim is created and used in a pod, {product-title} uses the resource slices to find nodes that have access to the requested resources. After finding an eligible resource slice for the resource claim, the {product-title} scheduler updates the resource claim with the allocation details, allocates resources to the resource claim, and schedules the pod onto a node that can access the resources. +The DRA driver on each node creates and manages _resource slices_ in the cluster. A resource slice represents one or more GPU resources that are attached to nodes. When a resource claim is created and used in a pod, {product-title} uses the resource slices to find nodes that have access to the requested resources. After finding an eligible resource slice for the resource claim, the {product-title} scheduler updates the resource claim with the allocation details, allocates resources to the resource claim, and schedules the pod onto a node that can access the resources. Resource claim template:: Cluster administrators and operators can create a _resource claim template_ to request a GPU from a specific device class. Resource claim templates provide pods with access to separate, similar resources. {product-title} uses a resource claim template to generate a resource claim for the pod. Each resource claim that {product-title} generates from the template is bound to a specific pod. When the pod terminates, {product-title} deletes the corresponding resource claim. From cf28b638f9e2d91a5e505420bfd71588798301ea Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Wed, 10 Dec 2025 18:10:02 -0500 Subject: [PATCH 5/9] edits per sairameshv and other things --- _topic_maps/_topic_map.yml | 2 +- modules/nodes-pods-allocate-dra-about.adoc | 5 +--- ...des-pods-allocate-dra-configure-about.adoc | 23 ++++--------------- .../nodes-pods-allocate-dra-configure.adoc | 2 +- nodes/pods/nodes-pods-allocate-dra.adoc | 11 +++++---- 5 files changed, 14 insertions(+), 29 deletions(-) diff --git a/_topic_maps/_topic_map.yml b/_topic_maps/_topic_map.yml index e3763f32faf9..22bcdc24380b 100644 --- a/_topic_maps/_topic_map.yml +++ b/_topic_maps/_topic_map.yml @@ -2682,7 +2682,7 @@ Topics: Distros: openshift-enterprise,openshift-origin - Name: Placing pods on specific nodes using node selectors File: nodes-pods-node-selectors - - Name: Allocating GPUs to pods + - Name: Allocating GPUs to pods by using DRA File: nodes-pods-allocate-dra Distros: openshift-enterprise,openshift-origin - Name: Run Once Duration Override Operator diff --git a/modules/nodes-pods-allocate-dra-about.adoc b/modules/nodes-pods-allocate-dra-about.adoc index b4c3deef1901..f1e1669b38f8 100644 --- a/modules/nodes-pods-allocate-dra-about.adoc +++ b/modules/nodes-pods-allocate-dra-about.adoc @@ -7,10 +7,7 @@ = About allocating GPUs to workloads // Taken from https://issues.redhat.com/browse/OCPSTRAT-1756 -{attribute-based-full} enables pods to request graphics processing units (GPU) based on specific device attributes. This ensures that each pod receives the exact GPU specifications it requires. - -// Hiding until GA. The driver is not integrated in the TP version. -// With the NVIDIA Kubernetes DRA driver integrated into OpenShift,by the NVIDIA GPU Operator with a DRA driver +{attribute-based-full} enables pods to request graphics processing units (GPU) based on specific device attributes. This ensures that each pod is scheduled on a node with the exact GPU specifications it requires. Attribute-based resource allocation requires that you install a Dynamic Resource Allocation (DRA) driver. A DRA driver is a third-party application that runs on each node in your cluster to interface with the hardware of that node. diff --git a/modules/nodes-pods-allocate-dra-configure-about.adoc b/modules/nodes-pods-allocate-dra-configure-about.adoc index 365fcf497ab4..5cf0e61481a5 100644 --- a/modules/nodes-pods-allocate-dra-configure-about.adoc +++ b/modules/nodes-pods-allocate-dra-configure-about.adoc @@ -7,10 +7,10 @@ = About GPU allocation objects // Taken from https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/#terminology -{attribute-based-full} uses the following objects to provide the core graphics processing unit (GPU) allocation functionality. All of these API kinds are included in the `resource.k8s.io/v1beta2` API group. +{attribute-based-full} uses the following objects to ensure that a workload is scheduled on a node with the graphics processing unit (GPU) specifications it needs. All of these API kinds are included in the `resource.k8s.io/v1beta2` API group. DRA Driver:: -A Dynamic Resource Allocation (DRA) driver manages and exposes specialized resources within your cluster by interacting with the underlying hardware and making it available to the {produt-title} control plane. You must install a DRA driver in your cluster. Installation of the DRA driver is beyond the scope of this documentation. +A Dynamic Resource Allocation (DRA) driver manages and exposes specialized resources within your cluster by interacting with the underlying hardware and advertising it to the {produt-title} control plane. You must install a DRA driver in your cluster. Installation of the DRA driver is beyond the scope of this documentation. Some DRA\ device drivers can also slice GPU memory, making it available to multiple workloads. Device class:: A device class is a category of devices that pods can claim and how to select specific device attributes in claims. Some device drivers contain their own device class. Alternatively, an administrator can create device classes. A device class contains a device selector, which is a link:https://cel.dev/[common expression language (CEL)] expression that must evaluate to true if a device satisfies the request. @@ -61,11 +61,6 @@ spec: requests: - name: req-0 firstAvailable: - - name: 1g-5gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - name: 2g-10gb deviceClassName: example-device-class selectors: @@ -83,7 +78,7 @@ where: `spec.spec.devices.requests`:: Configures a resource request. -`spec.spec.devices.requests.firstAvailable:`:: Specifies whether all of the requested devices must be available. In this example, `firstAvailable`. specifies two sub-requests, named: `2g-10gb` and `3g-20gb`. Alternatively, you can specify `exactly` to request one specific device. +`spec.spec.devices.requests.firstAvailable:`:: Specifies whether the list of requested devices is a prioritized list. In this example, `firstAvailable` specifies two sub-requests, named: `2g-10gb` and `3g-20gb` in a prioritized list. Alternatively, you can specify `exactly` to request one specific device. `spec.spec.devices.requests.deviceClassName`:: Specifies which device class to use with this request. @@ -95,7 +90,7 @@ Admins and operators can create a _resource claim_ to request a GPU from a speci + For the device request in a resource claim, you must specify either a list of one or more device requests that the scheduler must meet, or a provide a prioritized list of requests for the scheduler to choose from. For more information, see _Prioritized list_ in this section. + -The following example resource claim uses a CEL expression to request three device in the `example-device-class` device class. Here, the `exactly` parameter indicates that all of the requested devices must be available before the scheduler can allocate the devices when creating the pod. +The following example resource claim uses a CEL expression to request one device in the `example-device-class` device class. Here, the `exactly` parameter indicates that the specific requested device must be available before the scheduler can allocate the device when creating the pod. + .Example resource claim object [source,yaml] @@ -110,21 +105,11 @@ spec: requests: - name: req-0 exactly: - - name: 1g-5gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '1g.5gb'" - name: 2g-10gb deviceClassName: example-device-class selectors: - cel: expression: "device.attributes['driver.example.com'].profile == '2g.10gb'" - - name: 3g-20gb - deviceClassName: example-device-class - selectors: - - cel: - expression: "device.attributes['driver.example.com'].profile == '3g.20gb'" ---- Prioritized list:: diff --git a/modules/nodes-pods-allocate-dra-configure.adoc b/modules/nodes-pods-allocate-dra-configure.adoc index cb3054c1a389..f0714c4b2112 100644 --- a/modules/nodes-pods-allocate-dra-configure.adoc +++ b/modules/nodes-pods-allocate-dra-configure.adoc @@ -6,7 +6,7 @@ [id="nodes-pods-allocate-dra-configure_{context}"] = Adding resource claims to pods -{attribute-based-full} uses resource claims and resource claim templates to allow you to request specific graphics processing units (GPU) for the containers in your pods. Resource claims can be used with multiple containers, but resource claim templates can be used with only one container. For more information, see "About configuring device allocation by using device attributes" in the _Additional Resources_ section. +{attribute-based-full} uses resource claims and resource claim templates to allow you to request your workloads to be shecduled on nodes with specific graphics processing units (GPU) specifications. Resource claims can be used with multiple containers, but resource claim templates can be used with only one container. For more information, see "About configuring device allocation by using device attributes" in the _Additional Resources_ section. The example in the following procedure creates a resource claim template to assign a specific GPU to `container0` and a resource claim to share a GPU between `container1` and `container2`. diff --git a/nodes/pods/nodes-pods-allocate-dra.adoc b/nodes/pods/nodes-pods-allocate-dra.adoc index 302d173799b0..7c4743ca45b9 100644 --- a/nodes/pods/nodes-pods-allocate-dra.adoc +++ b/nodes/pods/nodes-pods-allocate-dra.adoc @@ -1,14 +1,18 @@ :_mod-docs-content-type: ASSEMBLY :context: nodes-pods-allocate-dra [id="nodes-pods-allocate-dra"] -= Allocating GPUs to pods += Allocating GPUs to pods by using DRA include::_attributes/common-attributes.adoc[] toc::[] // Taken from https://issues.redhat.com/browse/OCPSTRAT-1756 // Naming taken from https://issues.redhat.com/browse/OCPSTRAT-2384. Is this correct? -{attribute-based-full} enables fine-tuned control over graphics processing unit (GPU) resource allocation in {product-title}, allowing pods to request GPUs based on specific device attributes, including product name, GPU memory capacity, compute capability, vendor name and driver version. These attributes are exposed by a third-party Dynamic Resource Allocation (DRA) driver. + +[role="_abstract"] +{attribute-based-full} enables fine-tuned control over graphics processing unit (GPU) resource allocation in {product-title}, allowing pods to request GPUs based on specific device attributes, including product name, GPU memory capacity, compute capability, vendor name and driver version. These attributes are exposed by a third-party Dynamic Resource Allocation (DRA) driver. Having access to these attributes allows {product-title} to schedule a workload on a node that has the specific devices it needs. + +This workflow provides significant improvement in the device allocation workflow when compared to device plugins, which require per-container device requests, do not support device sharing, and do not support expression-based device filtering. // The following include statements pull in the module files that comprise // the assembly. Include any combination of concept, procedure, or reference @@ -26,6 +30,5 @@ include::modules/nodes-pods-allocate-dra-configure.adoc[leveloffset=+1] [role="_additional-resources"] .Additional resources -// Hiding until GA link:https://catalog.ngc.nvidia.com/orgs/nvidia/helm-charts/nvidia-dra-driver-gpu?version=25.3.2[NVIDIA DRA Driver for GPUs] -// Hiding until GA * xref:../../operators/admin/olm-adding-operators-to-cluster.adoc#olm-adding-operators-to-a-cluster[Adding Operators to a cluster] + * xref:../../nodes/pods/nodes-pods-allocate-dra.adoc#nodes-pods-allocate-dra-configure-about_nodes-pods-allocate-dra[About configuring device allocation by using device attributes] From 561fede118330fb30fae2f7a6a81d2316dd1900a Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Thu, 11 Dec 2025 08:56:14 -0500 Subject: [PATCH 6/9] edits --- modules/nodes-pods-allocate-dra-about.adoc | 7 ++++--- modules/nodes-pods-allocate-dra-configure-about.adoc | 8 +++----- modules/nodes-pods-allocate-dra-configure.adoc | 3 ++- nodes/pods/nodes-pods-allocate-dra.adoc | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/nodes-pods-allocate-dra-about.adoc b/modules/nodes-pods-allocate-dra-about.adoc index f1e1669b38f8..9b0f8c7a4b87 100644 --- a/modules/nodes-pods-allocate-dra-about.adoc +++ b/modules/nodes-pods-allocate-dra-about.adoc @@ -4,12 +4,13 @@ :_mod-docs-content-type: CONCEPT [id="nodes-pods-allocate-dra-about_{context}"] -= About allocating GPUs to workloads += About GPU attributes // Taken from https://issues.redhat.com/browse/OCPSTRAT-1756 -{attribute-based-full} enables pods to request graphics processing units (GPU) based on specific device attributes. This ensures that each pod is scheduled on a node with the exact GPU specifications it requires. +[role="_abstract"] +You can use {attribute-based-full} enables pods to request graphics processing units (GPU) based on specific device attributes. This ensures that each pod is scheduled on a node with the exact GPU specifications it requires. These attributes are advertised to the cluster by using a Dynamic Resource Allocation (DRA) driver, a third-party application that runs on each node in your cluster. -Attribute-based resource allocation requires that you install a Dynamic Resource Allocation (DRA) driver. A DRA driver is a third-party application that runs on each node in your cluster to interface with the hardware of that node. +The (DRA) driver manages and exposes specialized resources within your cluster by interacting with the underlying hardware and advertising it to the {produt-title} control plane. You must install a DRA driver in your cluster. Installation of the DRA driver is beyond the scope of this documentation. Some DRA\ device drivers can also slice GPU memory, making it available to multiple workloads. The DRA driver advertises several GPU device attributes that {product-title} can use for precise GPU selection, including the following attributes: diff --git a/modules/nodes-pods-allocate-dra-configure-about.adoc b/modules/nodes-pods-allocate-dra-configure-about.adoc index 5cf0e61481a5..c2d54065a906 100644 --- a/modules/nodes-pods-allocate-dra-configure-about.adoc +++ b/modules/nodes-pods-allocate-dra-configure-about.adoc @@ -4,13 +4,11 @@ :_mod-docs-content-type: REFERENCE [id="nodes-pods-allocate-dra-configure-about_{context}"] -= About GPU allocation objects += About GPU allocation objects and concepts // Taken from https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/#terminology -{attribute-based-full} uses the following objects to ensure that a workload is scheduled on a node with the graphics processing unit (GPU) specifications it needs. All of these API kinds are included in the `resource.k8s.io/v1beta2` API group. - -DRA Driver:: -A Dynamic Resource Allocation (DRA) driver manages and exposes specialized resources within your cluster by interacting with the underlying hardware and advertising it to the {produt-title} control plane. You must install a DRA driver in your cluster. Installation of the DRA driver is beyond the scope of this documentation. Some DRA\ device drivers can also slice GPU memory, making it available to multiple workloads. +[role="_abstract"] +You can use the following {attribute-based-full} objects and concepts to ensure that a workload is scheduled on a node with the graphics processing unit (GPU) specifications it needs. All of these API kinds are included in the `resource.k8s.io/v1beta2` API group. You should be familiar with these objects before proceeding. Device class:: A device class is a category of devices that pods can claim and how to select specific device attributes in claims. Some device drivers contain their own device class. Alternatively, an administrator can create device classes. A device class contains a device selector, which is a link:https://cel.dev/[common expression language (CEL)] expression that must evaluate to true if a device satisfies the request. diff --git a/modules/nodes-pods-allocate-dra-configure.adoc b/modules/nodes-pods-allocate-dra-configure.adoc index f0714c4b2112..eae15669b6ce 100644 --- a/modules/nodes-pods-allocate-dra-configure.adoc +++ b/modules/nodes-pods-allocate-dra-configure.adoc @@ -6,7 +6,8 @@ [id="nodes-pods-allocate-dra-configure_{context}"] = Adding resource claims to pods -{attribute-based-full} uses resource claims and resource claim templates to allow you to request your workloads to be shecduled on nodes with specific graphics processing units (GPU) specifications. Resource claims can be used with multiple containers, but resource claim templates can be used with only one container. For more information, see "About configuring device allocation by using device attributes" in the _Additional Resources_ section. +[role="_abstract"] +You can use resource claims and resource claim templates with {attribute-based-full} to allow you to request your workloads to be shecduled on nodes with specific graphics processing units (GPU) specifications. Resource claims can be used with multiple containers, but resource claim templates can be used with only one container. For more information, see "About configuring device allocation by using device attributes" in the _Additional Resources_ section. The example in the following procedure creates a resource claim template to assign a specific GPU to `container0` and a resource claim to share a GPU between `container1` and `container2`. diff --git a/nodes/pods/nodes-pods-allocate-dra.adoc b/nodes/pods/nodes-pods-allocate-dra.adoc index 7c4743ca45b9..1423628efdf0 100644 --- a/nodes/pods/nodes-pods-allocate-dra.adoc +++ b/nodes/pods/nodes-pods-allocate-dra.adoc @@ -10,7 +10,7 @@ toc::[] // Naming taken from https://issues.redhat.com/browse/OCPSTRAT-2384. Is this correct? [role="_abstract"] -{attribute-based-full} enables fine-tuned control over graphics processing unit (GPU) resource allocation in {product-title}, allowing pods to request GPUs based on specific device attributes, including product name, GPU memory capacity, compute capability, vendor name and driver version. These attributes are exposed by a third-party Dynamic Resource Allocation (DRA) driver. Having access to these attributes allows {product-title} to schedule a workload on a node that has the specific devices it needs. +You can use {attribute-based-full} to enable fine-tuned control over graphics processing unit (GPU) resource allocation in {product-title}, allowing pods to request GPUs based on specific device attributes, including product name, GPU memory capacity, compute capability, vendor name and driver version. Having access to these attributes, which are exposed by a third-party Dynamic Resource Allocation (DRA) drive, allows {product-title} to schedule a workload on a node that has the specific devices it needs. This workflow provides significant improvement in the device allocation workflow when compared to device plugins, which require per-container device requests, do not support device sharing, and do not support expression-based device filtering. From 40e39fff68bcf6eca5fea05f7d16ae907e4da79a Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Thu, 11 Dec 2025 09:15:27 -0500 Subject: [PATCH 7/9] edits --- modules/nodes-pods-allocate-dra-configure-about.adoc | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/nodes-pods-allocate-dra-configure-about.adoc b/modules/nodes-pods-allocate-dra-configure-about.adoc index c2d54065a906..e65efb196c6c 100644 --- a/modules/nodes-pods-allocate-dra-configure-about.adoc +++ b/modules/nodes-pods-allocate-dra-configure-about.adoc @@ -161,6 +161,4 @@ where: `spec.devices.requests.exactly.adminAccess:true`:: Specifies that the admin access mode is enabled for the specified device. -- -For more information on configuring resource claims, resource claim templates, see link:https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/["Dynamic Resource Allocation"] (Kubernetes documentation). - For information on adding resource claims to pods, see "Adding resource claims to pods". From a87c9323c6ef4f42c54457d24b5a0e43fc076495 Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Tue, 16 Dec 2025 10:14:04 -0500 Subject: [PATCH 8/9] edits --- ...des-pods-allocate-dra-configure-about.adoc | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/modules/nodes-pods-allocate-dra-configure-about.adoc b/modules/nodes-pods-allocate-dra-configure-about.adoc index e65efb196c6c..7d08ac3b3bee 100644 --- a/modules/nodes-pods-allocate-dra-configure-about.adoc +++ b/modules/nodes-pods-allocate-dra-configure-about.adoc @@ -38,6 +38,43 @@ where: Resource slice:: The DRA driver on each node creates and manages _resource slices_ in the cluster. A resource slice represents one or more GPU resources that are attached to nodes. When a resource claim is created and used in a pod, {product-title} uses the resource slices to find nodes that have access to the requested resources. After finding an eligible resource slice for the resource claim, the {product-title} scheduler updates the resource claim with the allocation details, allocates resources to the resource claim, and schedules the pod onto a node that can access the resources. +.Example resource claim template object +[source,yaml] +---- +apiVersion: v1 +items: +- apiVersion: resource.k8s.io/v1 + kind: ResourceSlice +# ... +spec: + driver: driver.example.com + nodeName: dra-example-driver + pool: + generation: 0 + name: dra-example-driver + resourceSliceCount: 1 + devices: + - attributes: + driverVersion: + version: 1.0.0 + index: + int: 0 + model: + string: LATEST-GPU-MODEL + uuid: + string: gpu-18db0e85-99e9-c746-8531-ffeb86328b39 + capacity: + memory: + value: 10Gb + name: 2g-10gb +# ... +---- +where: + +`spec.driver`:: Specifies the name of the DRA driver, which you can specify in a device class. + +`spec.devices.attributes`:: Specifies a device that you can allocated by using resource claim or resource claim template. + Resource claim template:: Cluster administrators and operators can create a _resource claim template_ to request a GPU from a specific device class. Resource claim templates provide pods with access to separate, similar resources. {product-title} uses a resource claim template to generate a resource claim for the pod. Each resource claim that {product-title} generates from the template is bound to a specific pod. When the pod terminates, {product-title} deletes the corresponding resource claim. + From 98e4e3b319838aa0c5cef365b38ece8584e1b94e Mon Sep 17 00:00:00 2001 From: Michael Burke Date: Tue, 16 Dec 2025 11:04:56 -0500 Subject: [PATCH 9/9] edits --- modules/nodes-pods-allocate-dra-configure-about.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/nodes-pods-allocate-dra-configure-about.adoc b/modules/nodes-pods-allocate-dra-configure-about.adoc index 7d08ac3b3bee..7721b694871d 100644 --- a/modules/nodes-pods-allocate-dra-configure-about.adoc +++ b/modules/nodes-pods-allocate-dra-configure-about.adoc @@ -32,7 +32,7 @@ spec: -- where: -`spec.selectors`:: Specifies uses CEL expressions to request devices in the specified device class. +`spec.selectors`:: Can specify a CEL expression for selecting a device. -- Resource slice::