The module lifecycle stage: Experimental
The module has requirements for installation
The Deckhouse Kubernetes Platform installs CRDs but does not remove them when a module is disabled. If you no longer need the created CRDs, delete them.
InferenceServiceClass
Short names: isc
Scope: Cluster
Version: v1alpha1
InferenceServiceClass is the cluster-scoped profile for inference orders.
Optional DeviceClass allow-list is set in spec.acceleratorPolicy.allowedDeviceClasses.
-
objectspec
InferenceServiceClassSpec defines the desired state of InferenceServiceClass.
The allow-list of API contracts is REQUIRED and non-empty. The rule is stated on the spec rather than on the block that carries the list, because the block itself is optional and a class omitting it would otherwise pass: the refusal has to name the list in both shapes — the block missing, and the block present with an empty list.
-
objectspec.acceleratorPolicyAcceleratorPolicy optionally restricts GPU placement for planner-backed orders.
-
array of stringsspec.acceleratorPolicy.allowedDeviceClassesAllowedDeviceClasses is an optional allow-list of cluster DeviceClass names for planner placement. When empty or omitted, placement considers all DeviceClass candidates in the cluster.
-
array of stringsspec.acceleratorPolicy.allowedPlacementTypes
Required value
AllowedPlacementTypes lists permitted placement modes checked by the planner.-
stringspec.acceleratorPolicy.allowedPlacementTypes.Element of the arrayAcceleratorPlacementType selects whole-device or partition placement.
Allowed values:
Partition,WholeDevice
-
-
array of stringsspec.acceleratorPolicy.allowedSharingModes
Required value
AllowedSharingModes lists permitted sharing modes checked by the planner.-
stringspec.acceleratorPolicy.allowedSharingModes.Element of the arrayAcceleratorSharingMode selects how accelerators may be shared between workloads.
Allowed values:
Shared,Dedicated
-
-
integerspec.acceleratorPolicy.maxAcceleratorCount
Required value
MaxAcceleratorCount is the upper bound on the number of devices a launch plan may assign to one replica. The order names no count of its own, so this bounds an outcome of planning rather than a request.Allowed values:
1 <= X -
integerMaxSharePercent is the optional upper bound for accelerator share per requested device.
Allowed values:
1 <= X <= 100 -
integerMinSharePercent is the optional lower bound for accelerator share per requested device.
Allowed values:
1 <= X <= 100
-
-
objectspec.admissionPolicyAdmissionPolicy optionally restricts namespaces that may use this class.
-
array of stringsspec.admissionPolicy.allowedNamespaces
Required value
AllowedNamespaces lists namespaces permitted to use this class. The value “*” allows any namespace.
-
-
objectspec.exposurePolicy
Required value
ExposurePolicy defines endpoint exposure and authentication defaults.-
stringspec.exposurePolicy.authentication
Required value
Authentication selects how clients authenticate to the inference API.Allowed values:
Token,None -
objectspec.exposurePolicy.httpsHTTPS optionally configures Ingress TLS when type is External.
-
objectspec.exposurePolicy.https.certManagerCertManager names the ClusterIssuer when mode is CertManager.
-
stringspec.exposurePolicy.https.certManager.clusterIssuerName
Required value
ClusterIssuerName is the cert-manager ClusterIssuer name.Minimal length:
1
-
-
objectspec.exposurePolicy.https.customCertificateCustomCertificate names a TLS secret in d8-system when mode is CustomCertificate.
-
stringspec.exposurePolicy.https.customCertificate.secretName
Required value
SecretName is the TLS secret name in the d8-system namespace.Minimal length:
1
-
-
stringspec.exposurePolicy.https.modeMode selects the HTTPS usage mode for External exposure.
Allowed values:
Disabled,CertManager,CustomCertificate,OnlyInURI
-
-
stringspec.exposurePolicy.type
Required value
Type selects cluster-local or external exposure.Allowed values:
ClusterLocal,External
-
-
objectspec.modelPolicyModelPolicy restricts catalog model orders. Its allow-list of API contracts is required and non-empty; its restrictions on the format and the size of a model stay optional.
-
array of stringsspec.modelPolicy.allowedEndpointTypes
Required value
AllowedEndpointTypes is the allow-list of inference API contracts for orders using this class. Required and non-empty: the contract of an order is picked from this list, and an order names none.-
stringspec.modelPolicy.allowedEndpointTypes.Element of the arrayInferenceAPIEndpointType is the serving API taxonomy aligned with ai-models catalog facts.
Allowed values:
Chat,Embeddings,Rerank
-
-
array of stringsspec.modelPolicy.allowedFormatsAllowedFormats optionally restricts artifact formats from catalog facts.
-
stringspec.modelPolicy.maxParameterCountMaxParameterCount optionally caps model size (for example 32B, 70B).
Pattern:
^[0-9]+(\.[0-9]+)?[MmBb]$
-
-
stringspec.modelStorageClassNameModelStorageClassName optionally selects the StorageClass of the model volume of the orders of this class. Nobody computes it: it is a decision about WHERE the model lies, and it belongs to the administrator of the class rather than to the owner of an order. Omitted leaves the volume to the default StorageClass of the cluster, and the platform adds no second default of its own.
-
objectspec.scalingPolicyScalingPolicy defines the replica bounds of the orders of this class and the PriorityClass names it offers them. It is the only source of those bounds — an order names none of its own — so a class without this block gives its orders one replica.
-
array of stringsspec.scalingPolicy.allowedPriorityClassNamesAllowedPriorityClassNames lists the Kubernetes PriorityClass names this class offers its orders. An order names none of its own, so a non-empty list decides: its first entry is the effective name. Empty or omitted leaves the effective name to the cluster globalDefault PriorityClass.
-
integerspec.scalingPolicy.maxReplicasMaxReplicas is the maximum replica count for orders of this class.
Allowed values:
1 <= X -
integerspec.scalingPolicy.minReplicasMinReplicas is the minimum replica count for orders of this class. The schema minimum is 1 on this user-facing input; capacity preemption writes bounds on the order workload and may drive it to 0.
Allowed values:
1 <= X
-
-
objectspec.updatePolicyUpdatePolicy optionally defines how the workload of an order is updated.
-
stringspec.updatePolicy.strategy
Required value
Strategy names the way the replicas of an order are moved when the platform may move them.Allowed values:
RollingUpdate
-
-
-
objectstatusInferenceServiceClassStatus defines the observed state of InferenceServiceClass.
-
array of objectsstatus.conditionsConditions report validation and readiness.
-
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])$
-
-
integerstatus.observedGenerationObservedGeneration is the most recent metadata generation observed by the controller.
-
stringstatus.phasePhase is Pending, Ready, or Failed.
-
InferenceService
Short names: is
Scope: Namespaced
Version: v1alpha1
InferenceService is a namespaced inference order.
An order is a class reference and a model, and nothing else. The inference API contract is picked by the platform from the allow-list of the class, and the runtime and its parameters come from the recipe of the launch plan. The accelerator, its share and the estimates of cpu, memory and model volume are assigned by the platform.
-
objectspecInferenceServiceSpec defines the desired state of InferenceService.
-
stringspec.inferenceServiceClassName
Required value
InferenceServiceClassName selects the cluster InferenceServiceClass.Minimal length:
1 -
objectspec.model
Required value
Model describes the model source and reference. Together with the class reference it is the whole of an order: the inference API contract is picked from the allow-list of the class, and the runtime and its parameters are named by the recipe of the launch plan.-
objectspec.model.authSecretRefAuthSecretRef references a Secret with Hugging Face credentials, on the DIRECT path only: the artifact of a catalog entry is mounted by the catalog module, which holds its own credentials, so on that path the field is refused on write.
-
stringspec.model.authSecretRef.keyKey is the Secret data key holding the credential. When omitted, the platform uses “token”.
-
stringspec.model.authSecretRef.name
Required value
Name is the Secret metadata.name in the same namespace.Minimal length:
1
-
-
stringspec.model.parameterCountParameterCount declares model size on the DIRECT path, and only there: an order through the catalog takes the size from the facts of the catalog entry, and the field is refused on write.
Pattern:
^[0-9]+(\.[0-9]+)?[MmBb]$ -
objectspec.model.ref
Required value
Ref is a structural object: HuggingFace uses name only; ai-models uses kind+name (+ optional namespace). Discriminated by src via CEL on this struct.-
stringspec.model.ref.kindKind is Model or ClusterModel for catalog orders; omitted for HuggingFace.
Allowed values:
Model,ClusterModel -
stringspec.model.ref.name
Required value
Name is the Hugging Face model id or catalog CR metadata.name.Minimal length:
1 -
stringspec.model.ref.namespaceNamespace is optional for kind Model and must match the InferenceService namespace.
-
-
stringspec.model.src
Required value
Src selects HuggingFace or ai-models.Allowed values:
HuggingFace,ai-models
-
-
-
objectstatusInferenceServiceStatus defines the observed state of InferenceService.
-
stringstatus.authSecretNameAuthSecretName is the generated token Secret when the class uses Token authentication.
-
array of objectsstatus.conditionsConditions report class resolution, model resolution, order workload readiness and service readiness.
-
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.constraintsConstraints publishes effective replica bounds and catalog scope after validation.
-
integerstatus.constraints.maxReplicasMaxReplicas is the effective maximum replica count, and it has two origins: outside a preemption episode it is the bound the validation of the order against the scaling policy of its class produced, and while an episode holds the order as a donor it is the bound of that hold, which the restore of the donor puts back to the policy bound.
-
integerstatus.constraints.minReplicasMinReplicas is the effective minimum replica count.
-
stringstatus.constraints.modelScopeModelScope is the catalog model visibility from catalog facts.
-
stringstatus.constraints.priorityClassNamePriorityClassName is the effective Kubernetes PriorityClass name after validation. Empty when the order uses the cluster default that is absent (numeric priority 0).
-
-
objectstatus.endpointEndpoint publishes the resolved inference API URL.
-
stringstatus.endpoint.typeType mirrors exposure semantics (ClusterLocal or External).
-
stringstatus.endpoint.urlURL is the HTTP(S) endpoint clients use to call the inference API.
-
-
objectstatus.modelModel publishes catalog path metadata after successful validation of the order against its class.
-
stringstatus.model.endpointTypeEndpointType publishes the inference API type the platform selected for the order after validating it against its class. An order names no type: the platform takes the single type the class allows, or the one type the allow-list of the class and the facts of the model have in common.
Allowed values:
Chat,Embeddings,Rerank
-
-
integerstatus.observedGenerationObservedGeneration is the most recent metadata generation observed by the controller.
-
stringstatus.phasePhase is Pending, Ready, Degraded, or Failed.
-
objectstatus.resolvedResolved publishes the placement the order runs on after successful planner reconciliation.
-
integerstatus.resolved.acceleratorMemoryGiBAcceleratorMemoryGiB is usable accelerator memory for the selected placement.
-
stringstatus.resolved.acceleratorProductNameAcceleratorProductName is the product name of the selected accelerator.
-
stringstatus.resolved.deviceClassDeviceClass is the DRA device class the planner recommends for the device claim of the order.
-
array of stringsstatus.resolved.excludedDeviceClassesExcludedDeviceClasses lists cluster DeviceClass CR names excluded after failed replans.
-
stringstatus.resolved.placementModePlacementMode is the selected placement mode (Partition or WholeDevice).
Allowed values:
Partition,WholeDevice -
integerstatus.resolved.replanCountReplanCount is the number of ResourceClaim-driven replans performed.
-
integerSharePercent is the share of the device the plan ASSIGNED to this order. A hundred means the whole device. It belongs to the published placement on both grounds of the closed composition: the projection of occupancy of the platform reads it back — without it a card holding a neighbour at thirteen percent looks either free or fully taken — and the owner of the order sees by it how much of the card is theirs.
-
stringstatus.resolved.sharingModeSharingMode is the selected sharing mode when applicable, independent of the placement mode. A partition of an accelerator may be held alone or shared with neighbours.
Allowed values:
Shared,Dedicated
-
-