The module lifecycle stage: Generally available version
The module has requirements for installation
Deckhouse Platform installs CRDs but does not remove them when a module is disabled. If you no longer need the created CRDs, delete them.
GPUClass
Short names: gpucls
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspecGPUClassSpec defines a named pool of PhysicalGPU objects and the generated DeviceClass variants that users can request through extended resources.
-
objectspec.partitionFilterPartitionFilter restricts partition profile names used for generated DeviceClasses. Names come from PhysicalGPU status capabilities.
-
array of stringsspec.partitionFilter.allowAllow is a whitelist of names that may be used.
-
array of stringsspec.partitionFilter.denyDeny is a blacklist of names that must not be used.
-
-
objectspec.selectorSelector selects PhysicalGPU objects by labels. Empty selector means all PhysicalGPU objects in the cluster.
-
array of objectsspec.selector.matchExpressionsmatchExpressions is a list of label selector requirements. The requirements are ANDed.
-
stringspec.selector.matchExpressions.keykey is the label key that the selector applies to.
-
stringspec.selector.matchExpressions.operatoroperator represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.
-
array of stringsspec.selector.matchExpressions.valuesvalues is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.
-
-
objectspec.selector.matchLabelsmatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is “key”, the operator is “In”, and the values array contains only “value”. The requirements are ANDed.
-
-
objectspec.sharingFilterSharingFilter restricts sharing mode names used for generated DeviceClasses. Names come from PhysicalGPU labels with the gpu.deckhouse.io/sharing. prefix.
-
array of stringsspec.sharingFilter.allowAllow is a whitelist of names that may be used.
-
array of stringsspec.sharingFilter.denyDeny is a blacklist of names that must not be used.
-
-
-
objectstatus
GPUClassStatus defines the observed state of GPUClass.
The status MUST NOT aggregate the readiness of the PhysicalGPU objects the class selected, including any counter of devices in phase Ready. A GPUClass picks devices with a label selector and does not own their lifecycle, so their readiness stays in the status of the PhysicalGPU objects themselves and is found with the same selector. MatchingPhysicalGPUCount is allowed because it is the result of applying the class’s own selector, not an assertion about the state of objects it does not own.
Reconciliation state is carried entirely by the existing Ready condition, whose reason is Reconciled or Failed (see ReadyReason); no status field is added for presentation purposes.
-
array of objectsstatus.conditionsConditions represent reconciliation status for this GPUClass.
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
array of stringsstatus.deviceClassNamesDeviceClassNames is the complete list of DeviceClass objects generated for this GPUClass.
-
integerstatus.matchingPhysicalGPUCountMatchingPhysicalGPUCount is the number of PhysicalGPU objects matching the selector during the latest reconciliation.
-
PhysicalGPU
Short names: pgpu
Scope: Cluster
Version: v1alpha1
-
stringapiVersionAPIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
stringkindKind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
-
objectmetadata
-
objectspecPhysicalGPUSpec defines the desired state of PhysicalGPU. v0: desired state is intentionally empty.
-
objectstatus
PhysicalGPUStatus defines the observed state of PhysicalGPU.
The status describes the device itself; it is inventory, not an allocation ledger. It MUST NOT publish the identity of the device’s consumers: no references to ResourceClaim, Pod, VirtualMachine or any other consumer object. ResourceClaim remains the single source of truth about allocation (its status.allocation.devices.results and status.reservedFor), the same way an upstream DRA ResourceSlice never names its consumers. Who took the device is answered by the ResourceClaim; what the module makes of that is expressed by the Managed condition, whose reason names the case: BackingAllocation when an owning claim is what puts the device under management, NoBackingAllocation for an ordinarily free compute device, another reason for the cases that are neither.
DriverBinding.ManagementState is a deliberate exception, and it also defines the shape of the only exception allowed here: a derived scalar that gates module behaviour (reclaim fires strictly on Orphaned), never a directory of consumers.
-
objectstatus.capabilitiesCapabilities is a snapshot of device capabilities.
-
stringstatus.capabilities.architectureArchitecture is the GPU architecture name (for example “Hopper”, “RDNA3”, “Xe-HPC”).
-
stringstatus.capabilities.computeAPIComputeAPI is the primary compute API (“CUDA”, “ROCm”, “oneAPI”).
-
stringstatus.capabilities.computeCapabilityComputeCapability is the compute capability string (for example “8.0” for NVIDIA, empty for others).
-
integerstatus.capabilities.memoryMiBMemoryMiB is the total framebuffer memory in MiB.
-
objectstatus.capabilities.partitionSupportPartitionSupport describes partition capabilities (MIG/SPX/SR-IOV).
-
array of objectsstatus.capabilities.partitionSupport.profilesProfiles lists supported partition profiles.
-
integerstatus.capabilities.partitionSupport.profiles.maxInstancesMaxInstances is the maximum number of instances for this profile.
-
integerstatus.capabilities.partitionSupport.profiles.memoryMiBMemoryMiB is the framebuffer size for the profile.
-
stringstatus.capabilities.partitionSupport.profiles.nameName is the profile name (for example “1g.6gb”, “spx-half”).
-
integerstatus.capabilities.partitionSupport.profiles.profileIDProfileID is the numeric profile ID.
-
objectstatus.capabilities.partitionSupport.profiles.resourcesResources is a vendor-agnostic map of resource counters (for example {“multiprocessors”: 14, “copy-engines”: 1}).
-
integerstatus.capabilities.partitionSupport.profiles.sliceCountSliceCount is the number of slices consumed by the profile.
-
-
booleanstatus.capabilities.partitionSupport.supported
Required value
Supported indicates whether partitioning is supported on this GPU. -
stringstatus.capabilities.partitionSupport.technologyTechnology is the partition technology name (“MIG”, “SPX”, “SR-IOV”).
-
integerstatus.capabilities.partitionSupport.totalSlicesTotalSlices is the total number of partition slices on the GPU.
-
-
integerstatus.capabilities.powerLimitMaxWPowerLimitMaxW is the maximum supported power limit in watts.
-
integerstatus.capabilities.powerLimitMinWPowerLimitMinW is the minimum supported power limit in watts.
-
stringstatus.capabilities.productNameProductName is the GPU product name (for example “NVIDIA A30”).
-
stringstatus.capabilities.vendorVendor is the GPU vendor identifier (for example “nvidia”, “amd”, “intel”).
-
-
array of objectsstatus.conditionsConditions represent the health and readiness of the GPU.
-
stringstatus.conditions.lastTransitionTimelastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
-
stringstatus.conditions.messagemessage is a human readable message indicating details about the transition. This may be an empty string.
Maximum length:
32768 -
integerstatus.conditions.observedGenerationobservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
Allowed values:
0 <= X -
stringstatus.conditions.reasonreason contains a programmatic identifier indicating the reason for the condition’s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
Length:
1..1024Pattern:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ -
stringstatus.conditions.statusstatus of the condition, one of True, False, Unknown.
Allowed values:
True,False,Unknown -
stringstatus.conditions.typetype of condition in CamelCase or in foo.example.com/CamelCase.
Maximum length:
316Pattern:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
-
-
objectstatus.currentStateCurrentState reflects current driver binding and runtime details.
-
stringstatus.currentState.computeAPIVersionComputeAPIVersion is the compute API version string at runtime.
-
stringstatus.currentState.driverVersionDriverVersion is the driver version string.
-
stringstatus.currentState.gpuUUIDGPUUUID is the GPU UUID reported by the vendor driver.
-
objectstatus.currentState.partitionPartition describes the current partition mode state.
-
stringstatus.currentState.partition.modeMode is the current partition mode reported by the adapter.
-
-
integerstatus.currentState.powerLimitCurrentWPowerLimitCurrentW is the current power limit in watts.
-
integerstatus.currentState.powerLimitEnforcedWPowerLimitEnforcedW is the enforced power limit in watts.
-
-
objectstatus.driverBindingDriverBinding reports the observed kernel driver binding, its classified serving mode, and the observed management state. Ownership is split per field via Server-Side Apply (see the DriverBinding type): driver and mode are owned by gpu-node-agent, managementState by gpu-controller.
-
stringstatus.driverBinding.driverDriver is the raw kernel driver bound to the device in sysfs (for example “nvidia”, “vfio-pci”, “nvidia-vgpu-vfio”, or an empty string when no driver is bound). It is treated as ground truth. Owned by field manager gpu-node-agent (FieldManagerNodeAgent).
-
stringstatus.driverBinding.managementStateManagementState is the observed answer to who manages this device: the module (Managed), a deliberate operator opt-out that has settled after the binding was released (Excluded), an unintended orphan (Orphaned), nobody while the device is identified, its binding is in Compute mode, no opt-out is declared and no claim holds it (Unclaimed), or no settled answer at all (Unknown). It is orthogonal to Mode. Orphaned is the ONLY reclaim-gating value; while an opt-out is pending but the binding is still alive it stays Managed (the transient is carried by the Managed condition as ExcludedReleasePending), so a live binding is never reclaim-eligible. Unclaimed is the ordinary free state and promises nothing about allocatability, which DRA decides; Unknown is the fail-safe and keeps every case without a settled answer, the grace window of a stray binding and a binding that is not live included. Owned by field manager gpu-controller (FieldManagerController) via Server-Side Apply, separately from driver/mode; see ManagementState.
Allowed values:
Managed,Excluded,Orphaned,Unclaimed,Unknown -
stringstatus.driverBinding.modeMode is the classified serving mode derived from the bound driver. It is transport-agnostic; consumers MUST NOT infer the transport from it. Owned by field manager gpu-node-agent (FieldManagerNodeAgent).
Allowed values:
Compute,Passthrough,Unbound,Unknown
-
-
stringstatus.message
Message is a human-readable explanation of the current Phase. It is derived from the same conditions Phase is derived from, so it introduces no new source of truth, and it is empty whenever there is nothing to explain (for example a healthy device in PhaseReady).
Owned exclusively by field manager gpu-controller (FieldManagerController) via Server-Side Apply.
The field is deliberately NOT machine-readable: consumers MUST NOT parse it and MUST NOT use it as a gate. The machine-readable signals stay Phase, Conditions and DriverBinding.ManagementState. It MUST NOT become a metric label either, because free-form text would give unbounded cardinality.
-
objectstatus.nodeInfoNodeInfo contains node identification and bare-metal detection.
-
booleanstatus.nodeInfo.bareMetalBareMetal indicates whether the node is detected as bare metal.
-
stringstatus.nodeInfo.nodeNameNodeName is the Kubernetes node name where the GPU is detected.
-
-
objectstatus.pciInfoPCIInfo holds PCI identification details for the device.
-
stringstatus.pciInfo.addressAddress is the PCI address, for example “0000:02:00.0”.
-
objectstatus.pciInfo.classClass describes the PCI class.
-
stringstatus.pciInfo.class.codeCode is the PCI class code (base+subclass), for example “0302”.
-
-
objectstatus.pciInfo.deviceDevice describes the PCI device.
-
stringstatus.pciInfo.device.idID is the PCI device ID, for example “20b7”.
-
-
objectstatus.pciInfo.vendorVendor describes the PCI vendor.
-
stringstatus.pciInfo.vendor.idID is the PCI vendor ID, for example “10de”.
-
-
-
stringstatus.phasePhase is the lifecycle phase of the GPU, derived from conditions by gpu-controller.
Allowed values:
Pending,Initializing,Ready,Reconfiguring,Failed,Lost,Passthrough
-