Kubernetes DRA — Dynamic Resource Allocation Framework
DRA (Dynamic Resource Allocation) is not a GPU-only feature — it is a general-purpose device allocation framework that Kubernetes designed for requesting, configuring, and sharing specialized hardware of all kinds. Once a vendor provides a DRA driver, any device — GPUs, high-performance NICs, RDMA adapters, NVLink interconnects, FPGAs — can be dynamically allocated through the same API.
This document covers DRA from a framework perspective — the core API model, the resource types DRA handles, and adoption criteria with prerequisites. The parameters for actually enabling DRA in EKS GPU environments (Karpenter ignoreDRARequests, the NVIDIA DRA driver 3-layer settings) are covered in GPU Resource Management.
Background — Limitations of the Device Plugin Model
Kubernetes' existing extended resource model (Device Plugin) represents devices only as opaque integer counters such as nvidia.com/gpu: 1. The model is simple and stable, but it cannot express the following requirements.
| Limitation | Description |
|---|---|
| Static registration | Device count is fixed at node startup. No runtime reconfiguration (e.g., changing partitioning) |
| Whole-unit allocation | Devices are allocated only in their entirety. Partial allocation and sharing cannot be expressed |
| No attribute-based selection | Requests like "a GPU with 80GB+ memory" or "an RDMA-capable NIC" are impossible |
| No multi-resource coordination | Relationships between devices — "1 GPU + 1 NIC on the same NUMA node" — cannot be expressed |
| Per-device-type implementations | GPUs, NICs, and FPGAs each require a separate Device Plugin and counter scheme |
DRA solves these limitations by having drivers declare device attributes and capacity as structured data, which workloads then select with CEL (Common Expression Language) expressions. This approach is called structured parameters (KEP-4381), and it allows the scheduler to simulate allocation without depending on vendor drivers.
The DRA Core Model
The Four API Objects
DRA consists of four objects in the resource.k8s.io/v1 API group.
| Object | Created by | Role |
|---|---|---|
| DeviceClass | Cluster admin / driver | Defines device categories (e.g., gpu.nvidia.com, mrdma.google.com) with common selection criteria and configuration |
| ResourceSlice | DRA driver | Publishes the actual device inventory of a node (or cluster) — attributes, capacity, topology metadata |
| ResourceClaim | Workload operator | A request for specific devices. Matches attributes via CEL selectors; lifecycle is independent of the Pod |
| ResourceClaimTemplate | Workload operator | A template that auto-creates a ResourceClaim per Pod (used with Deployments and other multi-replica workloads) |
Allocation Flow
- The DRA driver publishes the attributes and capacity of the devices it manages as ResourceSlices.
- The workload declares desired device conditions in a ResourceClaim (Template) using CEL selectors.
- kube-scheduler computes the allocation and selects a node using ResourceSlice data alone — no driver call happens at this point, which is the essence of structured parameters.
- kubelet delegates preparation to the node driver plugin, which injects the device into the container via a CDI (Container Device Interface) spec.
ResourceClaim example — requesting "1 GPU with at least 80GB of memory" by attribute.
apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
name: large-gpu-template
spec:
spec:
devices:
requests:
- name: gpu
exactly:
deviceClassName: gpu.nvidia.com
selectors:
- cel:
expression: device.capacity['nvidia.com'].memory.compareTo(quantity('80Gi')) >= 0
Version History
| K8s version | Status | Notes |
|---|---|---|
| 1.26 | Alpha | classic DRA (KEP-3063, later deprecated) |
| 1.30 | Alpha | structured parameters introduced (KEP-4381) |
| 1.32 | Beta | v1beta1, new implementation baseline (disabled by default) |
| 1.34 | GA | resource.k8s.io/v1, enabled by default |
| 1.35 | Stable (locked) | feature gate locked-to-default |
The core framework reached GA in 1.34; individual advanced capabilities have varying maturity, as described in Advanced Capabilities below.
Resource Types Covered by DRA
DRA's extension point is the driver. Once a vendor or project writes a driver for its device and publishes ResourceSlices, the scheduler allocates it with the same matching logic regardless of device kind.
| Resource type | Representative driver | Target devices | Maturity (2026.07) |
|---|---|---|---|
| GPU | NVIDIA k8s-dra-driver-gpu (v0.4.x), AMD/Intel drivers | Whole GPUs, MIG partitions | GPU allocation subsystem disabled by default (early stage) |
| Network devices | DraNet (kubernetes-sigs/dranet, v1.3.0) | RDMA NICs, gVNIC, Multi-NIC | Beta → heading to GA. GKE offers managed DRANET |
| High-performance interconnects | NVIDIA ComputeDomain (k8s-dra-driver-gpu subsystem) | Multi-Node NVLink (MNNVL), IMEX domains | Used on rack-scale systems such as GB200 NVL72 |
| FPGAs, custom accelerators | Custom drivers (based on kubernetes-sigs/dra-example-driver) | FPGAs, ASICs, video capture, etc. | Driver development kit available; varies by vendor |
GPU
The most mature application area. The NVIDIA DRA driver consists of two subsystems — GPU allocation and ComputeDomain — and the GPU allocation subsystem provides capabilities impossible with the Device Plugin, such as dynamic creation and allocation of MIG partitions. For the enablement parameters and Karpenter combination on EKS, see GPU Resource Management.