The module lifecycle stageExperimental

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.

  • spec
    object

    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.

    • spec.acceleratorPolicy
      object
      AcceleratorPolicy optionally restricts GPU placement for planner-backed orders.
      • spec.acceleratorPolicy.allowedDeviceClasses
        array of strings
        AllowedDeviceClasses is an optional allow-list of cluster DeviceClass names for planner placement. When empty or omitted, placement considers all DeviceClass candidates in the cluster.
      • spec.acceleratorPolicy.allowedPlacementTypes
        array of strings

        Required value

        AllowedPlacementTypes lists permitted placement modes checked by the planner.
        • spec.acceleratorPolicy.allowedPlacementTypes.Element of the array
          string
          AcceleratorPlacementType selects whole-device or partition placement.

          Allowed values: Partition, WholeDevice

      • spec.acceleratorPolicy.allowedSharingModes
        array of strings

        Required value

        AllowedSharingModes lists permitted sharing modes checked by the planner.
        • spec.acceleratorPolicy.allowedSharingModes.Element of the array
          string
          AcceleratorSharingMode selects how accelerators may be shared between workloads.

          Allowed values: Shared, Dedicated

      • spec.acceleratorPolicy.maxAcceleratorCount
        integer

        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

      • spec.acceleratorPolicy.maxSharePercent
        integer
        MaxSharePercent is the optional upper bound for accelerator share per requested device.

        Allowed values: 1 <= X <= 100

      • spec.acceleratorPolicy.minSharePercent
        integer
        MinSharePercent is the optional lower bound for accelerator share per requested device.

        Allowed values: 1 <= X <= 100

    • spec.admissionPolicy
      object
      AdmissionPolicy optionally restricts namespaces that may use this class.
      • spec.admissionPolicy.allowedNamespaces
        array of strings

        Required value

        AllowedNamespaces lists namespaces permitted to use this class. The value “*” allows any namespace.
    • spec.exposurePolicy
      object

      Required value

      ExposurePolicy defines endpoint exposure and authentication defaults.
      • spec.exposurePolicy.authentication
        string

        Required value

        Authentication selects how clients authenticate to the inference API.

        Allowed values: Token, None

      • spec.exposurePolicy.https
        object
        HTTPS optionally configures Ingress TLS when type is External.
        • spec.exposurePolicy.https.certManager
          object
          CertManager names the ClusterIssuer when mode is CertManager.
          • spec.exposurePolicy.https.certManager.clusterIssuerName
            string

            Required value

            ClusterIssuerName is the cert-manager ClusterIssuer name.

            Minimal length: 1

        • spec.exposurePolicy.https.customCertificate
          object
          CustomCertificate names a TLS secret in d8-system when mode is CustomCertificate.
          • spec.exposurePolicy.https.customCertificate.secretName
            string

            Required value

            SecretName is the TLS secret name in the d8-system namespace.

            Minimal length: 1

        • spec.exposurePolicy.https.mode
          string
          Mode selects the HTTPS usage mode for External exposure.

          Allowed values: Disabled, CertManager, CustomCertificate, OnlyInURI

      • spec.exposurePolicy.type
        string

        Required value

        Type selects cluster-local or external exposure.

        Allowed values: ClusterLocal, External

    • spec.modelPolicy
      object
      ModelPolicy 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.
      • spec.modelPolicy.allowedEndpointTypes
        array of strings

        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.
        • spec.modelPolicy.allowedEndpointTypes.Element of the array
          string
          InferenceAPIEndpointType is the serving API taxonomy aligned with ai-models catalog facts.

          Allowed values: Chat, Embeddings, Rerank

      • spec.modelPolicy.allowedFormats
        array of strings
        AllowedFormats optionally restricts artifact formats from catalog facts.
      • spec.modelPolicy.maxParameterCount
        string
        MaxParameterCount optionally caps model size (for example 32B, 70B).

        Pattern: ^[0-9]+(\.[0-9]+)?[MmBb]$

    • spec.modelStorageClassName
      string
      ModelStorageClassName 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.
    • spec.scalingPolicy
      object
      ScalingPolicy 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.
      • spec.scalingPolicy.allowedPriorityClassNames
        array of strings
        AllowedPriorityClassNames 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.
      • spec.scalingPolicy.maxReplicas
        integer
        MaxReplicas is the maximum replica count for orders of this class.

        Allowed values: 1 <= X

      • spec.scalingPolicy.minReplicas
        integer
        MinReplicas 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

    • spec.updatePolicy
      object
      UpdatePolicy optionally defines how the workload of an order is updated.
      • spec.updatePolicy.strategy
        string

        Required value

        Strategy names the way the replicas of an order are moved when the platform may move them.

        Allowed values: RollingUpdate

  • status
    object
    InferenceServiceClassStatus defines the observed state of InferenceServiceClass.
    • status.conditions
      array of objects
      Conditions report validation and readiness.
      • status.conditions.lastTransitionTime
        string
        lastTransitionTime 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.
      • status.conditions.message
        string
        message is a human readable message indicating details about the transition. This may be an empty string.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        observedGeneration 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

      • status.conditions.reason
        string
        reason 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..1024

        Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        string
        status of the condition, one of True, False, Unknown.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        type of condition in CamelCase or in foo.example.com/CamelCase.

        Maximum length: 316

        Pattern: ^([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])$

    • status.observedGeneration
      integer
      ObservedGeneration is the most recent metadata generation observed by the controller.
    • status.phase
      string
      Phase 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.

  • spec
    object
    InferenceServiceSpec defines the desired state of InferenceService.
    • spec.inferenceServiceClassName
      string

      Required value

      InferenceServiceClassName selects the cluster InferenceServiceClass.

      Minimal length: 1

    • spec.model
      object

      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.
      • spec.model.authSecretRef
        object
        AuthSecretRef 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.
        • spec.model.authSecretRef.key
          string
          Key is the Secret data key holding the credential. When omitted, the platform uses “token”.
        • spec.model.authSecretRef.name
          string

          Required value

          Name is the Secret metadata.name in the same namespace.

          Minimal length: 1

      • spec.model.parameterCount
        string
        ParameterCount 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]$

      • spec.model.ref
        object

        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.
        • spec.model.ref.kind
          string
          Kind is Model or ClusterModel for catalog orders; omitted for HuggingFace.

          Allowed values: Model, ClusterModel

        • spec.model.ref.name
          string

          Required value

          Name is the Hugging Face model id or catalog CR metadata.name.

          Minimal length: 1

        • spec.model.ref.namespace
          string
          Namespace is optional for kind Model and must match the InferenceService namespace.
      • spec.model.src
        string

        Required value

        Src selects HuggingFace or ai-models.

        Allowed values: HuggingFace, ai-models

  • status
    object
    InferenceServiceStatus defines the observed state of InferenceService.
    • status.authSecretName
      string
      AuthSecretName is the generated token Secret when the class uses Token authentication.
    • status.conditions
      array of objects
      Conditions report class resolution, model resolution, order workload readiness and service readiness.
      • status.conditions.lastTransitionTime
        string
        lastTransitionTime 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.
      • status.conditions.message
        string
        message is a human readable message indicating details about the transition. This may be an empty string.

        Maximum length: 32768

      • status.conditions.observedGeneration
        integer
        observedGeneration 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

      • status.conditions.reason
        string
        reason 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..1024

        Pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$

      • status.conditions.status
        string
        status of the condition, one of True, False, Unknown.

        Allowed values: True, False, Unknown

      • status.conditions.type
        string
        type of condition in CamelCase or in foo.example.com/CamelCase.

        Maximum length: 316

        Pattern: ^([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])$

    • status.constraints
      object
      Constraints publishes effective replica bounds and catalog scope after validation.
      • status.constraints.maxReplicas
        integer
        MaxReplicas 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.
      • status.constraints.minReplicas
        integer
        MinReplicas is the effective minimum replica count.
      • status.constraints.modelScope
        string
        ModelScope is the catalog model visibility from catalog facts.
      • status.constraints.priorityClassName
        string
        PriorityClassName is the effective Kubernetes PriorityClass name after validation. Empty when the order uses the cluster default that is absent (numeric priority 0).
    • status.endpoint
      object
      Endpoint publishes the resolved inference API URL.
      • status.endpoint.type
        string
        Type mirrors exposure semantics (ClusterLocal or External).
      • status.endpoint.url
        string
        URL is the HTTP(S) endpoint clients use to call the inference API.
    • status.model
      object
      Model publishes catalog path metadata after successful validation of the order against its class.
      • status.model.endpointType
        string
        EndpointType 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

    • status.observedGeneration
      integer
      ObservedGeneration is the most recent metadata generation observed by the controller.
    • status.phase
      string
      Phase is Pending, Ready, Degraded, or Failed.
    • status.resolved
      object
      Resolved publishes the placement the order runs on after successful planner reconciliation.
      • status.resolved.acceleratorMemoryGiB
        integer
        AcceleratorMemoryGiB is usable accelerator memory for the selected placement.
      • status.resolved.acceleratorProductName
        string
        AcceleratorProductName is the product name of the selected accelerator.
      • status.resolved.deviceClass
        string
        DeviceClass is the DRA device class the planner recommends for the device claim of the order.
      • status.resolved.excludedDeviceClasses
        array of strings
        ExcludedDeviceClasses lists cluster DeviceClass CR names excluded after failed replans.
      • status.resolved.placementMode
        string
        PlacementMode is the selected placement mode (Partition or WholeDevice).

        Allowed values: Partition, WholeDevice

      • status.resolved.replanCount
        integer
        ReplanCount is the number of ResourceClaim-driven replans performed.
      • status.resolved.sharePercent
        integer
        SharePercent 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.
      • status.resolved.sharingMode
        string
        SharingMode 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