OME API

Look up the fields of every type in the ome.io/v1beta1 API, such as InferenceService, BaseModel and ClusterServingRuntime, in this generated reference.

Every resource on this page has apiVersion: ome.io/v1beta1. The page is generated from the Go types in pkg/apis/ome/v1beta1, the same types the CRDs are generated from. Fields marked Required must be set when you create an object. OME writes status, so status fields aren't marked.

AcceleratorClass

AcceleratorClass defines a class of accelerators with similar capabilities

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

AcceleratorClass

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec AcceleratorClassSpec

The desired state of the AcceleratorClass.

status AcceleratorClassStatus

The observed state of the AcceleratorClass.

AcceleratorQuotaUnreleased: coming in v1.3

AcceleratorQuota is one node of the fleet quota tree. Cluster-scoped: it is fleet-level capacity policy, not a namespaced workload.

Validation: an AcceleratorQuota name may not exceed 63 characters; it is copied into a label value on every Kueue object the node materializes.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

AcceleratorQuota

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec AcceleratorQuotaSpec

The desired state of the AcceleratorQuota.

status AcceleratorQuotaStatus

The observed state of the AcceleratorQuota.

AutoscalerPolicyUnreleased: coming in v1.3

AutoscalerPolicy is a reusable, parameterized autoscaler template. Components attach individually via spec.<component>.autoscalerPolicyRef on the InferenceService; the referenced template is rendered per component at reconcile time into a verbatim ComponentAutoscaler and fed to the existing autoscaler dispatch. Creating a policy actuates nothing by itself: the per-component ref is the only attachment mechanism. Alpha. The API may change without notice.

AutoscalerPolicy is off by default. To turn it on, set ome.autoscalerPolicy.enabled to true on both the ome-crd and ome-resources Helm charts, which install the CRD and its validating webhook. The manager looks for the CRD only when it starts.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

AutoscalerPolicy

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec AutoscalerPolicySpec

The desired state of the AutoscalerPolicy.

status AutoscalerPolicyStatus

The observed state of the AutoscalerPolicy.

BaseModel

BaseModel describes a model in one namespace: where its weights live, which nodes keep a copy, and what the model is, such as its architecture, size and capabilities.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

BaseModel

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec BaseModelSpec

The desired state of the BaseModel.

status ModelStatusSpec

The observed state of the BaseModel.

BenchmarkJob

BenchmarkJob runs genai-bench against an InferenceService or a URL and stores the results in the output location you choose.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

BenchmarkJob

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec BenchmarkJobSpec

The desired state of the BenchmarkJob.

status BenchmarkJobStatus

The observed state of the BenchmarkJob.

ClusterBaseModel

ClusterBaseModel describes a model for the whole cluster: it has the same spec as a BaseModel, but it's cluster-scoped rather than namespaced.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

ClusterBaseModel

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec BaseModelSpec

The desired state of the ClusterBaseModel.

status ModelStatusSpec

The observed state of the ClusterBaseModel.

ClusterServingRuntime

ClusterServingRuntime defines serving pods for the whole cluster: it has the same spec as a ServingRuntime, but it's cluster-scoped rather than namespaced.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

ClusterServingRuntime

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec ServingRuntimeSpec

The desired state of the ClusterServingRuntime.

status ServingRuntimeStatus

The observed state of the ClusterServingRuntime.

FineTunedWeight

FineTunedWeight describes cluster-scoped weights trained from a base model, such as a LoRA adapter, that an InferenceService serves on top of that model.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

FineTunedWeight

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec FineTunedWeightSpec

The desired state of the FineTunedWeight.

status ModelStatusSpec

The observed state of the FineTunedWeight.

InferenceReplicaUnreleased: coming in v1.3

InferenceReplica is one pod set: N Instances of the same rendered pod templates with one revision history and one rollout. A projected replica exists per (InferenceService, Component) tuple and is named <inferenceservice>-<component>; a standalone replica is named by its creator.

The scale subresource lets HPA/KEDA target the InferenceReplica directly.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

InferenceReplica

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec InferenceReplicaSpec

The desired state of the InferenceReplica.

status InferenceReplicaStatus

The observed state of the InferenceReplica.

InferenceService

InferenceService ties a model to a serving runtime and declares the engine, decoder and router components that OME turns into workloads.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

InferenceService

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec InferenceServiceSpec

The desired state of the InferenceService.

status InferenceServiceStatus

The observed state of the InferenceService.

RolloutPolicyUnreleased: coming in v1.3

RolloutPolicy is a namespaced, reusable rollout progression consumed by InferenceService rollout groups via RolloutGroup.PolicyRef. Alpha. The API may change without notice.

RolloutPolicy is off by default. To turn it on, set ome.rolloutPolicy.enabled to true on both the ome-crd and ome-resources Helm charts, which install the CRD and its validating webhook. The manager looks for the CRD only when it starts.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

RolloutPolicy

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec RolloutPolicySpec

The desired state of the RolloutPolicy.

status RolloutPolicyStatus

The observed state of the RolloutPolicy.

ServingRuntime

ServingRuntime defines, within one namespace, the pods that serve a model and the model formats and sizes it supports, so OME can select it automatically.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

ServingRuntime

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec ServingRuntimeSpec

The desired state of the ServingRuntime.

status ServingRuntimeStatus

The observed state of the ServingRuntime.

TrafficMapUnreleased: coming in v1.3

TrafficMap is the capacity-aware routing projection of one multi-cluster InferenceService: the per-home traffic split a gateway consumes. Placement decides WHERE an ISVC's replicas run and quota decides HOW MUCH each home may run; TrafficMap decides the WEIGHTS. It is generated by a control-plane routing controller from status.placement plus accelerator-quota allocation, never hand-edited, and consumed by a gateway-neutral publisher. Alpha. The API may change without notice.

One TrafficMap exists per routed ISVC, named after it and owned by it (so it is garbage-collected with the ISVC), for as long as that ISVC is routed -- including while no home is routable, when the table is empty or all-zero and the Routable condition says why. The routing controller owns spec, SourceUID, and the Routable, CapacityFallback, and OverrideActive conditions; the publisher owns the rest of status, including Published and PublicationFallback.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

TrafficMap

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec TrafficMapSpec

The desired state of the TrafficMap.

status TrafficMapStatus

The observed state of the TrafficMap.

WorkloadClusterUnreleased: coming in v1.3

WorkloadCluster registers a workload cluster, typically a GPU cluster, that OME can place workloads onto. Cluster-scoped: it is fleet-level infrastructure, not a namespaced workload. Alpha. The API may change without notice.

FieldTypeDescription
apiVersion Required string

ome.io/v1beta1

kind Required string

WorkloadCluster

metadata ObjectMeta

Standard object metadata, such as name and labels.

spec WorkloadClusterSpec

The desired state of the WorkloadCluster.

status WorkloadClusterStatus

The observed state of the WorkloadCluster.

Removed in v1.3

v1.3 removes these fields. Each item says what to use instead.

  • spec.kedaConfig on an InferenceService, and kedaConfig on a component. Use autoscaler on each component, with class: KEDA and a prometheus trigger in keda.triggers.
  • scaleMetric on a component. Use autoscaler.hpa.metrics[0].resource.name, with class: HPA in autoscaler.
  • scaleTarget on a component. Use autoscaler.hpa.metrics[0].resource.target.averageUtilization.
  • spec.workers on a ServingRuntime or ClusterServingRuntime. Use spec.engineConfig.leader and spec.engineConfig.worker, or the same fields on spec.decoderConfig.
  • status.components.<component>.latestCreatedRevision on an InferenceService. Nothing replaces it. OMENative components report latestReadyRevision and latestRolledoutRevision.

A component is engine, decoder or router on an InferenceService, and engineConfig, decoderConfig or routerConfig on a ServingRuntime or ClusterServingRuntime.

Supporting types

The resources above use these types in their fields.

AcceleratorBudget

Used by AcceleratorQuotaSpec.

AcceleratorBudget is one node's allowance of one resource on one ResourceFlavor. Kueue quota is keyed by that pair, so both halves are needed: a flavor names a hardware class by node labels and says nothing about which resource the count applies to.

Accelerators are the only budgeted dimension: cpu and memory are covered on the materialized ClusterQueue so Kueue admission never blocks on them, but they are not authored here.

FieldTypeDescription
resourceName Required string

ResourceName is the Kubernetes resource this allowance counts, such as nvidia.com/gpu or google.com/tpu. It becomes the resource entry in the materialized ClusterQueue's resourceGroup. Which names are budgetable is operator config; the API accepts any qualified resource name.

Maximum length: 253. 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])?)?$.

resourceFlavor Required string

ResourceFlavor names an existing Kueue ResourceFlavor. OME references flavors and does not own node labeling; a flavor missing on a target cluster makes that cluster's ClusterQueue inactive, so the budget is not materialized there.

Maximum length: 253. Pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$.

policy AcceleratorQuotaDistributionPolicy

Policy overrides the node's default split for this flavor only, so a leaf can be Explicit on a reserved flavor and Proportional on a fungible one. Leaves only.

nominal Required Quantity

Nominal is the allowance for this flavor, in the plane's own terms: the fleet-wide total where the tree is authored, this cluster's resolved share on a projected copy. It becomes the ClusterQueue's nominalQuota.

borrowingLimit Quantity

BorrowingLimit is how far above its share this leaf may burst by borrowing idle sibling capacity, passed through to Kueue. Unset, this leaf does not borrow: nominal is its ceiling, and the materialized queue carries an explicit limit of zero to say so, because the enforcement backend reads an absent limit as unbounded.

Borrowing is cluster-local, so setting it turns nominal from a ceiling into a floor plus overage, and the relaxed ceiling is reported in status.

WARNING: overage is not currently reclaimable. This plane sets no preemption policy, so a borrower holds what it took until its own work finishes -- a leaf that bursts can leave a sibling waiting for the share that sibling was guaranteed. Leaves only.

lendingLimit Quantity

LendingLimit is how much of this leaf's share siblings may borrow while it is idle, passed through to Kueue. It MUST NOT exceed the share Kueue sees. Leaves only.

perCluster []AcceleratorClusterShare

PerCluster is the admin-authored split, required when the effective policy is Explicit and rejected otherwise. Entries MUST sum to Nominal. It is absent on a projected copy, which carries one already-resolved share rather than a fleet split.

AcceleratorBudgetStatus

Used by AcceleratorQuotaStatus.

AcceleratorBudgetStatus is one (resource, flavor) pair's resolved allowance and observed use.

FieldTypeDescription
resourceName string

ResourceName is the resource these numbers describe.

resourceFlavor string

ResourceFlavor is the flavor these numbers describe.

nominal Quantity

Nominal is the resolved allowance for this plane: the fleet total where the tree is authored, this cluster's share on a projection.

admitted Quantity

Admitted is the quantity of this flavor currently admitted against the materialized queues, including anything borrowed.

reserved Quantity

Reserved is the quantity held by workloads carrying a quota reservation, admitted or not. It is never below Admitted, and the gap between them is work that owns the chips but has not started — a tenant sitting at its ceiling with Admitted low reads as idle unless this is read too.

borrowed Quantity

Borrowed is the admitted quantity above the nominal share, taken from idle siblings and reclaimable on contention.

perCluster []AcceleratorClusterBudgetStatus

PerCluster breaks the numbers above down by cluster. Populated where the tree is authored; empty on a projected copy, which knows only itself.

AcceleratorCapabilities

Used by AcceleratorClassSpec.

FieldTypeDescription
memoryGB Quantity

Memory capacity in GB

computeCapability string

Compute capability (NVIDIA) or equivalent

levelZeroVersion string

Level Zero version (for Intel accelerators)

clockSpeedMHz int32

Clock speeds

memoryBandwidthGBps Quantity

Memory bandwidth

features []string

Features supported by this accelerator

performance AcceleratorPerformance

Performance metrics

AcceleratorCapacityAttribution

Used by AcceleratorCapacityStatus, AcceleratorClusterCapacityStatus, PlacementCapacityPool.

AcceleratorCapacityAttribution describes how nodes were assigned to a flavor.

FieldTypeDescription
flavorUID UID

FlavorUID identifies the observed ResourceFlavor object.

nodeLabels map[string]string

NodeLabels is the flavor's node selector at observation time.

flavorSetHash string

FlavorSetHash identifies all flavor definitions and configured resource names used by the attribution rule, including more specific selectors.

complete bool

Complete means every observed node advertising this resource was unambiguously attributed and every flavor had a verifiable identity.

AcceleratorCapacityStatus

Used by AcceleratorQuotaStatus.

AcceleratorCapacityStatus is the observed physical capacity of one flavor, the denominator an admin reads a budget against. It is derived, never authored.

FieldTypeDescription
resourceName string

ResourceName is the resource these numbers describe.

resourceFlavor string

ResourceFlavor is the flavor these numbers describe.

allocatable Quantity

Allocatable is the currently schedulable quantity: the flavor's resource summed over Ready, uncordoned nodes matching the flavor's node labels. Nodes that are NotReady or cordoned remain physical inventory but contribute no schedulable capacity.

highWaterMark Quantity

HighWaterMark is the greatest Allocatable observed for this flavor. Budget checks compare against it rather than the instantaneous value, so capacity that shrinks — a drain, a cordon, a device-plugin restart — never marks a node Degraded. It is lowered only once the observed value stays below it by more than the configured hysteresis band.

observedAt Time

ObservedAt is when Allocatable was last sampled.

perCluster []AcceleratorClusterCapacityStatus

PerCluster breaks capacity down by cluster on a management plane. Empty on a workload cluster, whose root reports only its own capacity.

attribution AcceleratorCapacityAttribution

Attribution identifies the hardware mapping used for this observation. Omission cannot establish whether an observed zero is a complete sample.

AcceleratorClassSpec

Used by AcceleratorClass.

FieldTypeDescription
vendor string

Vendor of the accelerator (nvidia, amd, intel, etc.)

family string

Family of the accelerator (ampere, hopper, cdna2, etc.)

model string

Model name (a100, h100, mi250x, etc.)

discovery Required AcceleratorDiscovery

Discovery patterns to identify nodes with this accelerator

capabilities Required AcceleratorCapabilities

Capabilities of this accelerator class

resources []AcceleratorResource

Resources exposed by this accelerator

integration AcceleratorIntegration

Integration with external systems

cost AcceleratorCost

Cost information for optimization decisions

AcceleratorClassStatus

Used by AcceleratorClass.

FieldTypeDescription
nodes []string

Nodes that have this accelerator

totalAccelerators int32

Total number of accelerators in the cluster

availableAccelerators int32

Available accelerators (not allocated)

lastUpdated Time

Last update time

conditions []Condition

Conditions represent the latest available observations

availableNodes int32

AvailableNodes is the number of nodes that have this accelerator available

AcceleratorClusterBudgetStatus

Used by AcceleratorBudgetStatus.

AcceleratorClusterBudgetStatus is one cluster's slice of a flavor's status.

FieldTypeDescription
cluster string

Cluster is the WorkloadCluster's name.

nominal Quantity

Nominal is the share assigned to this cluster.

admitted Quantity

Admitted is the quantity admitted on this cluster, including borrowed.

reserved Quantity

Reserved is the quantity reserved on this cluster, admitted or not.

borrowed Quantity

Borrowed is the admitted quantity above this cluster's share.

AcceleratorClusterCapacityStatus

Used by AcceleratorCapacityStatus.

AcceleratorClusterCapacityStatus is one cluster's contribution to a flavor's observed capacity.

FieldTypeDescription
cluster string

Cluster is the WorkloadCluster's name.

clusterUID UID

ClusterUID identifies the registration through which the report was read. Omission cannot establish that a same-name cluster owns this sample.

reportUID UID

ReportUID identifies the member's root AcceleratorQuota.

reportResourceVersion string

ReportResourceVersion identifies the source object read for this sample.

reportAvailable bool

ReportAvailable means the most recent collection verified the source object and registration. It does not imply that ObservedAt is fresh.

allocatable Quantity

Allocatable is that cluster's schedulable quantity of the flavor.

highWaterMark Quantity

HighWaterMark is the greatest Allocatable observed on this cluster.

observedAt Time

ObservedAt is when this cluster's value was last sampled. A stale stamp distinguishes "capacity dropped" from "the cluster stopped reporting".

attribution AcceleratorCapacityAttribution

Attribution is the member's hardware mapping at observation time.

AcceleratorClusterShare

Used by AcceleratorBudget.

AcceleratorClusterShare is one cluster's slice of a flavor's budget.

FieldTypeDescription
cluster Required string

Cluster is the WorkloadCluster's name.

Maximum length: 253.

nominal Required Quantity

Nominal is that cluster's share, and becomes the nominalQuota of the ClusterQueue materialized there.

AcceleratorConstraints

Used by AcceleratorSelector.

AcceleratorConstraints defines requirements for accelerator selection

FieldTypeDescription
minMemory int64

MinMemory in GB

maxMemory int64

MaxMemory in GB (useful for cost control)

minComputePerformanceTFLOPS int64

MinComputePerformanceTFLOPS in TFLOPS

minArchitectureVersion string

MinArchitectureVersion Compute capability (NVIDIA) or equivalent

requiredFeatures []string

RequiredFeatures that must be present

excludedClasses []string

ExcludedClasses lists AcceleratorClasses to avoid

architectureFamilies []string

ArchitectureFamilies limits selection to specific families. Examples: ["nvidia-hopper", "nvidia-ampere"].

preferredPrecisions []string

PreferredPrecisions lists numeric precisions in order of preference. Examples: ["fp8", "fp16", "fp32"].

AcceleratorCost

Used by AcceleratorClassSpec.

FieldTypeDescription
perHour Quantity

Cost per hour in dollars

perMillionTokens Quantity

Cost per million tokens (for usage-based pricing)

spotPerHour Quantity

Spot instance pricing if available

tier string

Cost tier for simplified selection (low, medium, high)

AcceleratorDiscovery

Used by AcceleratorClassSpec.

FieldTypeDescription
nodeSelector map[string]string

NodeSelector to identify nodes with this accelerator

affinity Affinity

Affinity for more complex node selection

pciVendorID string

PCIVendorID for device discovery (e.g., "10de" for NVIDIA)

deviceIDs []string

DeviceIDs list of PCI device IDs

AcceleratorIntegration

Used by AcceleratorClassSpec.

FieldTypeDescription
kueueResourceFlavor string

KueueResourceFlavor name to sync with

volcanoGPUType string

VolcanoGPUType for Volcano integration

AcceleratorLatency

Used by AcceleratorPerformance.

FieldTypeDescription
averageMillis int64

Average latency in milliseconds

maximumMillis int64

Maximum latency in milliseconds

AcceleratorModelConfig

AcceleratorModelConfig provides accelerator-specific overrides for this model format

FieldTypeDescription
minMemoryPerBillionParams int64

MinMemoryPerBillionParams specifies memory required per billion parameters. OME doesn't read it.

Minimum: 0.

tensorParallelismOverride TensorParallelismConfig

TensorParallelismOverride overrides the default tensor parallelism settings

runtimeArgsOverride []string

RuntimeArgsOverride provides accelerator-specific runtime arguments

environmentOverride map[string]string

EnvironmentOverride provides accelerator-specific environment variables

AcceleratorPerformance

Used by AcceleratorCapabilities.

FieldTypeDescription
fp32Tflops int64

FP32 performance in TFLOPS

fp16Tflops int64

FP16 performance in TFLOPS

int8Tops int64

INT8 performance in TOPS

int4Tops int64

INT4 performance in TOPS

latency AcceleratorLatency

Latency metrics

AcceleratorQuotaClusterStatus

Used by AcceleratorQuotaStatus.

AcceleratorQuotaClusterStatus is one workload cluster's projection state, reported where the tree is authored.

FieldTypeDescription
cluster string

Cluster is the WorkloadCluster's name.

appliedGeneration int64

AppliedGeneration is the source generation this cluster's projection last carried. Behind metadata.generation means the update has not landed.

appliedTime Time

AppliedTime is when the projection was last applied successfully.

materializedGeneration int64

MaterializedGeneration is the source generation this cluster has actually materialized, read back from the projection's status.sourceGeneration. Both it and AppliedGeneration count source revisions, so the pair is comparable: equal means caught up, lower means the remote controller has not yet rendered what was projected.

message string

Message explains why this cluster is behind.

AcceleratorQuotaDistribution

Used by AcceleratorQuotaSpec.

AcceleratorQuotaDistribution holds a node's default split policy. A struct rather than a bare field so future policy inputs attach to the policy they configure.

FieldTypeDescription
policy AcceleratorQuotaDistributionPolicy

Policy is the default split for every budget on this node that does not override it.

AcceleratorQuotaDistributionPolicy

Used by AcceleratorBudget, AcceleratorQuotaDistribution.

AcceleratorQuotaDistributionPolicy selects how a leaf's fleet-wide nominal is split into per-cluster shares.

Underlying type: string.

Allowed values: Explicit, Proportional.

AcceleratorQuotaMaterialization

Used by AcceleratorQuotaStatus.

AcceleratorQuotaMaterialization is the freeze bookkeeping that makes last-good behavior durable across controller restarts.

FieldTypeDescription
frozen bool

Frozen reports that output is held at its last-good state because a computed invariant is violated. While frozen the controller writes no new projections or Kueue objects for this node, and deletes none; only explicit deletion of the CR reaps them.

frozenAt Time

FrozenAt is when the freeze began.

reason string

Reason is the condition reason that caused the freeze, retained so the cause survives a later condition update.

lastAppliedGeneration int64

LastAppliedGeneration is the spec generation the frozen output was built from, which is the state a reader is currently looking at.

lastAppliedTime Time

LastAppliedTime is when that output was written.

AcceleratorQuotaParentRef

Used by AcceleratorQuotaSpec.

AcceleratorQuotaParentRef names the parent node by CR name. Nodes are cluster-scoped, so the name is globally unique and needs no namespace.

FieldTypeDescription
name Required string

Name is the parent AcceleratorQuota's metadata.name.

Maximum length: 253. Pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$.

AcceleratorQuotaRole

Used by AcceleratorQuotaSpec.

AcceleratorQuotaRole declares what a node is, rather than leaving it inferred from whether children happen to exist. A grouping created before its first child is still a Cohort, and adding a child can never silently convert a leaf.

Underlying type: string.

Allowed values: Cohort, ClusterQueue.

AcceleratorQuotaSpec

Used by AcceleratorQuota.

AcceleratorQuotaSpec is one node's declared position in the tree and, for a leaf, its budget.

The rules below are same-object shape checks only. Everything needing the rest of the tree — parent resolution, cycles, depth, containment, fleet-wide namespace uniqueness, role transitions — is enforced by the validating webhook at admission and re-checked by the controller at reconcile, which is the authority. Structural checks here are also stripped from the minimal CRD variant, so they are convenience, never the durable tier.

Validation: a ClusterQueue node must set parentRef; only the reserved root node is parent-less.

Validation: a Cohort node must not set priorityTier or distribution; no workload binds to a grouping.

Validation: a Cohort node's budgets carry only resourceName, resourceFlavor, and nominal.

Validation: a ClusterQueue node must carry at least one budget.

Validation: a budget whose effective distribution policy is Explicit must set perCluster.

Validation: a budget whose effective distribution policy is Proportional must not set perCluster; the split is computed.

FieldTypeDescription
role Required AcceleratorQuotaRole

Role declares whether this node groups other nodes or is a leaf carrying the budget. A node is one or the other, never both. Changing it is admitted only under the drained-leaf / childless-grouping guard, because the change deletes the underlying Kueue object.

parentRef AcceleratorQuotaParentRef

ParentRef is the edge to this node's parent. Every node sets it except the single reserved root. It is mutable: re-parenting updates the materialized ClusterQueue's cohort in place, so the queue, its LocalQueues, and its admitted workloads all survive.

priorityTier string

PriorityTier names the WorkloadPriorityClass stamped on this leaf's workloads. It is a default, not a partition: a workload declaring its own priority keeps it, and the leaf's ClusterQueue admits mixed priorities. OME references the class and does not create it. Capped at AcceleratorQuotaMaxNameLength because it is stamped into a label value.

Maximum length: 63. Pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$.

distribution AcceleratorQuotaDistribution

Distribution is this leaf's default split policy, overridable per budget entry. Unset means the operator-level default from the quota config applies; absent that too, the node reports Degraded rather than guessing.

budgets []AcceleratorBudget

Budgets is the per-flavor allowance, one entry per ResourceFlavor.

On a leaf this is the budget: the fleet-wide allowance where the tree is authored, that cluster's resolved share on a projected copy. On a Cohort node it is an authoring guardrail only — the parent number that parent >= sum(children) is checked against. A grouping materializes as a Kueue Cohort with no resourceGroups, so a Cohort budget is never quota anyone can consume.

Capped at the number of entries one Kueue resourceGroup accepts.

Maximum items: 16.

AcceleratorQuotaStatus

Used by AcceleratorQuota.

AcceleratorQuotaStatus is the observed state of one node. The quota controller owning the plane is its sole writer.

FieldTypeDescription
observedGeneration int64

ObservedGeneration is the metadata.generation the most recent status flush reflects.

parent string

Parent echoes the resolved parent's name, so a node's edge is readable from status alone once the controller has confirmed it resolves.

sourceGeneration int64

SourceGeneration is the source CR's generation this node's materialization reflects, echoed from the projection annotation once the local controller has materialized it. Set only on a projected copy: it is what lets the management plane compare remote progress against what it projected, which object-local generations cannot express.

budgets []AcceleratorBudgetStatus

Budgets reports, per resource and flavor, the resolved allowance and the usage rolled up from the materialized ClusterQueues.

capacity []AcceleratorCapacityStatus

Capacity is the observed accelerator capacity behind this tree, reported on the root node only. On a management plane it is the fleet view broken down per cluster; on a workload cluster it is that cluster's own derived capacity, which is the only thing the local controller writes on its root.

clusters []AcceleratorQuotaClusterStatus

Clusters reports per-cluster projection state on a management plane: which generation each workload cluster has, and why one is behind. Empty on a workload cluster, which projects nothing.

materialization AcceleratorQuotaMaterialization

Materialization records what this node last wrote successfully and whether that output is currently frozen. A frozen node keeps serving its last-good materialization; nothing is deleted while an invariant is violated.

conditions []Condition

Conditions reports Ready, Degraded, and Materialized.

AcceleratorRequirements

Used by ServingRuntimeSpec.

AcceleratorRequirements specifies the accelerator requirements for this runtime

FieldTypeDescription
acceleratorClasses []string

AcceleratorClasses lists the names of AcceleratorClasses this runtime supports

minMemory int64

MinMemory specifies minimum GPU memory required in GB

Minimum: 0.

minComputePerformanceTFLOPS int64

MinComputePerformanceTFLOPS specifies minimum compute capability in TFLOPS

Minimum: 0.

minArchitectureVersion string

MinArchitectureVersion Compute capability (NVIDIA) or equivalent

requiredFeatures []string

RequiredFeatures lists hardware features that must be present. Examples: ["tensor-cores", "fp8", "nvlink"].

preferredPrecisions []string

PreferredPrecisions lists numeric precisions in order of preference. Examples: ["fp8", "fp16", "fp32"].

AcceleratorResource

Used by AcceleratorClassSpec.

FieldTypeDescription
name Required string

Name of the resource (e.g., nvidia.com/gpu)

quantity Quantity

Quantity per accelerator

Default: "1".

divisible bool

Divisible indicates if the resource can be subdivided

AcceleratorSelection

Used by ComponentStatusSpec.

AcceleratorSelection shows what accelerator was selected and why

FieldTypeDescription
acceleratorClass string

AcceleratorClass that was selected

reason string

Reason explains why this accelerator was selected

nodeSelector map[string]string

NodeSelector that was applied to pods

resourceRequests map[string]string

ResourceRequests that were applied to pods

AcceleratorSelectionPolicy

Used by AcceleratorSelector.

AcceleratorSelectionPolicy defines how to select among matching accelerators

Underlying type: string.

AcceleratorSelector

Used by DecoderSpec, EngineSpec, InferenceServiceSpec.

AcceleratorSelector defines how to select accelerators for the InferenceService

FieldTypeDescription
acceleratorClass string

AcceleratorClass explicitly selects a specific AcceleratorClass. Takes precedence over other selectors.

constraints AcceleratorConstraints

Constraints defines requirements that accelerators must meet

policy AcceleratorSelectionPolicy

Policy defines the selection policy when multiple accelerators match

Allowed values: BestFit, Cheapest, MostCapable, FirstAvailable.

AnalysisMetric

Used by RolloutAnalysis.

AnalysisMetric is one success condition: a PromQL query whose scalar result is compared against Threshold with Operator. A multi-series result is reduced to the worst series for the operator before comparison — the maximum for LT/LTE, the minimum for GT/GTE — so the metric passes only when every series passes.

FieldTypeDescription
name Required string

Name identifies the metric in status and events; unique within Metrics.

query Required string

Query is a PromQL expression, templated with the rollout's revision context before execution. Available variables: {{.Namespace}}, {{.ISVCName}}, {{.Component}}, {{.CanaryService}}, {{.StableService}}, {{.CanaryRevision}}, {{.StableRevision}}. A result with multiple series is reduced to the worst series for Operator before comparison.

operator Required ComparisonOperator

Operator is the comparison applied as "result <Operator> Threshold" to decide whether this metric passes.

Allowed values: LT, LTE, GT, GTE.

threshold Required string

Threshold is the bound the query result is compared against. Parsed as a float (e.g. "0.05", "200", "1.5"); admission rejects a non-numeric value.

AnalysisMetricResult

Used by CanaryStatus.

AnalysisMetricResult is the last observed evaluation of one AnalysisMetric. Value is a string (not a float) because the Kubernetes API convention avoids floating-point fields; it is for display only.

FieldTypeDescription
name string

Name matches the AnalysisMetric.Name this result is for.

value string

Value is the query result at the last sample, formatted for display (e.g. "0.012"). Empty when the sample was inconclusive.

threshold string

Threshold echoes the bound that was applied, so the result is self-describing in status.

operator ComparisonOperator

Operator echoes the comparison that was applied.

passed bool

Passed is whether this metric satisfied its condition at the last sample.

message string

Message carries the reason when a metric did not pass or could not be evaluated (e.g. "no data", a query error).

time Time

Time is when this result was recorded.

AnalysisPrometheus

Used by GroupCanary.

AnalysisPrometheus locates and authenticates to the Prometheus the analysis queries.

Validation: at most one of providerRef and serverAddress may be set.

FieldTypeDescription
providerRef MetricProviderRef

ProviderRef names a logical metric provider bound per cluster in the operator's metricProviders configuration (shared with AutoscalerPolicy triggers), which supplies the server address, auth secret, and default headers. In a RolloutPolicy body this is the ONLY admitted spelling — a raw cluster-local URL inside a fleet-portable object defeats portability and is an SSRF surface. An unbound name is a deterministic config error: the rollout parks at run open rather than starting a roll whose gate cannot sample.

serverAddress string

ServerAddress is the base URL of the Prometheus HTTP API (e.g. http://prometheus.monitoring.svc:9090). Optional: when empty (and no ProviderRef is set), the operator-configured default source (canaryAnalysis.bundledPrometheusAddress) is used; if that is also unset the analysis has no source and its samples read inconclusive. Admission does not check the source — an unreachable or missing source surfaces controller-side as an inconclusive sample, not a rejection.

authRef SecretKeySelector

AuthRef points at a Secret key (in the InferenceService's namespace) holding a bearer token sent as "Authorization: Bearer <token>". Omit for an unauthenticated Prometheus (the bundled one). TLS/mTLS is not supported.

headers map[string]string

Headers are extra HTTP headers sent on every Prometheus query — e.g. "X-Scope-OrgID" for a multi-tenant Cortex/Thanos/Mimir front-end that scopes queries by tenant. Without the tenant header such a backend returns no data, which the gate reads as a permanent stall. Plaintext (not secret); use AuthRef for the bearer token.

AutoscalerClass

Used by AutoscalerPolicySpec, ComponentAutoscaler, ComponentAutoscalerStatus.

AutoscalerClass identifies the autoscaler implementation for a Component. Alpha. The API may change without notice.

Underlying type: string.

Allowed values: HPA, KEDA, External, None.

AutoscalerManagedBy

Used by ComponentAutoscalerStatus.

AutoscalerManagedBy identifies who owns the active autoscaler for a Component. Mirrored onto status.components.<comp>.autoscaler.managedBy by the ISVC status writer so operators can tell whether OME is reconciling the HPA / ScaledObject themselves or whether an external operator is driving scale via the published scaleTargetRef.

none and external are STATUS-FIELD TWINS — they share the same dispatch branch (delete any OME-managed HPA / SO and stay out) and are distinguished ONLY here in the ManagedBy field. The status writer inspects the resolved Class to emit "external" when the user opted into a non-OME scaler vs "none" when scaling is disabled entirely.

Underlying type: string.

Allowed values: ome, external, none.

AutoscalerPolicyProvenance

Used by ComponentAutoscalerStatus.

AutoscalerPolicyProvenance reports, on the consuming InferenceService, which policy produced a component's live autoscaler.

FieldTypeDescription
name string

Name of the AutoscalerPolicy in the InferenceService's namespace.

observedGeneration int64

ObservedGeneration is the policy generation the rendered block came from.

portableDigest string

PortableDigest is the policy's canonical spec digest — equal across clusters iff the policy specs match.

resolvedDigest string

ResolvedDigest is a digest of the rendered ComponentAutoscaler plus the effective bounds and bound provider endpoint. It differs per cluster by design; its job is per-home provenance ("did my policy edit land here?").

AutoscalerPolicyRef

Used by ComponentExtensionSpec.

AutoscalerPolicyRef names a same-namespace AutoscalerPolicy that renders this component's autoscaler. Deliberately a sibling of the inline Autoscaler block, not a field inside it: ref and inline block may coexist — the inline block wins — and that coexistence is the preview/rollback mechanism.

FieldTypeDescription
name Required string

Name of an AutoscalerPolicy in the InferenceService's namespace.

Minimum length: 1.

kind string

Kind of the referenced policy. "ClusterAutoscalerPolicy" is a reserved shape: admission rejects it until the cluster-scoped twin ships.

Allowed values: AutoscalerPolicy, ClusterAutoscalerPolicy.

Default: AutoscalerPolicy.

AutoscalerPolicySpec

Used by AutoscalerPolicy.

AutoscalerPolicySpec carries exactly one parameterized autoscaler template. A policy that needs different behavior for different components is two policies; components compose by each choosing a ref.

Validation: class KEDA requires keda and forbids hpa; class HPA forbids keda.

FieldTypeDescription
enforcement PolicyEnforcement

Enforcement tier. v1 admits only "Default"; "Required" is a reserved shape rejected at admission.

Allowed values: Default, Required.

Default: Default.

class Required AutoscalerClass

Class selects the template. External and None are inline-only: "someone else scales this component" is a per-service statement, not a reusable behavior.

Allowed values: HPA, KEDA.

keda KedaPolicyTemplate

Keda holds the parameterized KEDA template. Required when Class=KEDA.

hpa HPAAutoscaler

HPA holds HorizontalPodAutoscaler configuration, verbatim (no templating). Optional when Class=HPA; if absent the rendered block gets the default CPU=80% metric downstream, exactly like an inline block with a nil HPA field.

AutoscalerPolicyStatus

Used by AutoscalerPolicy.

AutoscalerPolicyStatus is bounded: counts and digests, never consumer name lists — per-consumer truth lives on each InferenceService's own status.

FieldTypeDescription
observedGeneration int64

ObservedGeneration is the spec generation this status reflects.

portableDigest string

PortableDigest is a digest of the spec after API defaulting, in a canonical encoding. Equal across clusters iff the specs are semantically identical; the multi-cluster preflight compares it against the control plane's copy.

attachedComponents int32

AttachedComponents counts the components in this namespace that currently reference the policy.

conditions []Condition

BackendPolicyRef

Used by TrafficStatus.

BackendPolicyRef identifies the OME-emitted backend policy resource sibling to the InferenceService.

FieldTypeDescription
apiVersion string

APIVersion of the resource (e.g. "gateway.envoyproxy.io/v1alpha1").

kind string

Kind of the resource (e.g. "BackendTrafficPolicy").

name string

Name of the resource, in the same namespace as the InferenceService.

BaseModelSpec

Used by BaseModel, ClusterBaseModel.

BaseModelSpec defines the desired state of BaseModel

FieldTypeDescription
modelFormat ModelFormat
modelType string

ModelType defines the architecture family of the model (e.g., "bert", "gpt2", "llama"). This value typically corresponds to the "model_type" field in a Hugging Face model's config.json. It is used to identify the transformer architecture and inform runtime selection and tokenizer behavior.

modelFramework ModelFrameworkSpec

ModelFramework specifies the underlying framework used by the model, such as "ONNX", "TensorFlow", "PyTorch", "Transformer", or "TensorRTLLM". This value helps determine the appropriate runtime for model serving.

modelArchitecture string

ModelArchitecture specifies the concrete model implementation or head, such as "LlamaForCausalLM", "GemmaForCausalLM", or "MixtralForCausalLM". This is often derived from the "architectures" field in Hugging Face config.json.

quantization ModelQuantization

Quantization defines the quantization scheme applied to the model weights, such as "fp8", "fbgemm_fp8", "int4", "nvfp4", or "mxfp4". This influences runtime compatibility and performance.

modelParameterSize string

ModelParameterSize indicates the total number of parameters in the model, expressed in human-readable form such as "7B", "13B", or "175B". This can be used for scheduling or runtime selection.

modelCapabilities []string

ModelCapabilities of the model, e.g., "TEXT_GENERATION", "TEXT_SUMMARIZATION", "TEXT_EMBEDDINGS"

apiCapabilities []string

API capabilities supported by the model, e.g., "OPENAI_V1_CHAT_COMPLETIONS"

modelConfiguration RawExtension

Configuration of the model, stored as generic JSON for flexibility.

storage Required StorageSpec

Storage configuration for the model

distribution Distribution

Since v1.3. Distribution selects how the model's weights are laid out across the cluster. PerNode, the default, puts a full copy on each selected node. Sharded is for loading the model through an external cache that holds it in chunks across the cluster. Sharded is in development: OME has no way to configure such a cache yet, so a Sharded model can't be served. pvc:// models can't use Sharded.

Embedded ModelExtensionSpec

ModelExtension is the common extension of the model

The fields of ModelExtensionSpec appear directly in this object.

servingMode []string

ServingMode of the model, e.g., ["On-demand", "Dedicated"]

maxTokens int32

MaxTokens is the maximum number of tokens that can be processed by the model

diffusionPipeline DiffusionPipelineSpec

DiffusionPipeline captures pipeline-specific metadata for diffusion models (from model_index.json).

additionalMetadata map[string]string

Additional metadata for the model

BenchmarkJobSpec

Used by BenchmarkJob.

BenchmarkJobSpec defines the specification for a benchmark job. All fields within this specification collectively represent the desired state and configuration of a BenchmarkJob.

FieldTypeDescription
huggingFaceSecretReference HuggingFaceSecretReference

HuggingFaceSecretReference is a reference to a Kubernetes Secret containing the Hugging Face API key. The referenced Secret must reside in the same namespace as the BenchmarkJob.

endpoint Required EndpointSpec

Endpoint is the reference to the inference service to benchmark.

serviceMetadata ServiceMetadata

ServiceMetadata records metadata about the backend model server or service being benchmarked. This includes details such as server engine, version, and GPU configuration for filtering experiments.

task Required string

Task specifies the task to benchmark, pattern: <input-modality>-to-<output-modality> (e.g., "text-to-text", "image-to-text").

Allowed values: text-to-text, image-to-text, text-to-embeddings, image-to-embeddings.

trafficScenarios []string

TrafficScenarios contains a list of traffic scenarios to simulate during the benchmark. If not provided, defaults will be assigned via genai-bench.

numConcurrency []int

NumConcurrency defines a list of concurrency levels to test during the benchmark. If not provided, defaults will be assigned via genai-bench.

maxTimePerIteration Required int

MaxTimePerIteration specifies the maximum time (in minutes) for a single iteration. Each iteration runs for a specific combination of TrafficScenarios and NumConcurrency.

maxRequestsPerIteration Required int

MaxRequestsPerIteration specifies the maximum number of requests for a single iteration. Each iteration runs for a specific combination of TrafficScenarios and NumConcurrency.

additionalRequestParams map[string]string

AdditionalRequestParams contains additional request parameters as a map.

dataset StorageSpec

Dataset is the dataset used for benchmarking. It is optional and only required for tasks other than "text-to-<output-modality>".

outputLocation Required StorageSpec

OutputLocation specifies where the benchmark results will be stored (e.g., object storage).

resultFolderName string

ResultFolderName specifies the name of the folder that stores the benchmark result. A default name will be assigned if not specified.

podOverride PodOverride

PodOverride customizes the benchmark pod. OME merges it into the pod it builds by default, so fields you leave unset keep their defaults.

BenchmarkJobStatus

Used by BenchmarkJob.

BenchmarkJobStatus reflects the state and results of the benchmark job. It will be set and updated by the controller.

FieldTypeDescription
state string

State represents the current state of the benchmark job: "Pending", "Running", "Completed", "Failed".

Allowed values: Pending, Running, Completed, Failed.

startTime Time

StartTime is the timestamp for when the benchmark job started.

completionTime Time

CompletionTime is the timestamp for when the benchmark job completed, either successfully or unsuccessfully.

lastReconcileTime Time

LastReconcileTime is the timestamp for the last time the job was reconciled by the controller.

failureMessage string

FailureMessage contains any error messages if the benchmark job failed.

details string

Details provide additional information or metadata about the benchmark job.

CanaryFailure

Used by CanaryStatus.

CanaryFailure is why and when a canary parked.

FieldTypeDescription
reason CanaryFailureReason

Reason names the gate that gave up.

Allowed values: CapacityTimeout, AnalysisStalled, StableRevisionMissing.

time Time

Time is when the canary parked.

CanaryFailureReason

Used by CanaryFailure.

CanaryFailureReason enumerates why a canary parked Failed.

Underlying type: string.

CanaryStatus

Used by ComponentStatusSpec, InferenceServiceStatus.

CanaryStatus is the canary executor's persistent state machine for one unit's spec.rollout.groups[].canary run: which step is active, when it was entered (Auto promotion measures Pause.Duration from here), and which revisions are the canary and the stable. It is written when a canary arms and replaced in place when a new target re-arms the unit; it is never cleared, so it also records how the last run ended. A completed run keeps CurrentStep equal to the number of steps with ObservedTrafficWeight 100 and StableRevisionHash empty; a rollback keeps RolledBackRevisionHash; a park keeps Failed. Absent only until the unit's first canary arms.

FieldTypeDescription
targetID string

TargetID identifies the canary group's pinned Component target set. A new target set re-arms the canary even when the externally routed Component's revision did not change. It is scoped to the canary group rather than the whole rollout run, so unrelated groups cannot reset canary progress.

canaryRevisionHash string

CanaryRevisionHash is the revision hash being rolled out.

stableRevisionHash string

StableRevisionHash is the revision hash that was serving as stable when the canary began — the rollback target. It is preserved across mid-canary retargets so a rollback always returns to the pre-canary stable revision, never to a partially-rolled intermediate. Cleared when the canary completes (the canary revision becomes the new stable).

currentStep int32

CurrentStep is the zero-based index into spec.rollout.groups[i].canary.steps; equal to the number of steps once the canary has completed.

stepEnteredTime Time

StepEnteredTime is when CurrentStep was entered. Auto promotion measures Pause.Duration from this timestamp.

observedTrafficWeight int32

ObservedTrafficWeight is the external traffic weight currently programmed for the canary revision (mirrors the active step's TrafficWeight once applied).

promotedThrough string

PromotedThrough is the ome.io/rollout-promote value the most recent step advance applied. It is stamped in the same status write as the advance — the durable record of the promotion, since metadata (the annotation) and status cannot be written atomically. While set, a lingering annotation with this value is inert (already applied; removal is retried best-effort). While the rollout is in progress it clears once the annotation is observed removed, re-arming manual promotion for later steps.

preStepHold bool

PreStepHold holds the canary's traffic at its currently-programmed weight after a repin whose clamped step would raise exposure: a repin may only hold or tighten, so the raise waits for an explicit ome.io/rollout-promote (value = the canary revision hash). Capacity may still converge to the clamped step — capacity ahead of traffic is the supported warm-up pattern; only traffic and step advance hold.

rolledBackRevisionHash string

RolledBackRevisionHash is set when a rollback (ome.io/rollout-rollback) abandons a canary: it records the primary Component's rejected revision hash. While set, the group is held on its stable revisions and the rejected target set is NOT retried — even after the annotation is cleared. The rollout re-arms only when a different target set appears.

analysisFailedChecks int32

AnalysisFailedChecks counts failing analysis samples in the CURRENT step (reset to zero on each advance). Auto-rollback fires when it reaches Analysis.FailureLimit. Set only under Promotion=Analysis.

lastEvaluationTime Time

LastEvaluationTime is when the analysis metrics were last sampled. The controller throttles sampling to at most once per Analysis.Interval using this timestamp, so a burst of unrelated reconciles cannot over-count failures. Set only under Promotion=Analysis.

lastConclusiveEvaluationTime Time

LastConclusiveEvaluationTime is when analysis last produced a conclusive sample (pass or fail — i.e. Prometheus answered). The stall timeout is measured from here: a long run of inconclusive samples escalates to Failed. Set only under Promotion=Analysis.

metricResults []AnalysisMetricResult

MetricResults is the most recent per-metric evaluation, for observability (kubectl get isvc shows why a step held or rolled back). Set only under Promotion=Analysis.

capacityWaitSince Time

CapacityWaitSince is when the current step's capacity gate became unmet. The ready timeout is measured from here and never from the step's soak anchor, so a long soak cannot spend the capacity budget and a capacity dip cannot restart the soak. Cleared once the step's capacity is met.

failed CanaryFailure

Failed records that the canary is parked at CurrentStep: the capacity gate stayed unmet past the ready timeout, analysis stayed inconclusive past the stall timeout, or a rollback found no stable revision to return to. While set the step machine does not run, the phase reads Failed and the stable revision keeps serving. A re-arm toward a new target clears any park. A rollback request clears a capacity-timeout or analysis park and drains the rejected revision; a park for a missing stable revision refuses the request and removes it, since the revert it asks for is the one that could not run.

CandidateAllocationStatus

Used by CandidatePlacement.

CandidateAllocationStatus separates original, currently authorized, and desired floors. A zero current floor does not authorize deletion before traffic drains.

FieldTypeDescription
clusterUID UID
inventoryPending bool

InventoryPending prevents unknown standing resources from becoming free migration capacity. It is cleared only by an identified member inventory.

homeInputsPending bool

HomeInputsPending holds movement when current full-policy inputs cannot be verified, while retaining the last accepted desired floors.

raceCandidate bool

RaceCandidate authorizes cleanup of a Single race copy after another candidate wins. A retained winner does not carry this permission.

replacementStartedAt MicroTime

ReplacementStartedAt persists the start of an authorized bounded probe. The configured replacement timeout is evaluated against this instant.

matched bool

Matched distinguishes a desired full-policy home from an outgoing home, including an affinity that matches every registration without terms.

currentHome PlacementHomePolicy

CurrentHome retains the full policy authorized at a home through draining.

desiredHome PlacementHomePolicy

DesiredHome is present for every intended full-policy home.

matchingTerms []int32

MatchingTerms contains zero-based indexes into the source's affinity terms.

weight int64

Weight is the effective static allocation weight, when applicable.

Minimum: 0.

componentMatches []ComponentAffinityMatch

ComponentMatches records, under the ComponentAffinity policy, how each component other than the primary one matched this cluster. MatchingTerms and Weight hold the primary component's match. The accepted plan keeps them so that member floors never follow unaccepted label changes.

Maximum items: 2.

capacity PlacementCapacitySample

Capacity is the accepted hardware sample, when capacity determines weight.

originalReplicas int32

Minimum: 0.

currentReplicas int32

Minimum: 0.

desiredReplicas int32

Minimum: 0.

drainRequested bool

DrainRequested withdraws this home from routing before physical removal.

CandidateAutoscalingStatus

Used by CandidatePlacement.

CandidateAutoscalingStatus is the per-home AutoscalerPolicy digest state the watch-funnel lifts off a derived InferenceService.

FieldTypeDescription
policies []CandidatePolicyDigest

Policies reports the portable digest of each policy as observed on this home. Every entry must match the control plane's copy; a mismatch is distribution skew.

components map[ComponentType]CandidateComponentAutoscaling

Components maps each policy-consuming component to its per-home resolved digest ("did my policy edit land here?").

ready bool

Ready is true when every policy-consuming component on this home reports specSource=policy with a resolved digest.

CandidateComponentAutoscaling

Used by CandidateAutoscalingStatus.

CandidateComponentAutoscaling is one component's rendered-autoscaler state on one home.

FieldTypeDescription
resolvedDigest string
ready bool

CandidatePlacement

Used by PlacementStatus.

CandidatePlacement is the per-cluster state of a fan-out candidate.

FieldTypeDescription
allocation CandidateAllocationStatus

Allocation is the persisted floor and identity of this member.

appliedPlanID string

AppliedPlanID identifies the allocation acknowledged by this member.

observationKnown bool

ObservationKnown distinguishes a current observation from retained evidence.

observationFailingSince Time

Since v1.3. ObservationFailingSince is when the control plane's reads of this home started failing. It is unset while reads succeed. While the configured observation grace lasts from this time, the home keeps the ready count from its last successful read.

cluster string

Cluster is the WorkloadCluster name.

phase CandidatePlacementPhase

Phase is the candidate's state.

endpoint URL

Endpoint is this candidate's own externally-addressable URL, mirrored from its derived InferenceService's status.url once admitted AND addressable. In Single mode only the winner carries one and the top-level PlacementStatus.Endpoint is authoritative; in All/Split mode every serving home carries its own, and this list is the source of truth an external LB/DNS consumes to route across homes. Empty until the home is addressable.

admittedReplicas int32

AdmittedReplicas is how many replicas this home's Kueue has admitted. In Split it also drives global accounting: the control plane sums it across homes to decide whether the desired count is met.

readyReplicas int32

ReadyReplicas is how many of this home's replicas are serving traffic. It is the live count basis and health gate for routing across homes.

autoscaling CandidateAutoscalingStatus

Autoscaling mirrors this home's AutoscalerPolicy state so digest skew between homes is visible from the source InferenceService. Set only when the source references at least one policy.

rollout CandidateRolloutStatus

Rollout mirrors this home's rollout-run provenance (run identity plus per-group plan digests, never the plan bodies) so plan drift between homes is visible from the source InferenceService. Set only when the source's rollout groups reference a RolloutPolicy.

CandidatePlacementPhase

Used by CandidatePlacement.

CandidatePlacementPhase is the per-cluster state of a fan-out candidate.

Underlying type: string.

Allowed values: Admitting, Placed, Admitted.

CandidatePolicyDigest

Used by CandidateAutoscalingStatus.

CandidatePolicyDigest pairs a policy name with the portable digest this home observed for it.

FieldTypeDescription
name string
portableDigest string

CandidateRolloutGroup

Used by CandidateRolloutStatus.

CandidateRolloutGroup is one pinned group's provenance as observed on a home.

FieldTypeDescription
source RolloutPlanSource

Source is where the group's progression came from (Inline or Policy).

policyName string

PolicyName names the RolloutPolicy when Source is Policy.

portableDigest string

PortableDigest is the pinned progression body's portable digest.

CandidateRolloutLastRun

Used by CandidateRolloutStatus.

CandidateRolloutLastRun is the bounded outcome of a home's last closed run.

FieldTypeDescription
outcome RolloutRunOutcome

Outcome is how the run ended.

digest string

Digest folds the closed run's per-group portable digests into one order-sensitive comparable value.

CandidateRolloutStatus

Used by CandidatePlacement.

CandidateRolloutStatus is the bounded per-home rollout-run state the watch funnel lifts off a derived InferenceService: run identity and per-group provenance digests, never the pinned plan bodies (fleet-drift dashboards compare digests; plan content lives in the policy's git history).

FieldTypeDescription
activeRunID string

ActiveRunID is the home's open rollout run, empty when none is open.

activeGroups []CandidateRolloutGroup

ActiveGroups is the active run's per-group provenance in pinned-plan order: which source each group pinned and under which digest.

lastRun CandidateRolloutLastRun

LastRun is the bounded record of the home's most recently closed run.

CapacitySource

Used by TrafficMapCapacity.

CapacitySource names which input produced an entry's Allocated count.

Underlying type: string.

Allowed values: ControlPlane, Endpoint.

ClusterAffinityTerm

Used by ComponentClusterAffinity, PlacementSpec.

ClusterAffinityTerm selects WorkloadClusters by ANDing its requirements. Multiple terms form a union; a weight assigns replica shares to each match.

Validation: a cluster affinity term must contain a requirement.

FieldTypeDescription
weight int32

Weight is permitted only for static Split. If any term has an explicit weight, matching term weights add and omitted weights contribute one. Omission must be preserved to distinguish unweighted overlapping terms. Weights are replica ratios, so they have no upper bound.

Minimum: 1.

matchExpressions []ClusterSelectorRequirement

MatchExpressions selects the WorkloadCluster's actual labels.

Maximum items: 64.

matchFields []ClusterSelectorRequirement

MatchFields selects the real metadata.name using In or NotIn. Multiple names are allowed; a label named metadata.name does not affect this match.

Maximum items: 64.

ClusterConnectionSource

Used by WorkloadClusterSpec.

ClusterConnectionSource is a pluggable connection (modeled on Kueue's MultiKueueCluster.ClusterSource): exactly one of an in-cluster kubeconfig Secret or a SIG-Multicluster ClusterProfile reference.

Validation: exactly one of kubeConfig or clusterProfileRef must be set.

FieldTypeDescription
kubeConfig KubeConfigSource
clusterProfileRef ClusterProfileRef

ClusterProfileRef

Used by ClusterConnectionSource.

ClusterProfileRef references a SIG-Multicluster cluster-inventory-api ClusterProfile. The reference is recorded but not resolved.

FieldTypeDescription
name Required string

ClusterSelectorRequirement

Used by ClusterAffinityTerm.

ClusterSelectorRequirement tests one label or supported object field.

FieldTypeDescription
key Required string

Key is a label key, or metadata.name for a field requirement.

Minimum length: 1.

operator Required NodeSelectorOperator

Operator follows Kubernetes node-selector semantics for labels.

Allowed values: In, NotIn, Exists, DoesNotExist, Gt, Lt.

values []string

Values is nonempty for In/NotIn, empty for Exists/DoesNotExist, and a single integer for Gt/Lt.

Maximum items: 64.

ComparisonOperator

Used by AnalysisMetric, AnalysisMetricResult.

ComparisonOperator is how an AnalysisMetric result is compared to its Threshold. "result <op> threshold" being true means the metric is healthy.

Underlying type: string.

ComponentAffinityMatch

Used by CandidateAllocationStatus.

ComponentAffinityMatch records how one component's own affinity terms matched a cluster.

FieldTypeDescription
component ComponentType

Allowed values: engine, decoder, router.

matchingTerms []int32

MatchingTerms contains zero-based indexes into the component's terms.

weight int64

Weight is the component's effective static weight, when applicable.

Minimum: 0.

ComponentAutoscaler

Used by ComponentExtensionSpec, InferenceReplicaSpec.

ComponentAutoscaler configures the autoscaler for a single Component (engine / decoder / router). Takes priority over the legacy ome.io/autoscalerClass annotation for this Component, and is the only way to configure per-Component autoscaling on an InferenceService. Alpha. The API may change without notice.

FieldTypeDescription
class Required AutoscalerClass

Class selects the autoscaler implementation.

Allowed values: HPA, KEDA, External, None.

keda KedaAutoscaler

Keda holds KEDA-specific configuration. Required when Class == "KEDA".

hpa HPAAutoscaler

HPA holds HorizontalPodAutoscaler-specific configuration. Optional when Class == "HPA"; if absent the controller emits a default CPU=80% HPA.

ComponentAutoscalerStatus

Used by ComponentStatusSpec.

ComponentAutoscalerStatus reports per-Component autoscaler state on the InferenceService. Mirrors the resolved ComponentAutoscaler block plus the live HPA / ScaledObject metrics so an operator can read the authoritative scaler shape, who owns it, and what it's currently doing — all from the parent ISVC without chasing IRs and scalers separately.

Populated by the ISVC status writer for RawDeployment- and OMENative-managed Components. The writer degrades gracefully when a Component has no live scaler — ManagedBy reports "none" and counters stay zero without crashing.

Alpha. The shape may change without notice.

FieldTypeDescription
class AutoscalerClass

Class echoes the resolved autoscaler class as picked by the Component's deployment-mode resolver. One of HPA | KEDA | External | None. Mirrors the input that drove dispatch so the operator can confirm the inheritance chain landed on the expected class.

managedBy AutoscalerManagedBy

ManagedBy reports who owns the underlying scaler object. Distinguished from Class because none and external are dispatch-equivalent (both => delete any OME-managed HPA / SO); the surface-level distinction lives here.

  • "ome": OME emitted the HPA / ScaledObject; conditions and replica counters below mirror its live status.
  • "external": operator-owned scaler; OME publishes scaleTargetRef and stays out. Conditions empty.
  • "none": no OME-managed scaler is active. Conditions empty; counters zero.

Allowed values: ome, external, none.

specSource string

SpecSource reports which layer of the ISVC -> policy -> runtime -> legacy -> default inheritance chain produced the resolved Autoscaler block. One of "isvc" | "policy" | "runtime" | "legacy" | "default". Mirrors autoscaler.SpecSource so the operator can debug which layer is contributing the live config.

policy AutoscalerPolicyProvenance

Policy identifies the AutoscalerPolicy that rendered the live block. Set only when SpecSource is "policy".

shadowedPolicyRef ShadowedAutoscalerPolicy

ShadowedPolicyRef reports a policy ref outranked by an inline block (SpecSource "isvc" with spec.<component>.autoscalerPolicyRef set). Its wouldRenderDigest is the in-cluster preview of what the policy would produce if the inline block were removed.

currentReplicas int32

CurrentReplicas is mirrored from the HPA / ScaledObject status. Zero when ManagedBy != "ome" or when the scaler has not yet reported.

desiredReplicas int32

DesiredReplicas is mirrored from the HPA / ScaledObject status. Zero when ManagedBy != "ome" or when the scaler has not yet reported.

lastScaleTime Time

LastScaleTime mirrors the HPA / ScaledObject's last scale event. Nil when ManagedBy != "ome", when the scaler has not yet reported, or when no scaling has occurred since the scaler was created.

conditions []Condition

Conditions mirrors the HPA's or ScaledObject's conditions verbatim (HPA: ScalingActive / AbleToScale / ScalingLimited; ScaledObject: Ready / Active / Fallback / Paused). Empty when ManagedBy != "ome" — operator-owned scalers are surfaced via scaleTargetRef instead.

ComponentBoundsField

Used by ReplicaValueSource.

ComponentBoundsField names a replica bound on the consuming component's ComponentExtensionSpec that a ReplicaValueSource resolves against.

Underlying type: string.

Allowed values: MaxReplicas, MinReplicas.

ComponentClusterAffinity

Used by PlacementSpec.

ComponentClusterAffinity holds one affinity term list per component. Every listed component must match the same clusters. In Split, each list's weights set that component's shares; in Single and All the lists only select.

FieldTypeDescription
engine []ClusterAffinityTerm

Engine selects clusters for the engine and, in Split, weights its shares. It is required when the service declares an engine.

Minimum items: 1. Maximum items: 64.

decoder []ClusterAffinityTerm

Decoder selects clusters for the decoder and, in Split, weights its shares over the clusters that hold engine replicas. It is required when the service declares a decoder.

Minimum items: 1. Maximum items: 64.

router []ClusterAffinityTerm

Router selects clusters for the router. In Split, it divides router.minReplicas across the clusters that hold engine replicas; without it, each such cluster runs the full router policy.

Minimum items: 1. Maximum items: 64.

ComponentExtensionSpec

Used by DecoderSpec, EngineSpec, RouterSpec.

ComponentExtensionSpec defines the deployment configuration for a given InferenceService component

FieldTypeDescription
minReplicas int

Minimum number of replicas, defaults to 1 but can be set to 0 to enable scale-to-zero.

maxReplicas int

Maximum number of replicas for autoscaling.

timeoutSeconds int64

TimeoutSeconds specifies the number of seconds to wait before timing out a request to the component.

labels map[string]string

Labels that will be added to the component pod. More info: http://kubernetes.io/docs/user-guide/labels

annotations map[string]string

Annotations that will be added to the component pod. More info: http://kubernetes.io/docs/user-guide/annotations

servicePortAppProtocols map[string]string

Since v1.3. ServicePortAppProtocols maps generated Service port names to their Kubernetes appProtocol values. Declared ports use their container port name.

minAvailable IntOrString

MinAvailable specifies how many component pods must still be available after the eviction

maxUnavailable IntOrString

MaxUnavailable specifies how many component pods can be unavailable

deploymentStrategy DeploymentStrategy

The deployment strategy to use to replace existing pods with new ones. Only applicable for raw deployment mode.

lifecycle LifecycleSpec

Since v1.3. Lifecycle groups OMENative-specific lifecycle policies for this Component. Applies only when the Component resolves to deploymentMode OMENative (spec.deploymentMode or the per-Component ome.io/deploymentMode annotation); ignored otherwise. A field left unset here inherits the ServingRuntime's value for the Component; the controller fills what neither sets from cluster configuration and fixed fallbacks and never writes them back. The status counterpart is status.components.<component>.lifecycle.

autoscaler ComponentAutoscaler

Since v1.3. Autoscaler configures the per-Component autoscaler dispatch and the underlying KEDA / HPA configuration. Takes priority over the legacy ome.io/autoscalerClass annotation for this Component, and is the only way to configure per-Component autoscaling: scale metrics live here (Autoscaler.HPA.Metrics), alongside MinReplicas / MaxReplicas above. Alpha. The API may change without notice.

autoscalerPolicyRef AutoscalerPolicyRef

Since v1.3. AutoscalerPolicyRef names a same-namespace AutoscalerPolicy whose template renders this Component's autoscaler. An inline Autoscaler block above always outranks the ref; the two may coexist, which is the documented preview/rollback mechanism. Alpha. The API may change without notice.

ComponentStatusSpec

Used by InferenceServiceStatus.

ComponentStatusSpec describes the state of the component

FieldTypeDescription
url URL

URL holds the primary url for this component. It generally has the form http[s]://{name}.{namespace}.{cluster-level-suffix}

restURL URL

REST endpoint of the component if available.

address Addressable

Addressable endpoint for the InferenceService

selectedAccelerator AcceleratorSelection

SelectedAccelerator shows which AcceleratorClass was selected

lifecycle LifecycleStatus

Since v1.3. Lifecycle reports OMENative-managed lifecycle state for this Component when the Component resolves to deploymentMode OMENative (spec.deploymentMode or the per-Component ome.io/deploymentMode annotation). Counterpart of the LifecycleSpec sub-block on ComponentExtensionSpec. Nil otherwise.

rolloutPhase RolloutPhase

Since v1.3. RolloutPhase is the canary step machine's state for this Component when a spec.rollout canary group governs it. One of Stable, Canarying, Pending, Paused, Promoting, RollingBack, RolledBack, Failed. Written on the Component the step machine drives (the unit's entrypoint) and never cleared: it reads Stable between runs, a completed canary included. Empty for Components no canary group governs (blueGreen/rollingUpdate groups report under status.rolloutCoordination) and on deployment modes without the rollout contract — e.g. RawDeployment.

Allowed values: Stable, Canarying, Pending, Paused, Promoting, RollingBack, RolledBack, Failed.

latestReadyRevision string

LatestReadyRevision is the per-revision Service name (<isvc>-<component>-rev-<hash>) fronting the most recent revision whose pods reached Ready. Equal to LatestRolledoutRevision once the rollout completes; set ahead of it during in-flight rollouts.

latestRolledoutRevision string

Since v1.3. LatestRolledoutRevision is the per-revision Service name (<isvc>-<component>-rev-<hash>) of the most recent revision that fully owns this Component's traffic (i.e., the rollout has completed). Drives the consumer-side HTTPRoute backendRef.

previousRolledoutRevision string

Since v1.3. PreviousRolledoutRevision is the per-revision Service name (<isvc>-<component>-rev-<hash>) of the revision that fully owned this Component's traffic immediately before LatestRolledoutRevision; recorded when LatestRolledoutRevision advances. Retained for diagnosis and traffic reference during partial rollbacks.

traffic []ComponentTrafficTarget

Since v1.3. Traffic reports per-revision traffic weights for this Component. Each entry corresponds to one revision currently receiving traffic. The HTTPRoute builder reads this to emit weighted backendRefs.

canary CanaryStatus

Since v1.3. Canary tracks the canary step machine for the unit this Component belongs to — the router alone, or engine+decoder together. It is written on the unit's entrypoint Component (the router, or the engine) and is absent on a secondary, so a reader never sees two copies of one run. Absent until the unit's first canary arms; afterwards it carries the unit's most recent run, a finished one included (see CanaryStatus).

Units advance independently, which is why the state cannot live in the single InferenceServiceStatus.Canary: two runs would overwrite each other's step counter and revision pair. That field is retained as an alias for the entrypoint unit's run so existing readers keep working.

autoscaler ComponentAutoscalerStatus

Since v1.3. Autoscaler reports the per-Component autoscaler state — resolved Class / ManagedBy / SpecSource and (when ManagedBy == "ome") live CurrentReplicas / DesiredReplicas / LastScaleTime / Conditions mirrored from the underlying HPA or ScaledObject. Populated by the ISVC status writer for RawDeployment- and OMENative-managed Components. See ComponentAutoscalerStatus for the full field semantics.

scaleTargetRef ScaleTargetRef

Since v1.3. ScaleTargetRef is the canonical scale target for this Component. For OMENative-managed Components this points at the InferenceReplica's /scale subresource; for RawDeployment-managed Components it points at the underlying Deployment. Published so external scalers (when Autoscaler.ManagedBy == "external") know the GroupKind they should target. Populated whenever the Component has a defined scale target — independent of whether an OME-managed HPA / SO is active.

ComponentTrafficTarget

Used by ComponentStatusSpec, InferenceReplicaStatus.

ComponentTrafficTarget describes the percentage of traffic routed to one revision of one Component. RevisionName is the per-revision Service name produced by OMENative's coordination layer (e.g. llama-engine-rev-abc123), which the HTTPRoute builder consumes directly as a backend reference.

FieldTypeDescription
revisionName string

RevisionName is the per-revision Service name for this target.

percent int32

Percent is the percentage of traffic the consumer should route to RevisionName. Sum across all entries for one Component is 100.

Minimum: 0. Maximum: 100.

tag string

Tag is an optional short identifier for the target (e.g. "latest", "prev"). Cosmetic; not used by the consumer.

latestRevision bool

LatestRevision is true when this entry corresponds to the LatestRolledoutRevision for the Component.

pairingProtocol string

PairingProtocol is the engine↔decoder wire-compatibility token the target's revision was minted under (spec.rollout.pairingProtocol at mint time). Consumers MUST only pair engine and decoder targets whose PairingProtocol values are equal; an empty value pairs with anything.

ComponentType

Used by ComponentAffinityMatch, InferenceReplicaSpec, MigrationHistoryEntry, PlacementComponentDemand, PlacementComponentFloor, ProportionalPolicy, RolloutCoordinationGroupStatus, RolloutGroup, RolloutRunTarget.

ComponentType contains the different types of components of the service

Underlying type: string.

ConsistentHashSpec

Used by TrafficSpec.

ConsistentHashSpec selects what request attribute to hash on when LoadBalancingType=ConsistentHash. Exactly one of Headers or Cookie must be set when Type is Header or Cookie respectively; both forbidden when Type is SourceIP.

FieldTypeDescription
type Required HashType

Type selects the hash source.

Allowed values: Header, Cookie, SourceIP.

headers []HashHeader

Headers to hash on. Required when Type=Header (one or more). Translators that support multi-header hashing concatenate the headers before hashing; when the active translator supports only single-header hashing, multi-header specs are rejected at admission. Forbidden when Type is not Header.

cookie HashCookie

Cookie configuration. Required when Type=Cookie. Forbidden when Type is not Cookie.

CoordinationPhase

Used by RolloutCoordinationGroupStatus.

CoordinationPhase is the metric-stable enum for a coordination group's base reconcile phase.

Underlying type: string.

Allowed values: Idle, Surging, Waiting, Shifting, Draining, ScalingDown, Staged, Failed, RollingBack, Paused.

CoordinationPolicy

Used by RolloutCoordinationGroupStatus.

CoordinationPolicy selects the cross-Component coordination semantic applied to a RolloutCoordinationGroup.

Underlying type: string.

Allowed values: BlueGreen, RollingUpdate, Independent, Sequential.

DecoderSpec

Used by InferenceServiceSpec, ServingRuntimeSpec.

DecoderSpec defines the configuration for the Decoder component (token generation in PD-disaggregated deployment). Used specifically for prefill-decode disaggregated deployments to handle the token generation phase. Similar to EngineSpec in structure, it allows for detailed pod and container configuration, but is specifically used for the decode phase when separating prefill and decode processes.

FieldTypeDescription
Embedded PodSpec

This spec provides a full PodSpec for the decoder component. Allows complete customization of the Kubernetes Pod configuration including containers, volumes, security contexts, affinity rules, and other pod settings.

The fields of PodSpec appear directly in this object.

Embedded ComponentExtensionSpec

ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc. Controls scaling behavior and resource allocation for the decoder component.

The fields of ComponentExtensionSpec appear directly in this object.

runner RunnerSpec

Runner container override for customizing the main container. This is essentially a container spec that can override the default container. Defines the main decoder container configuration, including image, resource requests/limits, environment variables, and command.

leader LeaderSpec

Leader node configuration (only used for multi-node deployment). Defines the pod and container spec for the leader node that coordinates distributed token generation in multi-node deployments.

worker WorkerSpec

Worker nodes configuration (only used for multi-node deployment). Defines the pod and container spec for worker nodes that perform distributed token generation tasks as directed by the leader.

topologyKey string

Since v1.3. TopologyKey is the node-label key (e.g. an NVLink/RDMA fabric-domain label) used to co-locate all pods of one multi-node (leader+worker) gang into a single network / NVLink topology domain. When set on a multi-node component, OME auto-generates the per-instance worker→leader podAffinity that anchors every worker to its gang's leader on a node sharing this label value — so users need not hand-write that affinity. Only meaningful for multi-node components; ignored for single-pod (no leader to anchor to). Unset means no auto-generated gang affinity.

topologySpread TopologySpreadPolicy

Since v1.3. TopologySpread spreads this component's instances across fault domains so losing one domain (rack / fabric slice / cube) cannot take out every instance at once. Rendered as a standard topologySpreadConstraint (maxSkew 1) on each instance's anchor pod (the leader, or the sole pod of a single-pod instance); workers follow their leader, so gangs stay whole. Required renders as DoNotSchedule — balanced spreading enforced by any scheduler that keeps PodTopologySpread's Filter, including the OME gang scheduler's packing profile. Preferred renders as ScheduleAnyway — advisory only, and currently without effect under the OME gang scheduler (its profile disables the spreading Score and pre-narrows gang candidates to one domain). Not part of the revision hash: changing it shapes future placements without rolling a healthy fleet. Unset keeps pure bin-packing.

Allowed values: Preferred, Required.

topologySpreadKey string

Since v1.3. TopologySpreadKey is the node-label key naming the fault domains TopologySpread spreads across. Defaults to TopologyKey — right for fabrics where the co-location domain IS the failure zone (an NVLink rack). Set it to a coarser label when the failure zone contains many gang domains: e.g. co-locate by the TPU partition label while spreading across cloud.google.com/gce-topology-subblock. Single-pod components have no co-location key, so spreading them requires setting this explicitly. Ignored unless TopologySpread is set.

acceleratorOverride AcceleratorSelector

AcceleratorOverride allows overriding the global accelerator selection for this component

DiffusionComponentSpec

Used by DiffusionPipelineSpec.

DiffusionComponentSpec captures an individual component used by a diffusion pipeline. The fields map directly to entries in a diffusers model_index.json file.

FieldTypeDescription
library string

Library providing the component implementation, e.g., "diffusers" or "transformers".

type string

Type is the fully qualified class name for the component, e.g., "FlowMatchEulerDiscreteScheduler".

DiffusionPipelineSpec

Used by BaseModelSpec, SupportedModelFormat.

DiffusionPipelineSpec describes a diffusers pipeline so that runtimes can validate compatibility. When set, these fields should mirror the content of the model's model_index.json file.

FieldTypeDescription
className string

ClassName is the pipeline implementation, e.g., "StableDiffusionXLPipeline" or "QwenImagePipeline".

scheduler DiffusionComponentSpec

Scheduler component used by the pipeline.

textEncoder DiffusionComponentSpec

TextEncoder component used by the pipeline.

tokenizer DiffusionComponentSpec

Tokenizer component used by the pipeline.

transformer DiffusionComponentSpec

Transformer (UNet/DiT) component used by the pipeline.

vae DiffusionComponentSpec

VAE component used by the pipeline.

additionalComponents map[string]DiffusionComponentSpec

AdditionalComponents captures any other pipeline parts keyed by their model_index.json entry.

Distribution

Used by BaseModelSpec.

Distribution selects how a BaseModel's weights are laid out across the cluster. Sharded is in development, and OME can't serve a Sharded model yet.

Underlying type: string.

Allowed values: PerNode, Sharded.

DownloadPolicy

Used by StorageSpec.

DownloadPolicy decides whether a node keeps a separate copy of a model's files. AlwaysDownload, the default, keeps one per model. ReuseIfExists lets the model agent reuse Hugging Face files that another model already downloaded to the node.

Underlying type: string.

Allowed values: AlwaysDownload, ReuseIfExists.

Endpoint

Used by EndpointSpec.

Endpoint defines a direct URL-based inference service with additional API configuration.

FieldTypeDescription
url Required string

URL represents the endpoint URL for the inference service.

Pattern: ^(http|https)://.

apiFormat Required string

APIFormat specifies the type of API, such as "openai" or "oci-cohere".

Allowed values: openai, oci-cohere, cohere.

modelName string

ModelName specifies the name of the model being served at the endpoint. Useful for endpoints that require model-specific configuration. For instance, for openai API, this is a required field in the payload

EndpointOverrideSpec

Used by TrafficSpec.

EndpointOverrideSpec configures Envoy Gateway's loadBalancer endpoint-override feature. When a request carries an endpoint reference (typically a header), the gateway routes the request to that exact endpoint if healthy, otherwise falls back to the configured LoadBalancer Algorithm.

FieldTypeDescription
type Required EndpointOverrideType

Type selects where to read the endpoint override from.

Allowed values: Header, Metadata.

headers []HashHeader

Headers to read the endpoint reference from. Required when Type=Header. Each header value must be "<host>:<port>" or "<ip>:<port>".

EndpointOverrideType

Used by EndpointOverrideSpec.

EndpointOverrideType selects how the override endpoint reference is extracted from the request.

Underlying type: string.

EndpointSpec

Used by BenchmarkJobSpec.

EndpointSpec defines a reference to an inference service. It supports either a Kubernetes-style reference (InferenceService) or an Endpoint struct for a direct URL. Cross-namespace references are supported for InferenceService but require appropriate RBAC permissions to access resources in the target namespace.

FieldTypeDescription
inferenceService InferenceServiceReference

InferenceService holds a Kubernetes reference to an internal inference service.

endpoint Endpoint

Endpoint holds the details of a direct endpoint for an external inference service, including URL and API details.

EngineSpec

Used by InferenceServiceSpec, ServingRuntimeSpec.

EngineSpec defines the configuration for the Engine component (can be used for both single-node and multi-node deployments). Provides a comprehensive specification for deploying model serving containers and pods. It allows for complete Kubernetes pod configuration including main containers, init containers, sidecars, volumes, and other pod-level settings. For distributed deployments, it supports leader-worker architecture configuration.

FieldTypeDescription
Embedded PodSpec

This spec provides a full PodSpec for the engine component. Allows complete customization of the Kubernetes Pod configuration including containers, volumes, security contexts, affinity rules, and other pod settings.

The fields of PodSpec appear directly in this object.

Embedded ComponentExtensionSpec

ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc. Controls scaling behavior and resource allocation for the engine component.

The fields of ComponentExtensionSpec appear directly in this object.

runner RunnerSpec

Runner container override for customizing the engine container. This is essentially a container spec that can override the default container. Defines the main model runner container configuration, including image, resource requests/limits, environment variables, and command.

leader LeaderSpec

Leader node configuration (only used for multi-node deployment). Defines the pod and container spec for the leader node that coordinates distributed inference in multi-node deployments.

worker WorkerSpec

Worker nodes configuration (only used for multi-node deployment). Defines the pod and container spec for worker nodes that perform distributed processing tasks as directed by the leader.

topologyKey string

Since v1.3. TopologyKey is the node-label key (e.g. an NVLink/RDMA fabric-domain label) used to co-locate all pods of one multi-node (leader+worker) gang into a single network / NVLink topology domain. When set on a multi-node component, OME auto-generates the per-instance worker→leader podAffinity that anchors every worker to its gang's leader on a node sharing this label value — so users need not hand-write that affinity. Only meaningful for multi-node components; ignored for single-pod (no leader to anchor to). Unset means no auto-generated gang affinity.

topologySpread TopologySpreadPolicy

Since v1.3. TopologySpread spreads this component's instances across fault domains so losing one domain (rack / fabric slice / cube) cannot take out every instance at once. Rendered as a standard topologySpreadConstraint (maxSkew 1) on each instance's anchor pod (the leader, or the sole pod of a single-pod instance); workers follow their leader, so gangs stay whole. Required renders as DoNotSchedule — balanced spreading enforced by any scheduler that keeps PodTopologySpread's Filter, including the OME gang scheduler's packing profile. Preferred renders as ScheduleAnyway — advisory only, and currently without effect under the OME gang scheduler (its profile disables the spreading Score and pre-narrows gang candidates to one domain). Not part of the revision hash: changing it shapes future placements without rolling a healthy fleet. Unset keeps pure bin-packing.

Allowed values: Preferred, Required.

topologySpreadKey string

Since v1.3. TopologySpreadKey is the node-label key naming the fault domains TopologySpread spreads across. Defaults to TopologyKey — right for fabrics where the co-location domain IS the failure zone (an NVLink rack). Set it to a coarser label when the failure zone contains many gang domains: e.g. co-locate by the TPU partition label while spreading across cloud.google.com/gce-topology-subblock. Single-pod components have no co-location key, so spreading them requires setting this explicitly. Ignored unless TopologySpread is set.

acceleratorOverride AcceleratorSelector

AcceleratorOverride allows overriding the global accelerator selection for this component

FailureInfo

Used by ModelStatus.

FieldTypeDescription
location string

Name of component to which the failure relates (usually Pod name)

reason FailureReason

High level class of failure

message string

Detailed error message

modelRevisionName string

Internal Revision/ID of model, tied to specific Spec contents

time Time

Time failure occurred or was discovered

exitCode int32

Exit status from the last termination of the container

FailureReason

Used by FailureInfo.

FailureReason enum

Underlying type: string.

Allowed values: BaseModelNotReady, BaseModelNotFound, ModelLoadFailed, RuntimeUnhealthy, RuntimeDisabled, NoSupportingRuntime, RuntimeNotRecognized.

FallbackTemplate

Used by KedaPolicyTemplate.

FallbackTemplate renders a kedav1.Fallback with the replica count derived per consuming component instead of authored as a literal.

FieldTypeDescription
failureThreshold Required int32

FailureThreshold is the number of consecutive failed metric evaluations after which KEDA serves the fallback (it trips on the threshold+1-th consecutive failure).

Minimum: 1.

replicas Required ReplicaValueSource

Replicas is the fallback replica count.

FineTunedWeightSpec

Used by FineTunedWeight.

FineTunedWeightSpec defines the desired state of FineTunedWeight

FieldTypeDescription
baseModelRef Required ObjectReference

Reference to the base model that this weight is fine-tuned from

modelType Required string

ModelType of the fine-tuned weight, e.g., "Distillation", "Adapter", "Tfew"

hyperParameters Required RawExtension

HyperParameters used for fine-tuning, stored as generic JSON for flexibility

Embedded ModelExtensionSpec

ModelExtension is the common extension of the model

The fields of ModelExtensionSpec appear directly in this object.

configuration RawExtension

Configuration of the fine-tuned weight, stored as generic JSON for flexibility

storage Required StorageSpec

Storage configuration for the fine-tuned weight

trainingJobRef ObjectReference

TrainingJobRef references the training job that produced this weight

GroupBlueGreen

Used by RolloutGroup, RolloutPolicySpec.

GroupBlueGreen surges the full new set alongside the old, waits for Ready, then flips traffic atomically. It is also the default progression a group falls back to when none of canary/blueGreen/rollingUpdate is set. It carries no traffic steps (the flip is all-or-nothing); surge sequencing across Components is the group-level Order field, not a blue-green-specific knob. Empty; reserved for blue-green-specific options (e.g. a pre-flip verification window).

GroupCanary

Used by RolloutGroup, RolloutPolicySpec.

GroupCanary is the stepped progression: bring up new-revision capacity and shift service-level traffic through an ordered list of steps. How the canary advances is a PER-STEP property (see RolloutGroupStep): each step is metric-gated (analysis), timed, manual, or immediate. Prometheus here is the shared metrics SOURCE every analysis step queries — declared once, not on each step.

FieldTypeDescription
steps []RolloutGroupStep

Steps is the ordered progression of capacity + service-level traffic. The final step must reach 100% traffic for the rollout to complete.

Maximum items: 20.

prometheus AnalysisPrometheus

Prometheus is the metrics source (connection) shared by every analysis step in this canary: where to query and how to authenticate. When omitted (or when its serverAddress is empty), the operator-configured default source (canaryAnalysis.bundledPrometheusAddress) is used; if that is also unset the analysis has no source and its samples read inconclusive. It is only the source — WHAT to check is each step's analysis — and it gates nothing by itself.

scaleDownDelaySeconds int32

ScaleDownDelaySeconds is the wait between shifting traffic off the old revision and scaling its pods down, to drain in-flight requests.

readyTimeout Duration

ReadyTimeout bounds how long a step's capacity gate may stay unsatisfied before the canary is marked Failed (stable keeps serving — no traffic has shifted). Unset falls back to the operator-configured default (the rollout block of the operator's ConfigMap); the ome.io/rollout-ready-timeout annotation still overrides both.

GroupRollingUpdate

Used by RolloutGroup, RolloutPolicySpec.

GroupRollingUpdate replaces pods gradually, paced by the surge/unavailable budget. Mixed revisions are tolerated during the window.

FieldTypeDescription
maxSurge IntOrString

MaxSurge is the maximum pods (fraction or absolute) above desired during the roll. Default 25%.

maxUnavailable IntOrString

MaxUnavailable is the maximum pods (fraction or absolute) that may be not-Ready at once during the roll. Default 25% (matches the Kubernetes Deployment convention; a default of 0 would deadlock single-replica rolls).

HPAAutoscaler

Used by AutoscalerPolicySpec, ComponentAutoscaler.

HPAAutoscaler holds HorizontalPodAutoscaler configuration passed through verbatim. Alpha. The API may change without notice.

FieldTypeDescription
metrics []MetricSpec

Metrics are passed through verbatim to autoscalingv2.HorizontalPodAutoscalerSpec.Metrics. Supports Resource, ContainerResource, Pods, Object, and External metric sources. If empty, the controller defaults to a single CPU=80% Resource metric.

behavior HorizontalPodAutoscalerBehavior

Behavior controls scaling stabilization windows and per-direction policies.

HashCookie

Used by ConsistentHashSpec.

HashCookie names a cookie and an optional TTL for auto-issuance.

FieldTypeDescription
name Required string

Name is the cookie name.

Minimum length: 1.

ttlSeconds int64

TTLSeconds, when greater than zero, makes the gateway auto-issue the cookie if absent on the request. When zero or unset, the client is responsible for sending the cookie.

Minimum: 0.

HashHeader

Used by ConsistentHashSpec, EndpointOverrideSpec.

HashHeader names a single request header to include in the consistent-hash input.

FieldTypeDescription
name Required string

Name is the header name (case-insensitive per HTTP).

Minimum length: 1.

HashType

Used by ConsistentHashSpec.

HashType selects what request attribute is hashed for ConsistentHash load balancing.

Underlying type: string.

HuggingFaceSecretReference

Used by BenchmarkJobSpec.

HuggingFaceSecretReference defines a reference to a Kubernetes Secret containing the Hugging Face API key. This secret must reside in the same namespace as the BenchmarkJob. Cross-namespace references are not allowed for security and simplicity.

FieldTypeDescription
name Required string

Name of the secret containing the Hugging Face API key. The secret must reside in the same namespace as the BenchmarkJob.

InPlaceUpdateStrategy

Used by UpdateStrategy.

InPlaceUpdateStrategy tunes the per-pod in-place update sequence.

FieldTypeDescription
gracePeriodSeconds int32

GracePeriodSeconds is accepted so manifests that set it keep validating and has no effect on the roll: a drained pod is deleted as soon as it leaves rotation, and its own terminationGracePeriodSeconds and preStop hooks cover the in-flight work it still owes.

Minimum: 0.

markNotReadyDuringLifecycle bool

MarkNotReadyDuringLifecycle, when true, flips ome.io/serving=False on the pod before the in-place mutation so EndpointSlice drains traffic first. Unset inherits the ServingRuntime's value, then true.

InferenceReplicaPacing

Used by InferenceReplicaSpec.

InferenceReplicaPacing is the rollout control written onto one replica: the partition that holds Instances back, a reserved disruption budget, and the revision to roll back to.

FieldTypeDescription
partition int32

Partition holds back updates: the Partition lowest-indexed Instances not yet on the target revision, skipping any already updating to it, keep their current revision. When set it takes precedence over lifecycle.updateStrategy.rollingUpdate.partition; nil defers to it.

Minimum: 0.

maxUnavailable IntOrString

MaxUnavailable is reserved; setting it has no effect. Disruption during a rollout is paced by lifecycle.updateStrategy.rollingUpdate.maxUnavailable.

rollbackToRevision string

RollbackToRevision, when set, names a ControllerRevision the replica rolls every Instance back to: that revision's stored pod template becomes the update target while UpdateRevision keeps reporting the spec's own revision. The InferenceService controller sets it during a canary rollback; empty in steady state. If the named revision does not exist, the replica rolls to its spec. A revision this replica does not control is ignored and reported with a Warning event.

InferenceReplicaSpec

Used by InferenceReplica.

InferenceReplicaSpec is the desired state of one pod set. Its fields fall into three groups:

  • User fields describe the pod set itself: component, set at create and immutable; the template source (runners, modelRef and runtimeRef), replicas, minReadySeconds, topologyKey, topologySpread, topologySpreadKey, lifecycle, revisionHistoryLimit and autoscaler. The owner of the replica writes them: the InferenceService controller for a projected replica, the creating user for a standalone one. Exactly one template source: runners, or modelRef and/or runtimeRef; the validating webhook enforces it.
  • Rollout-control fields steer a rollout across pod sets: pacing, paused, pauseMode and pairingProtocol. The InferenceService controller writes them on the replicas it orchestrates; on a standalone replica its owner sets them.
  • Controller-only fields carry state only the InferenceService controller can know: parentRef, placementExecution and placementReplicaLimit.
FieldTypeDescription
placementExecution PlacementExecutionPolicy

PlacementExecution is allocation authority projected from a derived service. Its generation must be observed before the control plane uses member evidence. Controller-only.

placementReplicaLimit int32

PlacementReplicaLimit reserves the largest replica count this component may request while placement pauses growth. Only a raised placement floor can increase this limit; autoscaler requests remain in Replicas. Controller-only.

Minimum: 1.

parentRef ParentReference

ParentRef names the InferenceService that projects this replica. The InferenceService controller sets it at create time and it is immutable thereafter; a standalone replica omits it. Pod, Service and ControllerRevision names derive from the parent name when set and from the replica's own name otherwise. Controller-only.

component Required ComponentType

Component is the role this pod set fills: engine | decoder | router. Immutable; moving a workload between roles requires recreating the InferenceReplica.

modelRef ModelRef

ModelRef names the BaseModel (in the replica's namespace) or ClusterBaseModel this replica serves. With it set the controller renders the pods from the model and the runtime: the runtime named by RuntimeRef, or the runtime selected for the model when RuntimeRef is absent. Fine-tuned weights and overlays render as they do on an InferenceService. Exclusive with Runners. User field.

runtimeRef ServingRuntimeRef

RuntimeRef names the ServingRuntime (in the replica's namespace) or ClusterServingRuntime whose piece for Component this replica renders. The runtime must declare that piece. Without ModelRef the piece renders as-is, with no model mounted. The runtime's pod spec places the pods (node selector, affinity, resources); a second accelerator pool is a second runtime. A pin (autoSync=false, revision) is not honored: the live runtime renders, and the validating webhook rejects a pinned reference. Exclusive with Runners. User field.

replicas int32

Replicas is the desired Instance count; nil or 0 runs one Instance. Whatever targets the scale subresource (HPA, KEDA or an external scaler) writes this field. On a projected replica the InferenceService controller writes the component's minReplicas (at least 1) at create, and thereafter while no autoscaler owns the count or the stored count is nil or 0.

Minimum: 0.

minReadySeconds int32

MinReadySeconds is the minimum time a newly Ready pod must stay Ready before it counts as Available. The workload engine paces rollout drains and promotions on Available pods and counts only Available pods in availableReplicas; 0 means Available as soon as Ready. On a projected replica the InferenceService controller copies the component's effective lifecycle.minReadySeconds: the InferenceService's value, else the runtime's, else the operator's deploy default.

Minimum: 0.

topologyKey string

TopologyKey is the gang co-location node-label key for this Component. When set on a multi-node Component, the InferenceReplica controller auto-generates the per-Instance worker→leader podAffinity that co-locates every worker onto its gang's leader on a node sharing this label value. Nil means no auto-generated gang affinity. On a projected replica the value is the effective InferenceService or runtime component setting.

topologySpread TopologySpreadPolicy

TopologySpread is the spreading policy for this Component. The InferenceReplica controller renders it as a topologySpreadConstraint on each Instance's anchor pod; nil keeps pure bin-packing. On a projected replica the value is the effective InferenceService or runtime component setting.

Allowed values: Preferred, Required.

topologySpreadKey string

TopologySpreadKey is the fault-domain node-label key TopologySpread spreads across; nil defaults to TopologyKey. On a projected replica the value is the effective InferenceService or runtime component setting.

pairingProtocol string

PairingProtocol is the engine/decoder wire-compatibility token. It is folded into the revision hash (a change mints a new revision) and stamped as the ome.io/pairing-protocol label on rendered pods; nil pairs with anything. Only engine and decoder replicas pair on it; a change on any replica still mints a new revision. On a projected replica the InferenceService controller copies spec.rollout.pairingProtocol onto the engine and decoder replicas and never onto the router, which must not re-roll on a protocol change.

Maximum length: 63. Pattern: ^[A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?$.

runners []Runner

Runners is the fully-rendered set of pod templates per Instance. A single-pod Instance has one Runner named "default" with Size=1; a multi-node Instance has "leader" (Size=1) and "worker" (Size=N). Required unless ModelRef or RuntimeRef is set, in which case it must be absent: the controller renders the runners from the refs and never stores them. The controller treats each Runner.Template as opaque input. User field.

lifecycle LifecycleSpec

Lifecycle holds the OMENative lifecycle policies (RestartPolicy, UpdateStrategy, ReadyPolicy, InstanceReadyTimeout, MigrationPolicy). An unset policy takes the fixed fallback its LifecycleSpec field names; an unset or zero instanceReadyTimeout falls back to the operator's lifecycle.instanceReadyTimeout on every replica, and with neither set operations open with no deadline. The operator's deploy defaults are applied only to a projected replica, before the copy. lifecycle.minReadySeconds is not read on a replica and is rejected on a standalone one; set spec.minReadySeconds. On a projected replica this is the component's effective lifecycle: the InferenceService's value, else the runtime's, with unset fields filled from the operator's deploy defaults.

pacing InferenceReplicaPacing

Pacing is rollout control written onto this replica: the canary partition, the rollback target and a reserved disruption budget. The InferenceService controller writes it on the replicas it orchestrates; on a standalone replica its owner sets it. Nil means the replica rolls independently.

autoscaler ComponentAutoscaler

Autoscaler is the autoscaler configuration downstream scalers (HPA / KEDA / External) target. Only the InferenceService controller creates a scaler from it, so on a standalone replica the HPA and KEDA classes are rejected and an External scaler targets the scale subresource directly. On a projected replica the InferenceService controller writes the resolved per-Component autoscaler, replacing the whole block, whenever that autoscaler resolves; while an autoscaler policy fails to render, the stored block is kept as the last known good one.

paused bool

Paused, when true, stops the InferenceReplica controller from initiating fleet changes: Update, Create, and Migration operations are neither started nor advanced. The component's RestartPolicy keeps repairing existing Instances at their current revision unless PauseMode is Freeze. In-flight operations resume on unpause.

pauseMode PauseMode

PauseMode selects how much of the lifecycle Paused suspends. Only meaningful while Paused is true.

  • "Recover" (default when empty): fleet changes are suspended; the RestartPolicy continues to repair existing Instances at the revision they already run.
  • "Freeze": every lifecycle operation is suspended, including Instance repair. Only kubelet-level container restarts and deliberate replica reduction (scale-down) remain active. Status stays truthful in every depth: a Ready Instance whose pods are all gone (and whose RestartPolicy will not repair it) is demoted to Pending without running any recovery operation.

Allowed values: Recover, Freeze.

revisionHistoryLimit int32

RevisionHistoryLimit caps how many non-live ControllerRevisions the InferenceReplica controller retains. Live revisions (CurrentRevision / UpdateRevision and every per-Instance running/target revision) are never deleted regardless of the limit. Nil falls back to the operator-level lifecycle.revisionHistoryLimit config; when that is also absent, no revisions are pruned. On a projected replica the InferenceService controller copies the parent's ome.io/revision-history-limit annotation.

Minimum: 1.

InferenceReplicaStatus

Used by InferenceReplica.

InferenceReplicaStatus is the observed state of one InferenceReplica. The InferenceReplica controller is the sole writer. Fields mirror the LifecycleStatus shape so the ISVC's aggregated per-Component status is a verbatim projection of this block.

The per-Instance rows have exactly one representation on a committed object. Without instanceStatusEncoding the rows are the DenseV1 list in instanceStatuses; with instanceStatusEncoding: ColumnarV2 the same rows live in instanceStatusColumns and instanceStatuses is absent. The rules below reject every mixed spelling of that union.

Validation: instanceStatusColumns requires instanceStatusEncoding; an unmarked status carries only instanceStatuses.

Validation: instanceStatusEncoding: ColumnarV2 requires instanceStatusColumns and forbids instanceStatuses.

FieldTypeDescription
observedGeneration int64

ObservedGeneration is the InferenceReplica.metadata.generation the most recent status flush reflects.

placementObservedGeneration int64

PlacementObservedGeneration identifies the generation reconciled with placement rollout and replica-growth guards. The control plane requires this acknowledgement before sharing surge allowance with the member.

Minimum: 1.

replicas int32

Replicas is the total Instance count (any phase).

readyReplicas int32

ReadyReplicas is the number of Instances whose every pod is Ready.

servingReplicas int32

ServingReplicas is the number of Instances whose every pod is both ContainersReady AND has serving=True on the controller-managed readiness gate (i.e., actually in the load balancer rotation). MaxUnavailable budgets are computed against this count, not ReadyReplicas, so "missing from traffic" reflects reality during in-place updates.

availableReplicas int32

AvailableReplicas is the number of Instances whose desired pod count is Available: in rotation on the Component's headless Service and, when spec.minReadySeconds is set, Ready for at least that long.

updatedReplicas int32

UpdatedReplicas is the number of Instances on UpdateRevision.

updatedReadyReplicas int32

UpdatedReadyReplicas is the number of Instances on UpdateRevision that are fully Ready. UpdatedReadyReplicas / Replicas drives MaxUnavailable rollout pacing.

currentRevision string

CurrentRevision names the ControllerRevision currently serving traffic. Set by the InferenceReplica controller.

updateRevision string

UpdateRevision names the ControllerRevision being rolled out.

collisionCount int32

CollisionCount is the salt folded into ControllerRevision hash input after a name collision is observed, so retries produce a different revision name. Same pattern as StatefulSet.

labelSelector string

LabelSelector identifies pods of this InferenceReplica for the HPA scale subresource. Uses the same selector formula as the Component's pod labels, so HPAs targeting either the ISVC or the InferenceReplica resolve to the same pod set.

instanceStatuses []OMENativeInstanceStatus

InstanceStatuses is the DenseV1 representation of the per-Instance status, one row per Instance. Absent when instanceStatusEncoding is ColumnarV2, in which case instanceStatusColumns carries the same rows.

instanceStatusEncoding InstanceStatusEncoding

InstanceStatusEncoding names the representation that carries the per-Instance rows. Absent means DenseV1 (instanceStatuses). The only accepted value is ColumnarV2, which requires instanceStatusColumns and forbids instanceStatuses.

instanceStatusColumns InstanceStatusColumns

InstanceStatusColumns is the ColumnarV2 representation of the per-Instance rows. Present exactly when instanceStatusEncoding is ColumnarV2; it decodes to the same rows, in the same order, that instanceStatuses would carry.

retryBlocks []RetryBlock

RetryBlocks records per-target-revision retry authority for update attempts. Revision-scoped: one block per failed target revision, shared by every Instance attempting it — allocating a new Instance cannot evade the block.

migrations []MigrationStatus

Migrations is the authoritative set of migration records for this InferenceReplica — one entry per request UUID. Manual entries are resumable processes born Accepted; Auto entries are born-terminal Relocated records. Executors select on non-terminal phase only — terminal entries are records, never work. Non-terminal entries are never trimmed; terminal entries are pruned once older than the migration-capacity rate window, so the list stays bounded. Full history remains in the audit ledger and events.

conditions []Condition

Conditions reports InferenceReplica-level conditions. Defined types include Available, Progressing, FailedScale, FailedUpdate, GangSchedulingUnavailable, OperationStuck.

traffic []ComponentTrafficTarget

Traffic reports per-revision traffic weights for this InferenceReplica. Each entry corresponds to one revision currently receiving traffic. The ISVC controller mirrors this onto ISVC.status.components[c].traffic[] for the HTTPRoute builder.

coordinationGroupRef string

CoordinationGroupRef back-references the RolloutCoordinationGroup this replica is currently bound into (if any). Lets operators find the owning coord group from the child without parsing the ISVC spec.

rolloutHold RolloutHold

RolloutHold records the most recent reason a per-Instance Update was denied for this Component — cross-Component coordination (Ratio, Sequential), a surge/unavailability budget, or a same-target retry hold (RetryBlock, Held). Nil while the Component is progressing or has no rollout in flight. See RolloutHold for the field semantics.

InferenceServiceReference

Used by EndpointSpec.

InferenceServiceReference defines the reference to a Kubernetes inference service.

FieldTypeDescription
name Required string

Name specifies the name of the inference service to benchmark.

namespace Required string

Namespace specifies the Kubernetes namespace where the inference service is deployed. Cross-namespace references are allowed but require appropriate RBAC permissions.

InferenceServiceSpec

Used by InferenceService.

InferenceServiceSpec is the desired state of an InferenceService.

Validation: the placement policy cannot be removed; drain and recreate the service to change placement ownership.

Validation: componentAffinity needs an entry for each declared engine and decoder, and none for undeclared ones.

Validation: componentAffinity.router requires a declared router.

FieldTypeDescription
deploymentMode DeploymentModeType

Since v1.3. DeploymentMode selects the dispatch backend that drives every Component on this InferenceService. When set, it propagates to the Engine, Decoder, and Router resolver at read-time without mutating per-Component annotations — kubectl get -o yaml stays clean. A per-Component ome.io/deploymentMode annotation still wins as an explicit override (the escape hatch is preserved for backward compat and mixed-mode experiments).

Valid values:

  • "OMENative" — Native lifecycle-managed pods (also handles multi-node serving when Leader/Worker are present)
  • "RawDeployment" — Kubernetes Deployment/HPA-backed dispatch

MultiNode (LeaderWorkerSet-backed multi-node serving) is selected via the ome.io/deploymentMode annotation or the operator-level default, never via this field. PDDisaggregated is a shape descriptor derived from engine+decoder pairing, and VirtualDeployment is legacy; neither is accepted here.

Allowed values: OMENative, RawDeployment.

engine EngineSpec

Engine defines the serving engine spec. This provides detailed container and pod specifications for model serving. It allows defining the model runner (container spec), as well as complete pod specifications including init containers, sidecar containers, and other pod-level configurations. Engine can also be configured for multi-node deployments using leader and worker specifications.

decoder DecoderSpec

Decoder defines the decoder spec. This is specifically used for PD (Prefill-Decode) disaggregated serving deployments. Similar to Engine in structure, it allows for container and pod specifications, but is only utilized when implementing the disaggregated serving pattern to separate the prefill and decode phases of inference.

model ModelRef

Model defines the model to be used for inference, referencing either a BaseModel or a custom model. This allows models to be managed independently of the serving configuration.

runtime ServingRuntimeRef

Runtime defines the serving runtime environment that will be used to execute the model. It is an inference service spec template that determines how the service should be deployed. Runtime is optional - if not defined, the operator will automatically select the best runtime based on the model's size, architecture, format, quantization, and framework.

router RouterSpec

Router defines the router spec

replicaRefs ReplicaRefs

ReplicaRefs names, per role, the standalone InferenceReplicas this service fronts instead of rendering the role itself. The service creates the role's stable Service (<name>-engine, -decoder, -router) and the route in front of their pods and writes nothing on the replicas: their specs, rollouts and scaling stay with their owner. A service references either all of its roles this way or none, so spec.engine, spec.decoder and spec.router are unset with it, as are spec.model and spec.runtime (the replicas carry their own); engine is required. Fixed at create. A replica that needs a peer's address (an engine its decoder, a router its engine and decoder) is configured by its owner with the stable Service names, which exist once the service does.

acceleratorSelector AcceleratorSelector

AcceleratorSelector specifies accelerator selection preferences

traffic TrafficSpec

Since v1.3. Traffic configures the load-balancing policy applied to all HTTPRoutes OME emits for this InferenceService. See the TrafficSpec doc for details.

rollout RolloutSpec

Since v1.3. Rollout is the single home for rollout configuration on this InferenceService: an ordered list of rollout groups, each polymorphic in its progression (canary | blueGreen | rollingUpdate). Sequencing is the group list order; a group's Components roll together.

scalingPolicy ScalingPolicy

Since v1.3. ScalingPolicy coordinates replica counts across Components when more than one autoscaler would otherwise drift (e.g., engine + decoder in a PD-disaggregated service that requires 1:1 sharding). When nil, every Component autoscales independently. Alpha. The API may change without notice.

placement PlacementSpec

Since v1.3. Placement declares how the multi-cluster control plane selects workload clusters and allocates replicas. An absent block declares no placement intent. Derived member services carry allocation authority in metadata.

routing RoutingSpec

Since v1.3. Routing configures cross-cluster traffic distribution for this InferenceService. Unset fields inherit the operator-level routing configuration. Only consulted on the control-plane cluster; ignored in single-cluster deployments. Alpha; the API may change without notice.

ttlSecondsAfterCreation int64

Since v1.3. TTLSecondsAfterCreation limits how long this InferenceService lives. Once that many seconds have passed since its creationTimestamp, the controller deletes it, and garbage collection removes everything it owns. Unset means it lives until deleted. The deadline is computed from creationTimestamp on every reconcile, so changing or clearing the field moves or cancels it. Placement member copies ignore it; the source InferenceService's TTL governs them.

Minimum: 1.

InferenceServiceStatus

Used by InferenceService.

InferenceServiceStatus defines the observed state of InferenceService

FieldTypeDescription
Embedded Status

Conditions for the InferenceService:

  • EngineReady: engine readiness condition.
  • DecoderReady: decoder readiness condition.
  • RouterReady: router readiness condition.
  • IngressReady: ingress resource readiness.
  • Ready: component aggregate on workload clusters, or placement serving readiness on a multi-cluster control-plane source.

The fields of Status appear directly in this object.

address Addressable

Addressable endpoint for the InferenceService

url URL

URL holds the url that will distribute traffic over the provided traffic targets. It generally has the form http[s]://{route-name}.{route-namespace}.{cluster-level-suffix}

addresses []Addressable

Since v1.3. Addresses lists every reachable endpoint for this service — one per gateway its route attaches to, plus the cluster-local address. Each entry's Name carries the operator-declared class (see IngressGatewaySpec.Class): "internal", "external", "cluster-local", or any config-defined value. Derived from the same builder that produces the HTTPRoutes, so it never drifts from the actual routing. status.url is the primary gateway entry and status.address is the "cluster-local" entry — both projections of this list.

components map[ComponentType]ComponentStatusSpec

Statuses for the components of the InferenceService

modelStatus ModelStatus

Model related statuses

migrationHistory []MigrationHistoryEntry

Since v1.3. MigrationHistory is a rolling window of OMENative migration requests processed against this InferenceService. Bounded to the most recent entries; older entries are dropped (and optionally archived to a controller-owned ConfigMap).

mountedOverlays []MountedOverlay

Since v1.3. MountedOverlays lists overlays the controller attached to the pod spec. Skipped overlays (disabled, NotReady, NotFound) surface via the OverlaysReady condition.

traffic TrafficStatus

Since v1.3. Traffic reflects the resolved backend traffic policy and the emitted policy resource. Populated only when traffic intent is declared via spec.traffic or any ome.io/* traffic annotation; otherwise nil so older clients see nothing.

canary CanaryStatus

Since v1.3. Canary mirrors the canary run of the unit that owns the ISVC entrypoint (the router's when it has one, else the engine's); the per-unit copy on ComponentStatusSpec.Canary is authoritative. Absent until a canary first arms; afterwards it carries that unit's most recent run, a finished one included (see CanaryStatus).

placement PlacementStatus

Since v1.3. Placement reports multi-cluster placement of this ISVC, set by the control-plane fan-out controller. Empty on workload clusters and on single-cluster deployments.

pinnedRevisionName string

PinnedRevisionName is the ControllerRevision (OME ns) driving pod specs. Empty when autoSync is true.

lastRuntimeSyncToken string

LastRuntimeSyncToken is the ome.io/runtime-sync annotation value at last pin advance; the controller advances the pin when the live annotation differs from this.

rollout RolloutStatus

Since v1.3. Rollout is the run-model surface: the pinned active-run plan the executors consume, the previous run's bounded record, and the always-current per-group source resolution (including shadowed-policy previews).

rolloutCoordination RolloutCoordinationStatus

Since v1.3. RolloutCoordination reports per-group cross-Component coordination state for the InferenceService. Populated only when spec.rollout declares blueGreen/rollingUpdate groups (canary groups report under status.canary instead).

InstanceOperation

Used by InstanceStatusEntry, OMENativeInstanceStatus.

InstanceOperation is the recovery anchor written before any destructive action against an Instance and cleared on completion.

FieldTypeDescription
id string

ID is the idempotency key for this operation. Retries with the same ID are a no-op.

type InstanceOperationType

Type identifies the operation kind: Create, Update, Restart, Migrate, Delete.

Allowed values: Create, Update, Restart, Migrate, Delete.

step string

Step is the fine-grained resume point within the operation (e.g., Drain, DeletePods, WaitZero, Recreate, WaitReady).

startedAt Time

StartedAt is when this operation began.

lastProgressAt Time

LastProgressAt is when the operation last advanced. Used for stall detection.

deadline Time

Deadline is the hard timeout for the current Step. Zero (null) means the step clock is parked (e.g. while the instance's pods are admission-gated); optional + nullable so the parked null is accepted by the apiserver.

retryCount int32

RetryCount is the per-step escalation counter.

targetRevision string

TargetRevision is the ControllerRevision the operation is converging toward.

reason string

Reason is a short cause string for the operation. Set once, when the operation starts, by whichever state machine owns it (the restart trigger, the revision-roll cause): it names WHY the operation exists and must survive for the operation's lifetime.

waiting string

Waiting is a short token naming an EXTERNAL condition currently holding the operation back — e.g. "QuotaExceeded" when admission refuses the operation's pods for lack of quota. Distinct from Reason, which names why the operation exists: Waiting comes and goes while the operation runs, so overloading Reason would erase the operation's cause. Empty means nothing external is blocking. A token only: the blocking authority's own message is volatile (an exceeded-quota message moves as other workloads come and go) and belongs in the Event, not in status.

capacityRefusedAt Time

CapacityRefusedAt is when admission last refused one of the operation's pod creates for lack of quota. The refusal is an apiserver answer to a call the create pass made, so it cannot be read off the cluster on a later pass: it is recorded here, and the hold pass converts it into the Waiting token and the deadline park on every pass it stands. Cleared by a create that completes with no refusal. Empty means the last create was not refused for capacity.

strategy string

Strategy is the update strategy the operation runs under, pinned when the operation opens. UpdateStrategy is not part of the revision payload, so editing it retargets nothing: an attempt keeps the mechanism it started with — a patch already under way is not re-dispatched as a recreate, a surge already spent is not unwound — and the edit reaches the Instance at its next admitted attempt. Set only when Type=Update.

surgeIndex int32

SurgeIndex is the Instance index allocated for a surge replacement. Set only when Type=Migrate.

fromNode string

FromNode is the node the migrating Instance is being moved off. Set only when Type=Migrate.

hintTargetNodes []string

HintTargetNodes is the caller-supplied preferred-node list for a migration. Set only when Type=Migrate.

requestUUID string

RequestUUID is the migration request UUID. Set only when Type=Migrate.

InstanceOperationType

Used by InstanceOperation.

InstanceOperationType is the kind of destructive action recorded in InstanceOperation.

Underlying type: string.

InstanceReadyPolicy

Used by LifecycleSpec.

InstanceReadyPolicy controls how Instance-level readiness is aggregated from the underlying pods.

Underlying type: string.

Allowed values: AllPodReady, None.

InstanceRestartPolicy

Used by LifecycleSpec.

InstanceRestartPolicy controls what OMENative does when a managed pod fails. Applies only when the Component is annotated ome.io/deploymentMode=OMENative.

Underlying type: string.

Allowed values: None, RecreateInstanceOnPodRestart.

InstanceStatusColumns

Used by InferenceReplicaStatus.

InstanceStatusColumns is the ColumnarV2 representation of the per-Instance rows. A value shared by many Instances is stored once against the index set of the Instances that carry it; records that are rare or unique per Instance stay keyed by index in entries.

An index set is a string of comma-separated decimal terms, each a single index or a closed "first-last" range, for example "0-8,10-114,116". The canonical form is the only accepted one: terms are strictly ascending, disjoint, and nonadjacent (adjacent terms are merged), a range has first < last, indices are nonnegative int32 values without leading zeros, and there is no whitespace, sign, empty term, or trailing comma.

Members is the complete row set; every other index set is a subset of it. Within one column the group index sets are pairwise disjoint and the groups are in canonical value order: bytewise for phases and revisions, signed numeric for incarnations and counts. A member absent from every group of an optional column takes that column's documented default.

FieldTypeDescription
members string

Members is the index set of every Instance that has a row.

Minimum length: 1. Pattern: ^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$.

rowOrder []int32

RowOrder is the dense row order when it is not the ascending Members order: every member exactly once, in the order the DenseV1 list would carry. Absent means ascending Members order.

Minimum items: 1. Minimum per item: 0.

phases []InstanceStatusPhaseGroup

Phases groups Instances by lifecycle phase. Every member appears in exactly one group; there is no default phase.

Minimum items: 1.

runningRevisions []InstanceStatusRevisionGroup

RunningRevisions groups Instances by nonempty running revision. A member absent from every group has an empty running revision.

Minimum items: 1.

targetRevisions []InstanceStatusRevisionGroup

TargetRevisions groups Instances by nonempty target revision. A member absent from every group has an empty target revision.

Minimum items: 1.

incarnations []InstanceStatusIncarnationGroup

Incarnations groups Instances by nonzero incarnation. A member absent from every group has incarnation 0.

Minimum items: 1.

podCounts []InstanceStatusCountGroup

PodCounts groups Instances by positive podCount. A member absent from every group has podCount 0.

Minimum items: 1.

servingPodCounts []InstanceStatusCountGroup

ServingPodCounts groups Instances by positive servingPodCount. A member absent from every group has servingPodCount 0.

Minimum items: 1.

availablePodCounts []InstanceStatusCountGroup

AvailablePodCounts groups Instances by positive availablePodCount. A member absent from every group has availablePodCount 0.

Minimum items: 1.

admitted string

Admitted is the index set of Instances whose admitted is true. Absent means no Instance is admitted.

Minimum length: 1. Pattern: ^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$.

activeOrdinalOne string

ActiveOrdinalOne is the index set of Instances whose activeOrdinal is 1. Absent means every activeOrdinal is 0.

Minimum length: 1. Pattern: ^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$.

entries []InstanceStatusEntry

Entries carries the per-Instance records that are not grouped: conditions, readySince, operation, and lastFailure. At most one entry per member, in ascending index order, each carrying at least one of those records. A member without an entry has none of them.

Minimum items: 1.

InstanceStatusCountGroup

Used by InstanceStatusColumns.

InstanceStatusCountGroup is one positive pod count and the Instances that carry it. Zero is the absent default and is never grouped.

FieldTypeDescription
value int32

Value is the shared positive count.

Minimum: 1.

indexes string

Indexes is the canonical index set of the Instances with this value.

Minimum length: 1. Pattern: ^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$.

InstanceStatusEncoding

Used by InferenceReplicaStatus.

InstanceStatusEncoding names a stored representation of the per-Instance rows. The wire carries only ColumnarV2; an absent marker means DenseV1.

Underlying type: string.

Allowed values: ColumnarV2.

InstanceStatusEntry

Used by InstanceStatusColumns.

InstanceStatusEntry carries the records of one Instance that are not grouped into columns. Each record is the dense row's value, unchanged.

Validation: an entry must carry at least one of conditions, readySince, operation, lastFailure, or announced.

FieldTypeDescription
index int32

Index is the Instance this entry belongs to; it is a member.

Minimum: 0.

conditions []Condition

Conditions is the Instance's conditions.

Minimum items: 1.

readySince Time

ReadySince is the Instance's readySince.

operation InstanceOperation

Operation is the Instance's in-flight operation record.

lastFailure InstanceTermination

LastFailure is the Instance's preserved failure diagnostics.

announced []string

Announced is the Instance's record of once-only messages already delivered.

Minimum items: 1.

InstanceStatusIncarnationGroup

Used by InstanceStatusColumns.

InstanceStatusIncarnationGroup is one incarnation and the Instances that carry it. The value keeps the int64 domain of the dense row, including negative values; zero is the absent default and is never grouped.

Validation: an incarnation group value must be nonzero; zero is the absent default.

FieldTypeDescription
value int64

Value is the shared nonzero incarnation.

indexes string

Indexes is the canonical index set of the Instances with this value.

Minimum length: 1. Pattern: ^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$.

InstanceStatusPhaseGroup

Used by InstanceStatusColumns.

InstanceStatusPhaseGroup is one phase and the Instances that carry it.

FieldTypeDescription
value OMENativeInstancePhase

Value is the shared lifecycle phase.

indexes string

Indexes is the canonical index set of the Instances with this value.

Minimum length: 1. Pattern: ^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$.

InstanceStatusRevisionGroup

Used by InstanceStatusColumns.

InstanceStatusRevisionGroup is one full ControllerRevision name and the Instances that carry it.

FieldTypeDescription
value string

Value is the shared revision name; the empty revision is never grouped.

Minimum length: 1.

indexes string

Indexes is the canonical index set of the Instances with this value.

Minimum length: 1. Pattern: ^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$.

InstanceTermination

Used by InstanceStatusEntry, OMENativeInstanceStatus.

InstanceTermination captures the container-termination diagnostics of a pod that failed or was escalated, preserved on OMENativeInstanceStatus so the trace survives the recreate that deletes the pod.

FieldTypeDescription
podName string

PodName is the name of the pod that failed or was escalated.

containerName string

ContainerName is the container the diagnostics were read from. Empty when the signal is pod-level (e.g. a pod-phase Failed with no per-container terminated state available).

reason string

Reason is the kubelet reason for the termination or wedge — a terminated-state reason (OOMKilled, Error, ContainerCannotRun) or a terminal waiting-state reason (CrashLoopBackOff, ImagePullBackOff, CreateContainerError). Falls back to "PodFailed" when only the pod phase is available.

exitCode int32

ExitCode is the container's exit code when the diagnostics came from a terminated state. Nil when the pod was stuck in a waiting state (no process ever ran to produce an exit code).

message string

Message is the kubelet-supplied detail message, if any.

time Time

Time is when OMENative recorded this termination (reconcile time, not the kubelet transition time, which isn't always exposed).

KedaAutoscaler

Used by ComponentAutoscaler.

KedaAutoscaler holds KEDA ScaledObject configuration passed through verbatim. Alpha. The API may change without notice.

FieldTypeDescription
triggers Required []ScaleTriggers

Triggers are passed through verbatim to kedav1.ScaledObjectSpec.Triggers. The full KEDA trigger surface (prometheus, cron, external, kafka, ...) is supported.

Minimum items: 1.

advanced AdvancedConfig

Advanced ScaledObject configuration — horizontalPodAutoscalerConfig, restoreToOriginalReplicaCount.

pollingInterval int32

PollingInterval is the interval, in seconds, at which KEDA checks each trigger. Defaults to the KEDA-side default when unset.

cooldownPeriod int32

CooldownPeriod is the time, in seconds, KEDA waits before scaling down after the last trigger fires. Defaults to the KEDA-side default when unset.

idleReplicaCount int32

IdleReplicaCount enables scaling to a fixed count when no triggers fire (commonly 0 for scale-to-zero). Must be strictly less than the effective MinReplicaCount.

fallback Fallback

Fallback policy applied when the metric source becomes unavailable.

KedaPolicyTemplate

Used by AutoscalerPolicySpec.

KedaPolicyTemplate is the parameterized counterpart of KedaAutoscaler. Everything except trigger metadata templates and the typed fallback replicas is passed through verbatim to the rendered block.

FieldTypeDescription
triggers Required []KedaTriggerTemplate

Minimum items: 1.

advanced AdvancedConfig

Advanced ScaledObject configuration, verbatim.

pollingInterval int32
cooldownPeriod int32
idleReplicaCount int32
fallback FallbackTemplate

KedaTriggerTemplate

Used by KedaPolicyTemplate.

KedaTriggerTemplate is a parameterized KEDA trigger. Metadata string values may contain {{ .Var }} templates over a closed, controller-derived variable set (Namespace, ISVCName, Component, MinReplicas, MaxReplicas, TargetName).

FieldTypeDescription
type Required string

Type is the KEDA trigger type ("prometheus" in v1). Admission requires ProviderRef for network-endpoint trigger types.

Minimum length: 1.

providerRef MetricProviderRef

ProviderRef binds the trigger's endpoint by logical provider name.

metricType MetricTargetType

MetricType is forwarded to the rendered trigger.

Allowed values: AverageValue, Value.

queryReturnsDesiredReplicas bool

QueryReturnsDesiredReplicas declares that the trigger's query already computes the desired replica count. When true, admission requires MetricType=AverageValue: the HPA's Value math is ceil((metric/threshold) x readyPods), which breaks desired-count queries.

metadata Required map[string]string

Metadata is the KEDA trigger metadata. Admission rejects the keys "serverAddress" and "authModes" (the provider binding owns them), and requires "ignoreNullValues" to be explicit on prometheus triggers.

KubeConfigSource

Used by ClusterConnectionSource.

KubeConfigSource points at a Secret holding a kubeconfig for the cluster.

FieldTypeDescription
secretRef Required SecretReference

SecretRef is the Secret holding the kubeconfig.

key string

Key is the Secret data key holding the kubeconfig. Defaults to "kubeconfig".

Default: kubeconfig.

LeaderSpec

Used by DecoderSpec, EngineSpec.

LeaderSpec defines the configuration for a leader node in a multi-node component. The leader node coordinates the activities of worker nodes in distributed inference or token generation setups, handling task distribution and result aggregation.

FieldTypeDescription
Embedded PodSpec

Pod specification for the leader node. This overrides the main PodSpec when specified. Allows customization of the Kubernetes Pod configuration specifically for the leader node.

The fields of PodSpec appear directly in this object.

runner RunnerSpec

Runner container override for customizing the main container. This is essentially a container spec that can override the default container. Provides fine-grained control over the container that executes the leader node's coordination logic.

LifeCycleState

Used by ModelStatusSpec.

LifeCycleState enum

Underlying type: string.

Allowed values: Creating, Importing, In_Transit, In_Training, Ready, Failed.

LifecycleSpec

Used by ComponentExtensionSpec, InferenceReplicaSpec.

LifecycleSpec groups OMENative-specific lifecycle policies on a Component. Embedded via ComponentExtensionSpec.Lifecycle; all fields are no-ops unless the Component is annotated ome.io/deploymentMode=OMENative. Nested under lifecycle: so the fields don't collide with corev1.PodSpec fields (notably restartPolicy) that are also inlined into EngineSpec / DecoderSpec / RouterSpec.

FieldTypeDescription
restartPolicy InstanceRestartPolicy

RestartPolicy controls what OMENative does when a managed pod fails. Distinct from the inlined corev1.PodSpec.RestartPolicy: that one tells kubelet whether to restart a container in-place; this one tells the OMENative controller whether to recreate the whole Instance. Unset inherits the ServingRuntime's value; when neither sets it, multi-pod Instances use RecreateInstanceOnPodRestart and single-pod Instances use None.

updateStrategy UpdateStrategy

UpdateStrategy controls how OMENative rolls template changes across the Component's Instances.

readyPolicy InstanceReadyPolicy

ReadyPolicy controls how Instance-level readiness is aggregated from the underlying pods. None is accepted only for single-pod Instances, where it is equivalent to AllPodReady; admission rejects None on multi-pod OMENative Components because per-pod readiness reporting is not supported. Unset inherits the ServingRuntime's value; when neither sets it, multi-pod Instances use AllPodReady and single-pod Instances use None.

instanceReadyTimeout Duration

InstanceReadyTimeout is OMENative's upper bound for waiting on a newly-created Instance to become Ready (during migration, rollout, or initial creation).

minReadySeconds int32

MinReadySeconds is the minimum time a newly Ready pod must stay Ready before OMENative treats it as Available. A pod is Available when its PodReady condition is True and that condition's lastTransitionTime plus MinReadySeconds is not after the current time, evaluated per pod (the Deployment.spec.minReadySeconds rule). Ready remains the health signal; Available is the pacing signal: a rollout drains or promotes an Instance only once its new pods are Available, so the maxSurge / maxUnavailable budgets stay held for the whole window, and availableReplicas / availablePodCount count only Available pods. Unset or 0 means Available as soon as Ready. A value authored on the InferenceService wins; an unset value inherits the ServingRuntime's; when neither sets it, the cluster default from the inferenceservice-config ConfigMap applies.

Minimum: 0.

migrationPolicy MigrationPolicy

MigrationPolicy controls whether and how OMENative honors a migration request annotation for this Component.

LifecycleStatus

Used by ComponentStatusSpec.

LifecycleStatus reports OMENative-managed lifecycle state for one Component. Nil when the Component does not use OMENative. Counterpart of the LifecycleSpec sub-block on ComponentExtensionSpec.

FieldTypeDescription
observedGeneration int64

ObservedGeneration is the InferenceService.metadata.generation reflected by this block.

currentRevision string

CurrentRevision names the ControllerRevision currently serving traffic.

updateRevision string

UpdateRevision names the ControllerRevision being rolled out.

collisionCount int32

CollisionCount is the salt folded into ControllerRevision hash input after a name collision is observed, so retries produce a different revision name. Same pattern as StatefulSet.

labelSelector string

LabelSelector identifies pods of this Component for HPA-style consumers.

replicas int32

Replicas is the total Instance count (any phase).

readyReplicas int32

ReadyReplicas is the number of Instances whose every pod is Ready.

servingReplicas int32

ServingReplicas is the number of Instances whose every pod is BOTH ContainersReady AND has serving=True on the controller-managed readiness gate — i.e., the pod is actually in the load balancer's rotation. This is the count operators care about for traffic availability, and the count MaxUnavailable budgets gate against.

Diverges from ReadyReplicas during in-place updates and any other scenario where the controller flips the serving gate to False while containers remain technically Ready.

availableReplicas int32

AvailableReplicas is the number of Instances whose desired pod count is Available: in rotation on the Component's headless Service and, when lifecycle.minReadySeconds is set, Ready for at least that long.

updatedReplicas int32

UpdatedReplicas is the number of Instances on UpdateRevision.

updatedReadyReplicas int32

UpdatedReadyReplicas is the number of Instances on UpdateRevision and fully Ready. UpdatedReadyReplicas / Replicas drives maxUnavailable rollout pacing.

conditions []Condition

Conditions reports Component-level conditions. Defined types include Available, Progressing, FailedScale, FailedUpdate, GangSchedulingUnavailable, OperationStuck.

rolloutHold RolloutHold

RolloutHold reports the most recent reason this Component's rollout did not advance, mirrored verbatim from the owning InferenceReplica's status. Nil while the Component is progressing or has no rollout in flight.

LoadBalancingType

Used by TrafficSpec.

LoadBalancingType selects the load-balancing algorithm applied to a Component's backend Service(s).

Underlying type: string.

MaintainRatio

Used by RolloutGroup.

MaintainRatio bounds how far a multi-Component group may drift from the cross-Component replica ratio observed at rollout start (e.g. prefill:decode).

FieldTypeDescription
tolerance int32

Tolerance is the maximum percentage drift from the starting ratio. A roll step that would exceed it is paused until the pools rebalance. An explicit 0 means zero drift. When omitted, the operator-configured default (the coordination block of the operator's ConfigMap) applies; if the operator configures no default either, the group rolls with no drift bound.

Minimum: 0. Maximum: 100.

MetricProviderRef

Used by AnalysisPrometheus, KedaTriggerTemplate.

MetricProviderRef names a logical metric provider. The name is bound to a cluster-local endpoint (and optional credentials) by the operator's autoscalerPolicy configuration block; endpoints are not representable in the policy itself, so one policy object serves every cluster and a policy author can never point a scaler at an arbitrary endpoint.

FieldTypeDescription
name Required string

Minimum length: 1.

MigrationEvent

Used by MigrationHistoryEntry.

MigrationEvent is one observation logged during a migration.

FieldTypeDescription
at Time

At is the time the event was recorded.

message string

Message describes the observation.

MigrationHistoryEntry

Used by InferenceServiceStatus.

MigrationHistoryEntry is one entry of the rolling MigrationHistory window recorded on InferenceServiceStatus.

FieldTypeDescription
id string

ID is the request UUID supplied by the caller.

component ComponentType

Component identifies which Component was migrated.

instance int32

Instance is the original Instance index that was migrated away from.

replacementInstance int32

ReplacementInstance is the Instance index allocated for the surge replacement. Nil when the migration was rejected before allocation. Distinct from index 0, which is a valid replacement index after sparse migration.

mode MigrationMode

Mode is the migration mechanism. Surge is the only defined mode.

phase MigrationPhase

Phase is the current lifecycle phase.

requestedAt Time

RequestedAt is the time the request annotation was first observed.

startedAt Time

StartedAt is the time the controller began executing the migration.

completedAt Time

CompletedAt is the time the migration reached a terminal phase.

reason string

Reason is the caller-supplied reason (e.g., "fragmentation").

requestedBy string

RequestedBy identifies the caller that wrote the request annotation.

events []MigrationEvent

Events records observations made during the migration.

outcomeReason string

OutcomeReason is a short machine-readable reason describing why the migration ended in its terminal phase (e.g., "InstanceReadyTimeout").

MigrationMode

Used by MigrationHistoryEntry.

MigrationMode is the migration mechanism selected.

Underlying type: string.

Allowed values: Surge.

MigrationPhase

Used by MigrationHistoryEntry, MigrationStatus.

MigrationPhase is the lifecycle phase of a migration.

Manual migrations walk Accepted -> SurgePending -> SurgeReady -> Draining -> Completed | Failed. Auto relocations are born terminal (Relocated). Terminal phases are Completed, Failed, and Relocated — executors select work on non-terminal phase only; terminal entries are records, never work.

Pending and InProgress are legacy values used only by the ISVC status migrationHistory window.

Underlying type: string.

Allowed values: Accepted, SurgePending, SurgeReady, Draining, Completed, Failed, Relocated, Pending, InProgress.

MigrationPolicy

Used by LifecycleSpec.

MigrationPolicy controls whether and how OMENative honors migration requests (both automatic deadline-disposition relocation and explicit annotation-triggered migration).

FieldTypeDescription
mode MigrationPolicyMode

Mode gates migration: Auto enables both deadline-disposition relocation and explicit migration requests; Never disables both. Unset inherits the ServingRuntime's value, then Auto.

MigrationPolicyMode

Used by MigrationPolicy.

MigrationPolicyMode gates migration mechanisms for a Component.

Underlying type: string.

Allowed values: Auto, Surge, Never.

MigrationStatus

Used by InferenceReplicaStatus.

MigrationStatus is one migration request's authoritative record on the InferenceReplica. status.migrations is the single source of truth for migration work: executors resume from non-terminal entries; the audit ledger and events are history, not work.

Lifecycle contract:

  • Manual entries (Trigger=Manual) are resumable processes: born Accepted, they walk Accepted -> SurgePending -> SurgeReady -> Draining -> Completed | Failed.
  • Auto entries (Trigger=Auto) are born-terminal Relocated records mirroring a relocation directive; Succeeded is stamped post-hoc when the relocated Instance next reaches Ready.
  • Executors select on non-terminal phase only — terminal entries are records, never work.
FieldTypeDescription
requestUUID string

RequestUUID uniquely identifies the migration request. Manual: supplied by the requester. Auto: generated by the controller.

trigger MigrationTrigger

Trigger records who initiated the migration.

sourceInstance int32

SourceInstance is the Instance index being migrated away from.

surgeInstance int32

SurgeInstance is the Instance index allocated for the surge replacement. Manual only; nil until allocated. Distinct from index 0, which is a valid surge index.

allocatedAt Time

AllocatedAt is when the surge Instance index was allocated — the start of execution. Nil while the entry is queued (Accepted but not yet picked up by the executor). The capacity gate counts execution from this stamp, never queued intent.

fromNode string

FromNode is the node the source is being moved off. Auto: the excluded node.

hintTargetNodes []string

HintTargetNodes are requester-supplied preferred placement targets for the surge replacement. Rendered as preferred (soft) node affinity; the scheduler may pick other nodes.

phase MigrationPhase

Phase is the migration lifecycle phase. See MigrationPhase for the Manual chain, the Auto born-terminal rule, and the terminal set.

attempt int32

Attempt is the relocation attempt ordinal. Auto: N of autoMigrate.maxAttempts.

reason string

Reason is the requester-supplied reason (Manual) or the disposition branch that produced the entry (Auto).

message string

Message describes the current blocker (non-terminal) or the terminal outcome.

startedAt Time

StartedAt is when the entry was created.

deadline Time

Deadline is when a non-terminal entry expires. Manual: accept time plus InstanceReadyTimeout.

completedAt Time

CompletedAt is when the entry reached a terminal phase.

succeeded bool

Succeeded reports the post-hoc outcome. Auto: stamped true when the relocated Instance next reaches Ready.

MigrationTrigger

Used by MigrationStatus.

MigrationTrigger identifies who initiated a migration entry.

Underlying type: string.

Allowed values: Manual, Auto.

ModelCacheProvider

Used by SupportedModelFormat.

ModelCacheProvider names an external model cache that a runtime can load Sharded models from. Sharded distribution is in development.

Underlying type: string.

ModelCacheStatus

Used by ModelStatusSpec.

ModelCacheStatus identifies the external cache that holds a Sharded model. Sharded distribution is in development, and OME doesn't set this yet.

FieldTypeDescription
backend string

Backend identifies the configured cache provider.

sourceUri string

SourceUri is the model source URI being cached.

ModelCopies

Used by ModelStatus.

FieldTypeDescription
failedCopies int

How many copies of the model failed to load recently.

Default: 0.

totalCopies int

How many copies of the model are loaded.

ModelExtensionSpec

Used by BaseModelSpec, FineTunedWeightSpec.

FieldTypeDescription
displayName string

DisplayName is the user-friendly name of the model

version string
disabled bool

Whether the model is enabled or not

vendor string

Vendor of the model, e.g., "NVIDIA", "Meta", "HuggingFace"

compartmentID string

CompartmentID is the compartment ID of the model

ModelFormat

Used by BaseModelSpec, SupportedModelFormat.

FieldTypeDescription
name Required string

Name of the format in which the model is stored, e.g., "ONNX", "TensorFlow SavedModel", "PyTorch", "SafeTensors"

version string

Version of the model format. Runtime selection uses it to check that a runtime supports the model. It can be "major", "major.minor" or "major.minor.patch".

operator RuntimeSelectorOperator

Operator for the selector with supported values: "Equal", "GreaterThan" This is used to select the serving runtime based on the modelFormat version

Default: Equal.

weight int64

Weight of the model format in the runtime selector, used to prioritize modelFormat

Default: 1.

ModelFrameworkSpec

Used by BaseModelSpec, SupportedModelFormat.

FieldTypeDescription
name Required string

Name of the library in which the model is stored, e.g., "ONNXRuntime", "TensorFlow", "PyTorch", "Transformer", "TensorRTLLM"

version string

Version of the library. Runtime selection uses it to check that a runtime supports the model. It can be "major", "major.minor" or "major.minor.patch".

operator RuntimeSelectorOperator

Operator for the selector with supported values: "Equal", "GreaterThan" This is used to select the serving runtime based on the modelFramework version

Default: Equal.

weight int64

Weight of the framework in the runtime selector, used to prioritize modelFramework

Default: 1.

ModelOverlayRef

Used by ModelRef.

ModelOverlayRef references a BaseModel attached as an overlay. Narrower than ModelRef on purpose: no nested Overlays (type-system forbids recursion) and no FineTunedWeights (weight composition lives on the primary).

FieldTypeDescription
name Required string
kind string

Default: ClusterBaseModel.

apiGroup string

Default: ome.io.

ModelQuantization

Used by BaseModelSpec, SupportedModelFormat.

Underlying type: string.

ModelRef

Used by InferenceReplicaSpec, InferenceServiceSpec.

FieldTypeDescription
name Required string

Name of the model being referenced. Identifies the specific model to be used for inference.

kind string

Kind of the model being referenced. Specifies the Kubernetes resource kind of the referenced model.

Default: ClusterBaseModel.

apiGroup string

APIGroup of the resource being referenced. Specifies the Kubernetes API group of the referenced model.

Default: ome.io.

fineTunedWeights []string

FineTunedWeights names the FineTunedWeight resources to apply to the base model.

overlays []ModelOverlayRef

Since v1.3. Overlays declares additional BaseModels attached to every serving pod alongside the primary. Each overlay is mounted (PVC/PerNode) or env-addressable (Sharded) at /opt/ml/model-overlays/<name> and exposed via OVERLAY_<UPPERCASED_NAME>_MODEL_PATH. Runner selects at request time; OME does not detect failures or auto-swap. Disabled or NotReady overlays are silently omitted.

ModelRevisionStates

Used by ModelStatus.

FieldTypeDescription
activeModelState ModelState

High level state string: Pending, Standby, Loading, Loaded, FailedToLoad

Default: Pending.

targetModelState ModelState

Default: "".

ModelSizeRangeSpec

Used by ServingRuntimeSpec.

ModelSizeRangeSpec defines the range of model sizes supported by this runtime

FieldTypeDescription
min string

Minimum model parameter count supported by this runtime, given as a string with an optional suffix M (million), B (billion), or T (trillion), e.g. "1B", "7B", "70B", "1T". It is compared against the model's parameter size during runtime auto-selection. A value not in the <number>[M|B|T] form is treated as 0.

max string

Maximum model parameter count supported by this runtime, given as a string with an optional suffix M (million), B (billion), or T (trillion), e.g. "1B", "7B", "70B", "1T". It is compared against the model's parameter size during runtime auto-selection. A value not in the <number>[M|B|T] form is treated as 0.

ModelState

Used by ModelRevisionStates.

ModelState enum

Underlying type: string.

Allowed values: "", Pending, Standby, Loading, Loaded, FailedToLoad.

ModelStatus

Used by InferenceServiceStatus.

FieldTypeDescription
transitionStatus TransitionStatus

Whether the pods serving the model reflect the current spec or are in transition. Empty when the InferenceService is "lean" (no spec.model is declared) and no model-loading lifecycle applies; the controller leaves this field unset in that case. Populated as "InProgress" → "UpToDate" (or "BlockedByFailedLoad"/"InvalidSpec") by the controller once a model is referenced.

modelRevisionStates ModelRevisionStates

The model's load state in the pods that serve it.

lastFailureInfo FailureInfo

Details of last failure, when load of target model is failed or blocked.

modelCopies ModelCopies

How many copies of the model are loaded, and how many failed.

ModelStatusSpec

Used by BaseModel, ClusterBaseModel, FineTunedWeight.

ModelStatusSpec defines the observed state of Model weight

FieldTypeDescription
lifecycle string

LifeCycle is the model's lifecycle stage, such as Deprecated, Experiment, Public or Internal. The API server doesn't check the value, and OME doesn't set it.

state LifeCycleState

Status of the model weight

observedGeneration int64

ObservedGeneration is the .metadata.generation the controller last reconciled against. If this lags behind .metadata.generation, the controller has not yet observed the latest spec edit.

lastReconcileTime Time

LastReconcileTime is the wall-clock timestamp of the controller's most recent reconcile pass for this object. Liveness signal — if it falls behind by more than the reconcile period, the controller is wedged or not scheduled. Distinct from Condition.lastTransitionTime, which only advances on actual status flips.

nodesReady []string
nodesFailed []string
conditions []Condition

Conditions describe cluster-wide model readiness. OME sets them only for pvc:// models, which report SourceReachable and Ready. Other models report per-node state through NodesReady and NodesFailed.

cache ModelCacheStatus

Since v1.3. Cache identifies the external cache behind Sharded distribution, which is in development. OME doesn't set it yet.

MountedOverlay

Used by InferenceServiceStatus.

MountedOverlay records one overlay the controller wired into the current pod spec.

FieldTypeDescription
name string
envVar string
mountPath string

MountPath is empty for Sharded overlays (fetched at runtime).

distribution string

OMENativeInstancePhase

Used by InstanceStatusPhaseGroup, OMENativeInstanceStatus.

OMENativeInstancePhase is the lifecycle phase of an OMENative Instance.

Underlying type: string.

Allowed values: Pending, Creating, Ready, Updating, Restarting, Migrating, Failed, Deleting.

OMENativeInstanceStatus

Used by InferenceReplicaStatus.

OMENativeInstanceStatus reports state for one OMENative Instance.

FieldTypeDescription
index int32

Index is the stable Instance ordinal. Values may be sparse after surge migration.

incarnation int64

Incarnation increments each time the Instance is recreated (full recreate update, restart-on-loss). In-place updates do not increment. Stamped on pods via the ome.io/instance-incarnation label.

phase OMENativeInstancePhase

Phase is the lifecycle phase of the Instance.

runningRevision string

RunningRevision is the ControllerRevision the live pods are running.

targetRevision string

TargetRevision is the ControllerRevision the live pods are converging toward.

podCount int32

PodCount is the total number of pods owned by this Instance.

readyPodCount int32

ReadyPodCount is retained for API compatibility. OMENative derives readiness from Pods and does not persist this field.

servingPodCount int32

ServingPodCount is the number of pods that are BOTH ContainersReady AND have serving=True on the controller-managed readiness gate — i.e., pods actually in the load balancer rotation. Diverges from ReadyPodCount whenever the controller flips the serving gate (in-place updates, drain steps, etc.). MaxUnavailable budgets are computed against the serving count, not the ready count, so that "missing from traffic" reflects reality.

availablePodCount int32

AvailablePodCount is the number of pods that are Available: in rotation on the Component's headless Service and, when lifecycle.minReadySeconds is set, Ready for at least that long.

scheduledPodCount int32

ScheduledPodCount is retained for API compatibility. OMENative derives scheduling state from Pods and does not persist this field.

admitted bool

Admitted is true when this Instance's pods have left the Kueue admission scheduling gate (quota granted): the Instance has pods and none are admission-gated. False while gated/queued or before pods exist. Used by the control plane to decide the fan-out race winner.

nodesOccupied []string

NodesOccupied is retained for API compatibility. OMENative reads current placement from Pods and does not persist this field.

conditions []Condition

Conditions reports Instance-level conditions. Defined types include AllPodsScheduled, AllPodsReady, AllPodsAvailable, Drained, Failed, ProgressDeadlineExceeded.

readySince Time

ReadySince is when the Instance last entered Ready. Anchors post-Ready failure detection: container restarts that finished before this time belong to boot and never trigger a recreate.

operation InstanceOperation

Operation is the durable record of an in-flight destructive action against this Instance. Set before the action starts, cleared after it completes. Lets a crashed controller resume work without diffing pod state.

activeOrdinal int32

ActiveOrdinal identifies which of two pod-naming slots (0 or 1) currently holds the canonical pod for this single-pod Instance. SurgeThenDrain alternates between slots: the surge creates a new pod at 1 - ActiveOrdinal, waits Ready, drains the old pod, then advances ActiveOrdinal to the new slot. Stays 0 for InPlace and Recreate strategies (those reuse the same pod name). Defaults to 0 on initial create.

Minimum: 0. Maximum: 1.

lastFailure InstanceTermination

LastFailure preserves the diagnostics of the pod whose failure (or stuck-pod escalation) last triggered a recreate of this Instance. OMENative drains and deletes every gang pod on recreate, so the failing pod and its container termination state vanish from the cluster — this field is the surviving trace operators read when a multi-node Instance keeps recreating. Set on the first pass of a failure-driven Restart and on stuck-pod escalation; left untouched by revision-roll recreates (those carry their cause in Operation.Reason instead) so the most recent genuine failure isn't overwritten by a clean rollout.

announced []string

Announced records the once-only messages this Instance has already emitted, one entry per message: the event reason it was emitted under and the episode it was emitted in, joined by "@". A warning an operator needs to see once — the gang has no co-location term, the PodGroup was rebuilt, a repair is held, a drain is past its deadline — is emitted only when its entry is absent, and is stamped in the same write that emits it. Recording it on the Instance rather than in controller memory is what makes the once-only property hold per workload rather than per process, and survive a controller restart.

The episode is the in-flight operation, or the incarnation when there is none: a new attempt or a rebuilt Instance has its own messages to deliver, and the entries of the episode it replaced no longer match.

ObjectReference

Used by FineTunedWeightSpec.

ObjectReference contains enough information to let you inspect or modify the referred object.

FieldTypeDescription
name Required string

Name of the referenced object

namespace string

Namespace of the referenced object

OnInconclusive

Used by RolloutAnalysis.

OnInconclusive selects the behavior when analysis cannot read health past the stall timeout (NOT a metric breach).

Underlying type: string.

ParentReference

Used by InferenceReplicaSpec.

ParentReference holds the InferenceService owner reference info. Distinct from the OwnerReference list because the InferenceReplica controller composes the parent's name into per-IR label and Service names without re-reading the metadata field.

FieldTypeDescription
name Required string

Name is the name of the parent InferenceService.

Minimum length: 1.

PauseMode

Used by InferenceReplicaSpec.

PauseMode is the enum of pause depths for InferenceReplicaSpec.Paused.

Underlying type: string.

PlacementCapacityPool

Used by PlacementCapacitySample.

PlacementCapacityPool is the evidence for one resource/flavor ratio.

FieldTypeDescription
resourceName string
resourceFlavor string
demand int64

Minimum: 1.

allocatable int64

Minimum: 0.

observedAt Time
reportUID UID
reportResourceVersion string
attribution AcceleratorCapacityAttribution

PlacementCapacitySample

Used by CandidateAllocationStatus.

PlacementCapacitySample records the identified hardware and resolved demand used to normalize one member into nominal whole-replica capacity.

FieldTypeDescription
demandFingerprint string
demandContract PlacementDemandContract

DemandContract binds normalization to the member rendering authorized by this allocation. Its fingerprint must equal DemandFingerprint.

replicas int64

Minimum: 0.

pools []PlacementCapacityPool

PlacementComponentDemand

Used by PlacementDemandContract.

PlacementComponentDemand identifies one component's rendered replica shape.

FieldTypeDescription
component Required ComponentType

Allowed values: engine, decoder.

renderingHash Required string

RenderingHash includes pod shapes, worker count, mode and RuntimeClasses.

Pattern: ^[a-f0-9]{64}$.

PlacementComponentFloor

Used by PlacementExecutionPolicy, PlacementHomePolicy.

PlacementComponentFloor records a resolved component's guaranteed count. Engine and Decoder use equal whole-replica floors; Router is independent. Zero permits steady scale-to-zero; movement requires positive floors.

FieldTypeDescription
component Required ComponentType

Allowed values: engine, decoder, router.

replicas Required int32

Minimum: 0.

PlacementDemandContract

Used by PlacementCapacitySample, PlacementExecutionPolicy.

PlacementDemandContract binds component rendering to normalized unit demand. Router is excluded because its replicas follow a per-home policy.

FieldTypeDescription
fingerprint Required string

Fingerprint identifies the complete resolved resource/flavor demand.

Pattern: ^[a-f0-9]{64}$.

components Required []PlacementComponentDemand

Components includes exactly the declared Engine/Decoder components.

Minimum items: 1. Maximum items: 2.

PlacementExecutionPolicy

Used by InferenceReplicaSpec.

PlacementExecutionPolicy carries source allocation authority to a member's component reconciler. It is absent for locally managed services.

FieldTypeDescription
planID Required string
revision Required int64

Minimum: 1.

sourceUID Required UID
clusterUID Required UID
pauseSurge Required bool

PauseSurge prevents new surplus-producing operations while existing operations retain their reservations and may finish cleanup.

demand PlacementDemandContract

Demand requires member rendering to match the accepted normalization inputs before a component can project workloads. Absent for static plans.

replicaFloors []PlacementComponentFloor

ReplicaFloors binds the full per-home policy to the floors accepted by placement. Runtime changes cannot expand a paused placement reservation.

Minimum items: 1. Maximum items: 3.

PlacementHomePolicy

Used by CandidateAllocationStatus.

PlacementHomePolicy records the full component floors of one retained home.

FieldTypeDescription
inputDigest string

InputDigest binds these resolved floors to the accepted source intent.

replicaFloors []PlacementComponentFloor

Minimum items: 1. Maximum items: 3.

PlacementMode

Used by PlacementPlanStatus, PlacementSpec, TrafficMapSpec.

PlacementMode is the cardinality of a multi-cluster placement: how many workload clusters end up serving the InferenceService.

Underlying type: string.

Allowed values: Single, All, Split, SplitByCapacity.

PlacementPhase

Used by PlacementStatus.

PlacementPhase is the coarse state of an InferenceService's multi-cluster placement.

Underlying type: string.

Allowed values: Pending, Admitting, Racing, Placed, Failed.

PlacementPlanStatus

Used by PlacementStatus.

PlacementPlanStatus identifies the allocation persisted before member writes. Original assignments remain fixed throughout a transition, including retargets.

FieldTypeDescription
id string
mode PlacementMode

Mode identifies the execution semantics of this accepted plan.

Allowed values: Single, All, Split, SplitByCapacity.

winner string

Winner commits the admitted Single home before race losers are removed. Empty means the persisted Single admission race has not selected a home.

singleMove PlacementSingleMoveStatus

SingleMove retains bounded replacement-race state until the old home and losing probes have been removed. Winner remains the serving home.

adoptionDigest string

AdoptionDigest fixes the initial intent while standing homes are being inventoried. A changed intent cannot expand an incomplete inventory.

revision int64

Revision increases for every accepted allocation or drain instruction.

Minimum: 1.

sourceUID UID
observedGeneration int64

Minimum: 1.

inputDigest string

InputDigest identifies resolved source intent and accepted allocation inputs. Heartbeat timestamps and report resource versions do not change this digest.

pauseSurge bool

PauseSurge keeps new member rollout reservations stopped while placement owns the shared transition allowance. Releasing it creates a new revision.

requestedReplicas int64

RequestedReplicas includes the assigned and unassigned desired floor.

Minimum: 0.

assignedReplicas int64

Minimum: 0.

unassignedReplicas int32

Minimum: 0.

originalUnassignedReplicas int32

OriginalUnassignedReplicas retains the unassigned part of the original floor.

Minimum: 0.

PlacementPolicy

Used by PlacementSpec.

PlacementPolicy selects the matching and allocation contract.

Underlying type: string.

Allowed values: ClusterAffinity, ComponentAffinity.

PlacementSingleMoveStatus

Used by PlacementPlanStatus.

PlacementSingleMoveStatus separates replacement admission from serving handoff.

FieldTypeDescription
selected string

Selected records the admitted replacement while it becomes ready and routable.

cursor string

Cursor identifies the last nominated replacement for fair bounded retries.

PlacementSpec

Used by InferenceServiceSpec.

PlacementSpec declares explicit multi-cluster matching and allocation intent.

Validation: replacementTimeout requires Single placement.

Validation: componentAffinity is required by, and only valid with, the ComponentAffinity policy.

Validation: the ComponentAffinity policy reads componentAffinity, not clusterAffinity.

FieldTypeDescription
policy Required PlacementPolicy

Policy selects affinity matching and persisted allocation plans. ComponentAffinity reads per-component terms from componentAffinity.

mode Required PlacementMode

Mode selects the placement cardinality and replica allocation strategy.

clusterAffinity []ClusterAffinityTerm

ClusterAffinity ORs terms whose requirements are ANDed, for every component. Requires the ClusterAffinity policy; omission then matches every registration. An explicit empty or null list is invalid.

Minimum items: 1. Maximum items: 64.

componentAffinity ComponentClusterAffinity

ComponentAffinity holds one affinity term list per component and requires the ComponentAffinity policy. Every component must match the same clusters; in Split, each component's weights set its own shares. An explicit null is invalid.

maxSurge int32

Deprecated: MaxSurge is ignored. A placement move may hold one extra full copy of the desired allocation; admission warns when this is set.

Minimum: 0.

replacementTimeout Duration

ReplacementTimeout bounds a non-admitting probe during a healthy Single move. Omission retains pending probes; a positive duration allows rotation.

Validation: replacementTimeout must be a positive duration.

split SplitSpec

Split provides the requested floor and optional per-home ceiling for Split and SplitByCapacity. ClusterAffinity rejects it in other modes.

PlacementStatus

Used by InferenceServiceStatus.

PlacementStatus is the multi-cluster placement status: its coarse phase and the candidate clusters participating in placement.

FieldTypeDescription
plan PlacementPlanStatus

Plan is the durable authority for member allocation writes.

cluster string

Cluster is the winning WorkloadCluster in Single mode. It is empty before admission and in All/Split modes, where Candidates is authoritative.

phase PlacementPhase

Phase is a coarse placement state.

endpoint URL

Endpoint is the externally-addressable URL of the winning cluster in Single mode, mirrored from the derived InferenceService's status.url once it is admitted AND addressable. It is empty before the winner reports a URL and in All/Split modes, where per-candidate endpoints are authoritative.

candidates []CandidatePlacement

Candidates are the clusters this ISVC has been fanned out to during placement. Populated by the control plane.

PodOverride

Used by BenchmarkJobSpec.

FieldTypeDescription
image string

Image specifies the container image to use for the benchmark job.

env []EnvVar

List of environment variables to set in the container.

envFrom []EnvFromSource

List of sources to populate environment variables in the container.

volumeMounts []VolumeMount

Pod volumes to mount into the container's filesystem.

resources ResourceRequirements

Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

tolerations []Toleration

If specified, the pod's tolerations.

nodeSelector map[string]string

NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

affinity Affinity

If specified, the pod's scheduling constraints

volumes []Volume

List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes

PodSpec

Used by DecoderSpec, EngineSpec, LeaderSpec, RouterSpec, WorkerSpec.

PodSpec is a description of a pod.

FieldTypeDescription
volumes []Volume

List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes

initContainers []Container

List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

containers []Container

List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.

ephemeralContainers []EphemeralContainer

List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing pod to perform user-initiated actions such as debugging. This list cannot be specified when creating a pod, and it cannot be modified by updating the pod spec. In order to add an ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource. Don't set it here: Kubernetes doesn't allow ephemeral containers in the pod templates OME creates, and the InferenceService CRD drops the field from spec.engine, spec.decoder and spec.router.

restartPolicy RestartPolicy

Restart policy for all containers within the pod. One of Always, OnFailure, Never. In some contexts, only a subset of those values may be permitted. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy

terminationGracePeriodSeconds int64

Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates stop immediately via the kill signal (no opportunity to shut down). If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.

activeDeadlineSeconds int64

Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.

dnsPolicy DNSPolicy

Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.

nodeSelector map[string]string

NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

serviceAccountName string

ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/

serviceAccount string

DeprecatedServiceAccount is a deprecated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.

automountServiceAccountToken bool

AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.

nodeName string

NodeName indicates in which node this pod is scheduled. If empty, this pod is a candidate for scheduling by the scheduler defined in schedulerName. Once this field is set, the kubelet for this node becomes responsible for the lifecycle of this pod. This field should not be used to express a desire for the pod to be scheduled on a specific node. https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodename

hostNetwork bool

Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.

hostPID bool

Use the host's pid namespace. Optional: Default to false.

hostIPC bool

Use the host's ipc namespace. Optional: Default to false.

shareProcessNamespace bool

Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false.

securityContext PodSecurityContext

SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.

imagePullSecrets []LocalObjectReference

ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod

hostname string

Specifies the hostname of the Pod. If not specified, the pod's hostname will be set to a system-defined value.

subdomain string

If specified, the fully qualified Pod hostname will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>". If not specified, the pod will not have a domainname at all.

affinity Affinity

If specified, the pod's scheduling constraints

schedulerName string

If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.

tolerations []Toleration

If specified, the pod's tolerations.

hostAliases []HostAlias

HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified.

priorityClassName string

If specified, indicates the pod's priority. "system-node-critical" and "system-cluster-critical" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.

priority int32

The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.

dnsConfig PodDNSConfig

Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.

readinessGates []PodReadinessGate

If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to "True" More info: https://git.k8s.io/enhancements/keps/sig-network/580-pod-readiness-gates

runtimeClassName string

RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class

enableServiceLinks bool

EnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.

preemptionPolicy PreemptionPolicy

PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.

overhead ResourceList

Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. This field will be autopopulated at admission time by the RuntimeClass admission controller. If the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. The RuntimeClass admission controller will reject Pod create requests which have the overhead already set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. More info: https://git.k8s.io/enhancements/keps/sig-node/688-pod-overhead/README.md

topologySpreadConstraints []TopologySpreadConstraint

TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.

setHostnameAsFQDN bool

If true the pod's hostname will be configured as the pod's FQDN, rather than the leaf name (the default). In Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname). In Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters to FQDN. If a pod does not have FQDN, this has no effect. Default to false.

os PodOS

Specifies the OS of the containers in the pod. Some pod and container fields are restricted if this is set.

If the OS field is set to linux, the following fields must be unset: -securityContext.windowsOptions

If the OS field is set to windows, following fields must be unset:

  • spec.hostPID
  • spec.hostIPC
  • spec.hostUsers
  • spec.securityContext.appArmorProfile
  • spec.securityContext.seLinuxOptions
  • spec.securityContext.seccompProfile
  • spec.securityContext.fsGroup
  • spec.securityContext.fsGroupChangePolicy
  • spec.securityContext.sysctls
  • spec.shareProcessNamespace
  • spec.securityContext.runAsUser
  • spec.securityContext.runAsGroup
  • spec.securityContext.supplementalGroups
  • spec.securityContext.supplementalGroupsPolicy
  • spec.containers[*].securityContext.appArmorProfile
  • spec.containers[*].securityContext.seLinuxOptions
  • spec.containers[*].securityContext.seccompProfile
  • spec.containers[*].securityContext.capabilities
  • spec.containers[*].securityContext.readOnlyRootFilesystem
  • spec.containers[*].securityContext.privileged
  • spec.containers[*].securityContext.allowPrivilegeEscalation
  • spec.containers[*].securityContext.procMount
  • spec.containers[*].securityContext.runAsUser
  • spec.containers[*].securityContext.runAsGroup
hostUsers bool

Use the host's user namespace. Optional: Default to true. If set to true or not present, the pod will be run in the host user namespace, useful for when the pod needs a feature only available to the host user namespace, such as loading a kernel module with CAP_SYS_MODULE. When set to false, a new userns is created for the pod. Setting false is useful for mitigating container breakout vulnerabilities even allowing users to run their containers as root without actually having root privileges on the host. This field is alpha-level and is only honored by servers that enable the UserNamespacesSupport feature.

schedulingGates []PodSchedulingGate

SchedulingGates is an opaque list of values that if specified will block scheduling the pod. If schedulingGates is not empty, the pod will stay in the SchedulingGated state and the scheduler will not attempt to schedule the pod.

SchedulingGates can only be set at pod creation time, and be removed only afterwards.

resourceClaims []PodResourceClaim

ResourceClaims defines which ResourceClaims must be allocated and reserved before the Pod is allowed to start. The resources will be made available to those containers which consume them by name.

This is an alpha field and requires enabling the DynamicResourceAllocation feature gate.

This field is immutable.

PolicyEnforcement

Used by AutoscalerPolicySpec.

PolicyEnforcement is the enforcement tier of an AutoscalerPolicy. Alpha. The API may change without notice.

Underlying type: string.

Allowed values: Default, Required.

ProbeResult

Used by TrafficMapProbe.

ProbeResult is the outcome of the most recent end-to-end health probe.

Underlying type: string.

Allowed values: Passing, Failing, Unknown.

ProportionalPolicy

Used by ScalingPolicy.

ProportionalPolicy specifies the anchor Component and per-follower replica ratios for ScalingProportional. Alpha. The API may change without notice.

FieldTypeDescription
anchor ComponentType

Anchor is the Component whose replica count drives followers.

Allowed values: engine, decoder, router.

Default: engine.

ratios map[ComponentType]Quantity

Ratios maps each follower Component to its replica ratio relative to the anchor. A ratio of 1.0 means parity; 0.25 means one follower per four anchor replicas (rounded up). Components not listed scale independently.

ReplicaRefs

Used by InferenceServiceSpec.

ReplicaRefs names the standalone InferenceReplicas an InferenceService fronts, per role. Each list names one replica of that component in the service's namespace.

FieldTypeDescription
engine []string

Engine names the replicas that serve the engine role.

decoder []string

Decoder names the replicas that serve the decoder role.

router []string

Router names the replicas that serve the router role.

ReplicaValueSource

Used by FallbackTemplate.

ReplicaValueSource derives an int32 replica count for a rendered scaler field. Exactly one of Value / FromComponent is set. kedav1.Fallback.Replicas is an int32; a typed source avoids round-tripping numbers through string templates, which would add a parse failure mode for no expressiveness.

Validation: exactly one of value or fromComponent must be set.

FieldTypeDescription
value int32

Value is a fixed replica count.

Minimum: 0.

fromComponent ComponentBoundsField

FromComponent resolves against the consuming component's effective replica bounds — after defaulting and, on a placement-derived InferenceService, after the per-home bounds rewrite.

RetryBlock

Used by InferenceReplicaStatus.

RetryBlock is the persisted per-revision retry authority. The subject is the owning IR plus TargetRevision.

FieldTypeDescription
targetRevision string

TargetRevision is the ControllerRevision name this block scopes.

state RetryBlockState
attemptsStarted int32

AttemptsStarted counts lifecycle attempts at this revision. Kubelet container restarts are diagnostic and not counted here.

nextRetryAt Time

NextRetryAt is the persisted resume time while State=Backoff. Never recomputed from process-local history (restart-safe).

firstFailureAt Time
lastFailureAt Time
reason string

Reason is the operator-facing last-failure summary.

RetryBlockState

Used by RetryBlock.

RetryBlockState is the retry authority state for one target revision.

Underlying type: string.

Allowed values: Backoff, Held, RetryInProgress.

RollingUpdate

Used by UpdateStrategy.

RollingUpdate paces rollout across Instances of one Component.

FieldTypeDescription
partition int32

Partition holds back updates for Instances whose index is < Partition. 0 (the default) updates all Instances. Used for canary holds.

Minimum: 0.

maxUnavailable IntOrString

MaxUnavailable is the maximum number of Instances (or fraction) allowed to be in a non-Ready state during the rollout. Accepts either an absolute integer count (e.g. 2) or a percent string (e.g. "25%"). Percent values resolve to ceil(replicas * percent / 100) at reconcile time so the budget scales with the Component's replica count. Unset inherits the ServingRuntime's value; when neither sets it and the strategy is not SurgeThenDrain, the cluster default applies, and without one this layer sets no cap.

maxSurge IntOrString

MaxSurge is the maximum number of extra Instances (or fraction) the rollout may create above the Component's desired replica count during a rolling update. Accepts either an absolute integer count (e.g. 1) or a percent string (e.g. "25%"). Percent values resolve to ceil(replicas * percent / 100) at reconcile time. Mirrors the semantics of upstream appsv1.Deployment.Strategy.RollingUpdate.MaxSurge — extra capacity is created and brought to Ready before old Instances are drained, enabling zero-capacity-dip rollouts.

When the Component participates in a RolloutCoordinationGroup with a non-zero CoordinationPacing.MaxSurge, the group-wide ceiling caps the per-Component MaxSurge. Unset inherits the ServingRuntime's value; when neither sets it and the strategy is SurgeThenDrain, the cluster default applies, and without one this layer sets no cap.

RolloutAnalysis

Used by RolloutGroupStep.

RolloutAnalysis is a step's metric gate: the checks (metrics) and policy (interval, failureLimit, onInconclusive, initialDelay) that decide advance, hold, or rollback for the step it is set on. It does NOT carry the metrics source — that is GroupCanary.Prometheus, shared by all analysis steps.

FieldTypeDescription
interval Required Duration

Interval is the sampling cadence — how often the controller re-evaluates the metrics while a step bakes. It also bounds the requeue while holding.

initialDelay Duration

InitialDelay is a warm-up after a step's pods become Ready and traffic is applied, before the first sample. New pods need a moment before their metrics mean anything; sampling immediately would read cold-start noise.

failureLimit Required int32

FailureLimit is the number of failing samples, counted PER STEP (reset on advance), that triggers auto-rollback. FailureLimit=1 rolls back on the first bad sample.

Minimum: 1.

onInconclusive OnInconclusive

OnInconclusive selects what to do when a sample cannot be completed (Prometheus unreachable, query error, or empty result) past the stall timeout — distinct from a metric breach.

  • Hold (default): keep traffic at the current step and escalate to Failed for an operator decision. A monitoring outage is not evidence the canary is bad.
  • Rollback: fail-safe — treat "can't tell" as "assume bad" and roll back on the first inconclusive sample, without waiting out the stall timeout.
  • RollbackOnStall: ride out transient gaps like Hold, but roll back instead of parking once the stall timeout expires.

Allowed values: Hold, Rollback, RollbackOnStall.

metrics Required []AnalysisMetric

Metrics are the success conditions. A sample passes only when EVERY metric passes (AND). At least one is required; an analysis with no metrics could never fail and would gate nothing.

Minimum items: 1. Maximum items: 10.

RolloutCoordinationGroupStatus

Used by RolloutCoordinationStatus.

RolloutCoordinationGroupStatus reports the observed state of one coordination group.

FieldTypeDescription
name string

Name uniquely identifies the group within the RolloutCoordinationStatus. Auto-derived from the group index (stringified) on first observation.

components []ComponentType

Components mirrors spec.rollout.groups[i].components for operator readability.

policy CoordinationPolicy

Policy mirrors the spec policy.

order []ComponentType

Order mirrors the spec order (Sequential / BlueGreen-ordered).

phase CoordinationPhase

Phase reports the base coordination phase. Metric-stable enum.

compositePhase string

CompositePhase is a human-readable composite of Phase plus the active Component for Sequential / per-Component-aware policies (e.g. "decoder.Surging", "Sequential.AwaitingNextComponent"). Operator-facing; metrics use Phase, not CompositePhase.

currentComponent ComponentType

CurrentComponent names the Component the group is actively reconciling (Sequential policy). Empty otherwise.

previousComponent ComponentType

PreviousComponent names the most recently completed Component in a Sequential group's order. Empty when no Component has yet reached Idle on the new revision.

observedSurge IntOrString

ObservedSurge is the IntOrString surge target applied during the current Surging / Waiting phase. Empty when the group is Idle.

observedRatio RolloutCoordinationRatio

ObservedRatio reports cross-Component ratio snapshots when the group uses RatioBalanced pacing. Nil for PerComponent pacing.

lastTransitionTime Time

LastTransitionTime is when Phase last changed.

message string

Message is a short operator-facing explanation of the current Phase. Set on Failed / RollingBack / Paused phases.

RolloutCoordinationRatio

Used by RolloutCoordinationGroupStatus.

RolloutCoordinationRatio is the cross-Component ratio snapshot used by RatioBalanced pacing.

FieldTypeDescription
original map[ComponentType]int32

Original is the snapshot of desired replica counts per Component at rollout start. The keys are ComponentType strings.

current map[ComponentType]int32

Current reports the live replica counts per Component.

newPods map[ComponentType]int32

NewPods reports the new-revision pod counts per Component.

RolloutCoordinationStatus

Used by InferenceServiceStatus.

RolloutCoordinationStatus reports per-group coordination state for the InferenceService.

FieldTypeDescription
groups []RolloutCoordinationGroupStatus

Groups reports the observed state of each declared rollout group, indexed by position in spec.rollout.groups[].

RolloutGroup

Used by RolloutRunGroup, RolloutSpec.

RolloutGroup is a set of Components that roll together, advancing through at most one progression. The progression is a presence-based one-of: set Canary, BlueGreen, or RollingUpdate — or none, which defaults to BlueGreen. Omitting it is the ergonomic spelling for "just roll this group" and for a single-Component group in a sequence (components: [decoder] then components: [engine]), where the empty blueGreen: {} selector would be pure ceremony.

Failure mode if mis-set: two progressions is ambiguous (which one drives traffic?) and is rejected by the rule below.

Validation: at most one of canary, blueGreen, or rollingUpdate may be set on a rollout group.

Validation: order must reference only Components listed in this group.

FieldTypeDescription
components Required []ComponentType

Components lists the Component names in this group (they roll together). Valid values: "router", "engine", "decoder".

Minimum items: 1. Maximum items: 3.

order []ComponentType

Order optionally pins the sequence in which this group's Components roll. No progression applies it — the Components in a group advance together — so admission rejects a non-empty order (on create and on any update that changes spec.rollout) rather than accept a sequence the engine does not enforce. To roll Components one at a time, declare one single-Component blueGreen group per Component, in the desired list order. Must reference only Components in this group.

Maximum items: 3.

canary GroupCanary

Canary advances the group through explicit capacity + service-level-traffic steps with optional gates. One-of progression.

blueGreen GroupBlueGreen

BlueGreen surges the full new set, then flips traffic atomically. One-of progression.

rollingUpdate GroupRollingUpdate

RollingUpdate replaces pods gradually within the surge/unavailable budget, tolerating mixed revisions during the window. One-of progression.

policyRef RolloutPolicyRef

PolicyRef names a same-namespace RolloutPolicy that supplies this group's progression. A sibling of the progression one-of, not an arm of it: the ref may coexist with one inline progression, and the inline block wins (the preview/rollback mechanism) — the shadowed policy's would-pin digest is published in status.rollout.groups[]. A group whose only progression is an unresolvable ref PARKS at run open (fail-closed); it never falls back to the default blueGreen, because silently removing a declared gate is the failure this API exists to prevent.

soak Duration

Soak is the wait AFTER this group completes, before the next group begins. It is honored only when the rollout is a sequence of single-Component blueGreen groups (the run that collapses to the internal Sequential state machine); ignored on the last group. Admission rejects a soak the engine would silently drop — on a canary, multi-Component, or rollingUpdate group, or on a rollout that does not collapse to that sequence.

maintainRatio MaintainRatio

MaintainRatio guards the cross-Component replica ratio while this group rolls. Meaningful only on multi-Component blueGreen/rollingUpdate groups (e.g. a PD engine+decoder pair); ignored on single-Component groups and rejected by admission on canary groups (the canary engine does not enforce it).

RolloutGroupOrdering

Used by RolloutSpec.

RolloutGroupOrdering declares what, if anything, groups[] list order promises.

Underlying type: string.

Allowed values: Sequential, Concurrent.

RolloutGroupResolution

Used by RolloutStatus.

RolloutGroupResolution is the always-current resolution view for one spec group: which source would pin now, and the shadowed-policy preview when an inline progression outranks a ref.

FieldTypeDescription
index int32

Index is the group's position in spec.rollout.groups[].

source RolloutPlanSource

Source is the source a run opened now would pin for this group.

policyRef RolloutPolicyRef
observedDigest string

ObservedDigest is the portable digest of the progression body Source resolves to right now (live render — compare against the active run's pinned digest to see drift).

shadowedPolicyRef ShadowedRolloutPolicyRef

ShadowedPolicyRef is set when an inline progression outranks a ref: the preview surface an operator diffs before deleting the inline block.

RolloutGroupStep

Used by GroupCanary.

RolloutGroupStep is one stage of a canary progression. Capacity and traffic are INDEPENDENT: capacity is the per-Component new-revision pod count; traffic is the service-level percentage of requests on the new revision. The independence allows "capacity ahead of traffic" (run 50% pods, send 10% traffic) for warm-up.

How the step advances (its gate) is resolved in order:

  • Analysis set → metric-gated (queries GroupCanary.Prometheus); Pause.Duration, if any, is the minimum bake before a passing sample advances.
  • else Pause with Duration → timed: advance once Duration elapses.
  • else Pause → manual: hold for the ome.io/rollout-promote annotation.
  • else → advance as soon as capacity + traffic converge.
FieldTypeDescription
capacity Required IntOrString

Capacity is the fraction of desired replicas to run on the new revision at this step. Percentage ("25%") or absolute ("3"). Per-Component.

traffic Required int32

Traffic is the service-level percentage of requests routed to the new revision at this step (0-100). Not per-Component.

Minimum: 0. Maximum: 100.

pause RolloutPause

Pause holds the step: with a Duration it is a timed advance (or, when Analysis is set, the bake window); without one it is a manual hold for the ome.io/rollout-promote annotation. Absent (and no Analysis) advances immediately.

analysis RolloutAnalysis

Analysis opts this step into metric-gated promotion: it carries the checks (metrics) and policy (interval, failureLimit, onInconclusive) for THIS step. The metrics source is GroupCanary.Prometheus, shared by all analysis steps. Absent leaves the step manual/timed/immediate per Pause.

RolloutHold

Used by InferenceReplicaStatus, LifecycleStatus.

RolloutHold records the most recent reason a per-Instance Update was denied for a Component — the detail behind "why has this rollout not moved". Overwritten whenever a reconcile observes a fresh denial; cleared once the Component's rollout advances (an Update is admitted) or completes (CurrentRevision == UpdateRevision, or no rollout is in flight). Since is preserved across reconciles that keep reporting the same Gate and Target, so it anchors "held since" rather than "last observed at".

FieldTypeDescription
gate RolloutHoldGate

Gate names the layer that produced Reason.

reason string

Reason is the operator-facing denial string from the gate that produced it (e.g. "Sequential waiting on decoder").

target string

Target is the ControllerRevision name the held Update was aimed at.

since Time

Since is when this Gate+Target combination was first observed without interruption. A change in Gate or Target restarts the clock; a change in Reason text alone does not (mirrors how apimeta.SetStatusCondition preserves LastTransitionTime while a condition's Status is unchanged).

RolloutHoldGate

Used by RolloutHold.

RolloutHoldGate names the layer that most recently denied a per-Instance Update for a Component.

Underlying type: string.

Allowed values: Pairing, Ratio, Sequential, Budget, RetryBlock, Held, Plan.

RolloutPause

Used by RolloutGroupStep.

RolloutPause holds a rollout at a step boundary; its meaning depends on the step's gate (see RolloutGroupStep):

  • manual step (Pause, no Duration): wait for the ome.io/rollout-promote annotation.
  • timed step (Pause with Duration, no Analysis): advance after Duration.
  • analysis step (Analysis set): Duration is the minimum bake time before a passing sample may advance.
FieldTypeDescription
duration Duration

Duration to pause at this step; see the type doc for how each gate uses it.

RolloutPhase

Used by ComponentStatusSpec.

RolloutPhase is the canary step machine's projected state for a Component that a spec.rollout canary group governs. The canary executor writes it on the Component it drives (the unit's entrypoint) and nothing clears it, so it persists between runs. Lives on ComponentStatusSpec.RolloutPhase. Components that blueGreen/rollingUpdate groups drive carry no phase; their state is under status.rolloutCoordination.

Underlying type: string.

RolloutPlanSource

Used by CandidateRolloutGroup, RolloutGroupResolution, RolloutRunGroup, RolloutRunProvenance.

RolloutPlanSource records where a pinned group's progression came from.

Underlying type: string.

Allowed values: Inline, Policy.

RolloutPolicyRef

Used by RolloutGroup, RolloutGroupResolution, RolloutRunGroup, RolloutRunProvenance.

RolloutPolicyRef names a same-namespace RolloutPolicy that supplies a rollout group's progression. Deliberately a sibling of the inline progression one-of, not an arm of it: a ref and one inline progression may coexist, and the inline block wins — the preview/rollback mechanism.

FieldTypeDescription
name Required string

Name of the RolloutPolicy in the InferenceService's namespace.

Minimum length: 1.

progression Required RolloutProgressionKind

Progression declares the referenced policy's kind so shape-dependent admission rules evaluate without dereferencing the policy. A mismatch with the policy's actual body parks the rollout at run open (ProgressionMismatch); it cannot mis-execute.

kind string

Kind is reserved: v1 admission accepts only "RolloutPolicy"; "ClusterRolloutPolicy" is the reserved cluster-scoped twin.

Default: RolloutPolicy.

RolloutPolicySpec

Used by RolloutPolicy.

RolloutPolicySpec carries exactly one progression body, reusing the spec.rollout group progression types verbatim so a composed plan is a literal RolloutGroup fragment and run-open re-validation can run the same checks ISVC admission runs. Policy-only restrictions (percent-only capacities, providerRef-only metrics source) are admission rules on this kind, not type differences.

Validation: exactly one of canary, blueGreen, or rollingUpdate must be set.

FieldTypeDescription
canary GroupCanary

Canary is a stepped capacity+traffic progression with optional analysis gates. One-of.

blueGreen GroupBlueGreen

BlueGreen surges the full new set, then flips traffic atomically. One-of.

rollingUpdate GroupRollingUpdate

RollingUpdate replaces pods gradually within the surge/unavailable budget. One-of.

RolloutPolicyStatus

Used by RolloutPolicy.

RolloutPolicyStatus is deliberately bounded: counts and digests, never consumer name lists (a popular policy would otherwise grow status with its fleet).

FieldTypeDescription
observedGeneration int64

ObservedGeneration is the spec generation this status reflects.

portableDigest string

PortableDigest is the hash of the defaulted, canonicalized spec ("rp1:..."): equal across clusters iff the specs match, so fleet drift is one field-compare away.

attachedGroups int32

AttachedGroups counts rollout groups currently referencing this policy across the namespace.

conditions []Condition

RolloutProgressionKind

Used by RolloutPolicyRef.

RolloutProgressionKind names which progression a RolloutPolicy carries. A RolloutPolicyRef declares it so ISVC admission can validate every shape-dependent rollout rule (entrypoint, collapse, soak arity) without dereferencing the policy; a declaration the policy body contradicts parks the rollout at run open instead of mis-executing.

Underlying type: string.

Allowed values: canary, blueGreen, rollingUpdate.

RolloutRun

Used by RolloutStatus.

RolloutRun is one open rollout run: identity, targets, and the pinned plan.

FieldTypeDescription
runID string

RunID uniquely names this run (stable for its lifetime; a retarget closes the run and opens a new one with a new ID).

openedAt Time

OpenedAt is when the run was pinned.

pinnedAt Time

PinnedAt advances on every plan pin — the open, and each applied repin. It is the run state's monotonic clock: concurrent status writers keep whichever side is newer, so a reconcile working from a stale cache can never roll a pinned plan back to a predecessor (a repin is one-shot — its verb is consumed — so a rolled-back pin would be unrecoverable, unlike every self-healing status field).

targetRevisions []RolloutRunTarget

TargetRevisions records, per grouped Component, the revision hash this run is rolling toward and the stable hash it can roll back to. A Component's target changing mid-run is a retarget: the run closes (Superseded) and a fresh run opens with a fresh render.

plan RolloutRunPlan

Plan is the effective groups list, frozen for this run. Executors index it — never the live spec — while the run is open.

RolloutRunGroup

Used by RolloutRunPlan.

RolloutRunGroup is one pinned group: the resolved RolloutGroup the executors consume, plus the provenance of where its progression came from.

FieldTypeDescription
source RolloutPlanSource

Source is where this group's progression came from.

policyRef RolloutPolicyRef

PolicyRef identifies the policy when Source is Policy. On derived ISVCs (multi-cluster inflation) it is recovered from the derive-time provenance annotation so members report the same identity a locally-resolved ref would.

policyGeneration int64

PolicyGeneration is the referenced policy's generation at pin time.

portableDigest string

PortableDigest is the pinned policy body's portable digest ("rp1:..."), or — for inline groups — the digest of the inline progression body, so drift detection works for both sources.

group RolloutGroup

Group is the resolved group: components plus exactly one inline progression (a pinned group never carries a PolicyRef — the ref was resolved at pin time).

RolloutRunOutcome

Used by CandidateRolloutLastRun, RolloutRunRecord.

RolloutRunOutcome is how a closed run ended.

Underlying type: string.

Allowed values: Completed, RolledBack, Superseded.

RolloutRunPlan

Used by RolloutRun.

RolloutRunPlan is the frozen effective plan: the resolved groups in their pinned order. Group list-index identity (which keys the coordination engine's sticky state) indexes THIS list for the whole run, so mid-run group reorders in the spec cannot re-key ratio anchors or soak clocks.

FieldTypeDescription
groups []RolloutRunGroup

RolloutRunProvenance

Used by RolloutRunRecord.

RolloutRunProvenance is the provenance subset of a pinned group, kept after the run closes.

FieldTypeDescription
source RolloutPlanSource
policyRef RolloutPolicyRef
portableDigest string

RolloutRunRecord

Used by RolloutStatus.

RolloutRunRecord is the bounded record of a closed run.

FieldTypeDescription
outcome RolloutRunOutcome
openedAt Time
closedAt Time
targetRevisions []RolloutRunTarget

TargetRevisions retains each Component's target and stable revision so a rolled-back hold has an exact per-Component identity after ActiveRun is dropped.

groups []RolloutRunProvenance

Groups carries per-group provenance (groups may reference different policies, so one digest per run would be lossy).

RolloutRunTarget

Used by RolloutRun, RolloutRunRecord.

RolloutRunTarget is one grouped Component's pinned target revision.

FieldTypeDescription
component ComponentType
revision string

Revision is the Component's target revision hash at run open.

stableRevision string

StableRevision is the Component's last promoted revision hash at run open. It is preserved across retargets and is the exact rollback target.

RolloutSpec

Used by InferenceServiceSpec.

RolloutSpec is the single rollout surface for an InferenceService: a list of rollout groups. There is no coordination-vs-canary fork — canary is one progression a group may choose, and whether list order sequences the groups is GroupOrdering.

FieldTypeDescription
groups []RolloutGroup

Groups is the ORDERED list of rollout groups. Sequence is the list position: group N reaches completion before group N+1 begins. Components listed together in one group roll together (a coupled unit); Components not listed in any group roll independently (the default). To roll Components one-at-a-time, put each in its own group, in order — a group needs only its components; the progression may be omitted and defaults to blueGreen.

Cross-group sequencing is enforced only for a run of single-Component blueGreen groups (the classic one-at-a-time shape). Under the default groupOrdering: Sequential, admission rejects any other multi-group list — a rollingUpdate, canary, or multi-Component group in an ordered list would run concurrently, and an ordering the engine does not enforce is rejected rather than accepted. The rejection applies on create and on any update that changes spec.rollout, so stored objects keep reconciling until their rollout is next edited. Set groupOrdering: Concurrent to declare that the groups are independent and the list order promises nothing.

Only meaningful for OMENative-managed Components.

Maximum items: 3.

groupOrdering RolloutGroupOrdering

GroupOrdering declares what groups[] list order means. Sequential (the default) promises group N completes before group N+1 begins, and is admitted only for the shape that actually enforces it. Concurrent declares the groups independent: they roll at the same time on their disjoint Components, each with its own progression, gates, and rollback. Concurrent is what lets one InferenceService run, say, a router canary and an engine canary as unrelated rollouts.

Changing this does not change how the engine executes a list it could not sequence — that was always concurrent. It changes whether such a list is an error or a declaration of intent.

pairingProtocol string

PairingProtocol declares the engine↔decoder wire-compatibility contract for prefill-decode pairing (e.g. a KV-transfer protocol generation, such as "nixl-v2"). It is an opaque, operator-owned token compared only for equality; bump it ONLY when the engine↔decoder wire contract breaks. The value rides each engine and decoder revision: changing it mints new revisions for both Components (a rollout), stamps ome.io/pairing-protocol on their pods and per-revision Services, and is published on each traffic target so routing pairs only engine and decoder revisions whose values are equal. Empty or unset pairs with anything, so setting or clearing the token is upgrade-neutral. Changing it between two non-empty values requires engine and decoder to roll as one blueGreen or canary group.

Maximum length: 63. Pattern: ^[A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?$.

RolloutStatus

Used by InferenceServiceStatus.

RolloutStatus is the run-model surface under status.rollout: the pinned active run, a bounded record of the previous run, and the always-current per-group resolution view (what WOULD pin now — the preview surface).

FieldTypeDescription
activeRun RolloutRun

ActiveRun is the pinned plan the executors are consuming. Present iff a run is open.

lastRun RolloutRunRecord

LastRun is the bounded record of the most recently closed run (digests and outcome, never the full plan — post-close plan history is the policy's git history).

groups []RolloutGroupResolution

Groups is the always-current resolution view, written every reconcile independent of runs: per group, which source would pin now and — when an inline progression shadows a ref — what the shadowed policy would pin.

RouterSpec

Used by InferenceServiceSpec, ServingRuntimeSpec.

RouterSpec defines the configuration for the Router component, which handles request routing

FieldTypeDescription
Embedded PodSpec

PodSpec defines the container configuration for the router

The fields of PodSpec appear directly in this object.

Embedded ComponentExtensionSpec

ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc.

The fields of ComponentExtensionSpec appear directly in this object.

runner RunnerSpec

This is essentially a container spec that can override the default container

config map[string]string

Additional configuration parameters for the runner. This can include framework-specific settings.

RoutingAllFailedPolicy

Used by RoutingProbeSpec.

RoutingAllFailedPolicy controls whether a complete, conclusive probe failure may remove every route arm.

Underlying type: string.

Allowed values: PreserveTraffic, Drain.

RoutingCapacitySpec

Used by RoutingSpec.

RoutingCapacitySpec configures polling each serving home for its current servable capacity.

Validation: disabled must not be combined with capacity configuration fields.

Validation: an enabled capacity poll must specify path, method, format, period, timeout, samples, quorum, and maxAge.

Validation: period must be positive.

Validation: timeout must be positive.

Validation: timeout must be shorter than period.

Validation: maxAge must be at least period.

Validation: quorum must not exceed samples.

FieldTypeDescription
disabled bool

Disabled explicitly disables capacity polling. No other field may be set when true.

path string

Path is appended to each serving home's endpoint and must start with "/".

Minimum length: 1. Pattern: ^/.

method string

Method is the HTTP method used by the capacity request.

Allowed values: GET, HEAD, POST.

format string

Format names the response shape returned by the capacity endpoint.

Minimum length: 1.

options map[string]string

Options contains format-specific settings interpreted by the configured capacity format.

period Duration

Period is how often each serving home is polled.

timeout Duration

Timeout bounds one capacity request and must be shorter than Period.

samples int32

Samples is the number of recent readings in the capacity window.

Minimum: 1.

quorum int32

Quorum is the number of readings required to corroborate a lower capacity.

Minimum: 1.

maxAge Duration

MaxAge is the maximum accepted age of a capacity report.

RoutingProbeSpec

Used by RoutingSpec.

RoutingProbeSpec configures an active end-to-end health probe for each serving home's externally addressable endpoint.

Validation: disabled must not be combined with probe configuration fields.

Validation: an enabled probe must specify path, method, acceptStatuses, gateStatuses, period, timeout, failureThreshold, successThreshold, and allFailedPolicy.

Validation: period must be positive.

Validation: timeout must be positive.

Validation: timeout must be shorter than period.

Validation: gateStatuses must not contain 401, 403, or 429.

FieldTypeDescription
disabled bool

Disabled explicitly disables probing. No other field may be set when true.

path string

Path is appended to each serving home's endpoint and must start with "/".

Minimum length: 1. Pattern: ^/.

method string

Method is the HTTP method used by the probe.

Allowed values: GET, HEAD, POST.

acceptStatuses []int32

AcceptStatuses are response codes counted as a successful probe.

Minimum items: 1. Minimum per item: 100. Maximum per item: 599.

gateStatuses []int32

GateStatuses are response codes counted as a failed probe. A code in neither status list is inconclusive.

Minimum items: 1. Maximum items: 500. Minimum per item: 100. Maximum per item: 599.

period Duration

Period is how often each serving home is probed.

timeout Duration

Timeout bounds one probe request and must be shorter than Period.

failureThreshold int32

FailureThreshold is the number of consecutive failures required to gate a serving home.

Minimum: 1.

successThreshold int32

SuccessThreshold is the number of consecutive successes required to restore a gated serving home.

Minimum: 1.

allFailedPolicy RoutingAllFailedPolicy

AllFailedPolicy controls the result when every serving home has crossed the failure threshold.

RoutingPublisherSpec

Used by RoutingSpec.

RoutingPublisherSpec provides per-InferenceService behavior options to the single publisher selected by the operator.

FieldTypeDescription
options map[string]string

Options are interpreted and validated by the operator-selected publisher.

Maximum keys: 32.

Validation: publisher option keys must contain 1-128 characters and values must contain 1-4096 characters.

RoutingSpec

Used by InferenceServiceSpec.

RoutingSpec configures cross-cluster traffic distribution for an InferenceService. Fields that are unset inherit the operator-level routing configuration.

FieldTypeDescription
enabled bool

Enabled overrides routing for this InferenceService. Nil inherits the operator-level setting; false opts this InferenceService out. True opts in only when routing is enabled for the installation and cannot bypass a disabled installation gate.

capacityFactors map[string]Quantity

CapacityFactors overrides the per-replica relative serving capacity of named workload clusters. Every quantity must be greater than zero. A cluster absent from the map uses the identity factor 1.

probe RoutingProbeSpec

Probe overrides the operator-level endpoint health probe. The block is a complete replacement; set disabled to explicitly turn probing off.

capacity RoutingCapacitySpec

Capacity overrides the operator-level endpoint capacity poll. The block is a complete replacement; set disabled to explicitly turn polling off.

publisher RoutingPublisherSpec

Publisher supplies behavior options to the operator-selected publisher. Publisher identity, transport, and credentials remain operator-level configuration.

Runner

Used by InferenceReplicaSpec.

Runner is one logical pod role within an Instance.

Single-pod Instances declare one Runner named "default" with Size=1. Multi-node Instances declare "leader" (Size=1) + "worker" (Size>=1).

The revision hash includes every Runner's Template; a worker-only image bump still triggers a coordinated rollout across the whole Instance because tensor-parallel weights require leader+workers to move together.

FieldTypeDescription
name Required RunnerName

Name is the Runner role within the Instance.

size Required int32

Size is the pod count for this Runner per Instance. Constraints:

  • "default" Size MUST equal 1
  • "leader" Size MUST equal 1
  • "worker" Size MUST be >= 1

Minimum: 1.

template Required PodTemplateSpec

Template is the fully-rendered pod template for this Runner. Labels include ome.io/runner=<name>. The InferenceReplica controller stamps OME_RUNNER (leader|worker|default) and, for non-leader pods, OME_LEADER_ADDRESS (short-form DNS, matching LWS conventions) onto the rendered pod at create.

RunnerName

Used by Runner.

RunnerName is the enum of recognized Runner roles within an Instance. Matches the established Runner vocabulary so existing ome.io/runner label semantics carry through.

Underlying type: string.

Allowed values: default, leader, worker.

RunnerSpec

Used by DecoderSpec, EngineSpec, LeaderSpec, RouterSpec, WorkerSpec.

RunnerSpec defines container configuration plus additional config settings. The Runner is the primary container that executes the model serving or token generation logic.

FieldTypeDescription
Embedded Container

Container spec for the runner. Provides complete Kubernetes container configuration for the primary execution container.

The fields of Container appear directly in this object.

RuntimeSelectorOperator

Used by ModelFormat, ModelFrameworkSpec.

Underlying type: string.

ScaleTargetRef

Used by ComponentStatusSpec.

ScaleTargetRef is a stripped-down reference to the canonical scale target for a Component — the InferenceReplica (for OMENative) or the underlying Deployment (for RawDeployment). Published on status.components.<comp>.scaleTargetRef so an external scaler knows which object to point at (the same GroupKind the user would target with kubectl scale <kind>/<name>).

Published for every reconciled RawDeployment or OMENative Component, including when no OME-managed scaler is active.

Alpha. The shape may change without notice.

FieldTypeDescription
apiVersion string

APIVersion of the scale target — e.g. "ome.io/v1beta1" for the IR-managed OMENative path; "apps/v1" for RawDeployment.

kind string

Kind of the scale target — e.g. "InferenceReplica" for the IR-managed OMENative path; "Deployment" for RawDeployment.

name string

Name of the scale target. Namespace is always the same as the owning ISVC.

ScalingMode

Used by ScalingPolicy.

ScalingMode declares how Components of an InferenceService scale relative to each other. Alpha. The API may change without notice.

Underlying type: string.

Allowed values: Independent, Proportional, Pinned.

ScalingPolicy

Used by InferenceServiceSpec, ServingRuntimeSpec.

ScalingPolicy defines coordination between the Components of an InferenceService. Alpha. The API may change without notice.

FieldTypeDescription
mode ScalingMode

Mode selects the coordination strategy.

Allowed values: Independent, Proportional, Pinned.

Default: Independent.

proportional ProportionalPolicy

Proportional configuration; required when Mode == "Proportional".

ServiceMetadata

Used by BenchmarkJobSpec.

ServiceMetadata contains metadata fields for recording the backend model server's configuration and version details. This information helps track experiment context, enabling users to filter and query experiments based on server properties.

FieldTypeDescription
engine Required string

Engine specifies the backend model server engine. Supported values: "vLLM", "SGLang", "TGI".

Allowed values: vLLM, SGLang, TGI.

version Required string

Version specifies the version of the model server (e.g., "0.5.3").

gpuType Required string

GpuType specifies the type of GPU used by the model server. Supported values: "H100", "A100", "MI300", "A10".

Allowed values: H100, A100, MI300, A10.

gpuCount Required int

GpuCount indicates the number of GPU cards available on the model server.

ServingRuntimePodSpec

Used by ServingRuntimeSpec.

FieldTypeDescription
containers []Container

List of containers belonging to the pod. Containers cannot currently be added or removed. Cannot be updated.

volumes []Volume

List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes

nodeSelector map[string]string

NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

affinity Affinity

If specified, the pod's scheduling constraints

tolerations []Toleration

If specified, the pod's tolerations.

labels map[string]string

Labels that will be added to the pod. More info: http://kubernetes.io/docs/user-guide/labels

annotations map[string]string

Annotations that will be added to the pod. More info: http://kubernetes.io/docs/user-guide/annotations

imagePullSecrets []LocalObjectReference

ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod

schedulerName string

If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.

hostIPC bool

Use the host's ipc namespace. Optional: Default to false.

dnsPolicy DNSPolicy

Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.

hostNetwork bool

Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.

ServingRuntimeRef

Used by InferenceReplicaSpec, InferenceServiceSpec.

FieldTypeDescription
name Required string

Name of the runtime being referenced. Identifies the specific runtime environment to be used for model execution.

kind string

Kind of the runtime being referenced. Specifies the Kubernetes resource kind of the referenced runtime. ClusterServingRuntime is a cluster-wide runtime, while ServingRuntime is namespace-scoped.

Default: ClusterServingRuntime.

apiGroup string

APIGroup of the resource being referenced. Specifies the Kubernetes API group of the referenced runtime.

Default: ome.io.

autoSync bool

AutoSync (default true) re-renders pod specs from the live runtime every reconcile. When false, the ISVC pins to a ControllerRevision snapshot; bump ome.io/runtime-sync or set spec.runtime.revision to roll forward.

Default: true.

revision string

Revision pins to a named ControllerRevision in the OME namespace. Enables rollback; ignored when AutoSync is true.

ServingRuntimeSpec

Used by ClusterServingRuntime, ServingRuntime.

ServingRuntimeSpec defines the desired state of ServingRuntime.

FieldTypeDescription
supportedModelFormats []SupportedModelFormat

Model formats and version supported by this runtime

modelSizeRange ModelSizeRangeSpec

ModelSizeRange is the range of model sizes supported by this runtime

disabled bool

Set to true to disable use of this runtime

routerConfig RouterSpec

Router configuration for this runtime

engineConfig EngineSpec

Engine configuration for this runtime

decoderConfig DecoderSpec

Decoder configuration for this runtime

protocolVersions []InferenceServiceProtocol

ProtocolVersions lists the inference protocols the runtime serves: openAI, openInference-v1 or openInference-v2. Runtime selection doesn't read it.

Embedded ServingRuntimePodSpec

PodSpec for the serving runtime

The fields of ServingRuntimePodSpec appear directly in this object.

scalingPolicy ScalingPolicy

Since v1.3. ScalingPolicy default for InferenceServices binding this runtime. Replaced wholesale by isvc.spec.scalingPolicy when set on the ISVC. Alpha. The API may change without notice.

acceleratorRequirements AcceleratorRequirements

AcceleratorRequirements specifies the accelerator requirements for this runtime

ServingRuntimeStatus

Used by ClusterServingRuntime, ServingRuntime.

ServingRuntimeStatus defines the observed state of ServingRuntime

FieldTypeDescription
inheritanceChain []string

Since v1.3. InheritanceChain lists the runtime names walked when resolving the ome.io/inherit-from chain, in root-first order. Single-entry list ([self]) when no inheritance is declared. Operator-visible only — consumers re-walk the chain in-memory at use time rather than reading a pre-computed spec from status (avoids storing the fully-merged spec, which is large).

conditions []Condition

Since v1.3. Conditions reflect the runtime controller's view of inheritance resolution. Currently only InheritanceReady (True/False) is surfaced. Informational — consumers can block on InheritanceReady=False if they want to gate on chain health.

ShadowedAutoscalerPolicy

Used by ComponentAutoscalerStatus.

ShadowedAutoscalerPolicy reports a policy ref that is currently shadowed by an inline autoscaler block (inline outranks policy). The shadow render is the in-cluster preview surface: it shows what the policy would produce without changing behavior.

FieldTypeDescription
name string

Name of the shadowed AutoscalerPolicy.

portableDigest string
wouldRenderDigest string

WouldRenderDigest is the resolved digest the policy would produce for this component if the inline block were removed.

ShadowedRolloutPolicyRef

Used by RolloutGroupResolution.

ShadowedRolloutPolicyRef reports what an outranked policy ref would pin.

FieldTypeDescription
name string
wouldPinDigest string

WouldPinDigest is the portable digest of the policy body that a run would pin if the inline progression were removed.

SplitSpec

Used by PlacementSpec.

SplitSpec declares the fleet floor and optional local ceiling. The floor falls back only to an explicitly declared positive engine.minReplicas.

FieldTypeDescription
replicas int32

Replicas is the fleet-wide desired replica count to distribute across homes. Unset falls back to the engine component's minReplicas (the guaranteed floor) — the count OME actually guarantees running and thus the one worth spreading. maxReplicas is deliberately NOT used (it is an autoscaling ceiling that stays a per-home local concern).

Minimum: 1.

maxReplicasPerCluster int32

MaxReplicasPerCluster is an optional local ceiling. Plans exceeding it are held; zero follows the assigned allocation without an extra ceiling.

Minimum: 0.

StorageSpec

Used by BaseModelSpec, BenchmarkJobSpec, FineTunedWeightSpec.

FieldTypeDescription
path string

Path is the absolute path where the model will be downloaded and stored on the node.

schemaPath string

SchemaPath is the path to the model schema or configuration file within the storage system. This can be used to validate the model or customize how it's loaded.

parameters map[string]string

Parameters contain key-value pairs to override default storage credentials or configuration. These values are typically used to configure access to object storage or mount options.

key string

Key is the name of a Secret that holds a Hugging Face token. The model agent reads it only for hf:// models, from the model's namespace, or from the ome namespace for a ClusterBaseModel. It takes the token from the Secret's token key, or from the key that parameters.secretKey names.

storageUri Required string

StorageUri specifies the source URI of the model in a supported storage backend. Supported formats:

  • OCI Object Storage: oci://n/{namespace}/b/{bucket}/o/{object_path}
  • CNCF ModelPack: modelpack://{registry}/{repository}[:{tag}]
  • Persistent Volume: pvc://{pvc-name}/{sub-path}
  • Vendor-specific: vendor://{vendor-name}/{resource-type}/{resource-path}
  • Hugging Face: hf://{org}/{repo}[@{revision}]
  • Amazon S3: s3://{bucket}/{object_path}
  • Azure Blob Storage: az://{account}/{container}/{object_path}
  • Google Cloud Storage: gs://{bucket}/{object_path}
  • GitHub: github://{org}/{repo}[@{tag}]
  • Local filesystem: local://{path}
nodeSelector map[string]string

NodeSelector defines a set of key-value label pairs that must be present on a node for the model to be scheduled and downloaded onto that node.

nodeAffinity NodeAffinity

NodeAffinity describes the node affinity rules that further constrain which nodes are eligible to download and store this model, based on advanced scheduling policies.

downloadPolicy DownloadPolicy

DownloadPolicy describes the policy of downloading model artifacts. Supported policies:

  • AlwaysDownload, the default: always download a copy of the model to its path.
  • ReuseIfExists: reuse Hugging Face files that another model already downloaded to the node.

SupportedModelFormat

Used by ServingRuntimeSpec.

FieldTypeDescription
name string

Name of the model format this entry describes; matched against the model's format name during runtime selection. ModelFormat.Name is the preferred field for new runtimes.

modelFormat Required ModelFormat

ModelFormat of the model, e.g., "PyTorch", "TensorFlow", "ONNX", "SafeTensors"

modelType string

Deprecated: not consulted during runtime selection.

version string

Version of the model format. Runtime selection doesn't read it: to match on a version, set modelFormat.version. It can be "major", "major.minor" or "major.minor.patch".

modelFramework Required ModelFrameworkSpec

ModelFramework of the model, e.g., "PyTorch", "TensorFlow", "ONNX", "Transformers"

modelArchitecture string

ModelArchitecture of the model, e.g., "LlamaForCausalLM", "GemmaForCausalLM", "MixtralForCausalLM"

quantization ModelQuantization

Quantization of the model, e.g., "fp8", "fbgemm_fp8", "int4"

diffusionPipeline DiffusionPipelineSpec

DiffusionPipeline supported by this runtime (used for diffusion models).

modelCacheProviders []ModelCacheProvider

Since v1.3. ModelCacheProviders lists the external model caches this runtime can load a Sharded model from. Sharded distribution is in development: OME can't serve a Sharded model yet, so this list has no effect.

autoSelect bool

Set to true to allow the ServingRuntime to be used for automatic model placement if this model format is specified with no explicit runtime.

priority int32

Priority of this serving runtime for auto selection. This is used to select the serving runtime if more than one serving runtime supports the same model format. The value should be greater than zero. The higher the value, the higher the priority. Priority is not considered if AutoSelect is either false or not specified. Priority can be overridden by specifying the runtime in the InferenceService.

Minimum: 1.

acceleratorConfig map[string]AcceleratorModelConfig

AcceleratorConfig provides accelerator-specific overrides for this model format

TensorParallelismConfig

Used by AcceleratorModelConfig.

TensorParallelismConfig specifies tensor parallelism settings

FieldTypeDescription
tensorParallelSize int64

tensorParallelSize specifies the size of the tensor parallelism

Minimum: 0.

pipelineParallelSize int64

pipelineParallelSize specifies the size of the pipeline parallelism

Minimum: 0.

dataParallelSize int64

dataParallelSize specifies the size of the data parallelism

Minimum: 0.

TopologySpreadPolicy

Used by DecoderSpec, EngineSpec, InferenceReplicaSpec.

TopologySpreadPolicy selects how a component's instances spread across fault domains, expressed through a rendered topologySpreadConstraint on each instance's anchor pod.

Underlying type: string.

TrafficMapCapacity

Used by TrafficMapEntry.

TrafficMapCapacity records why an entry's weight is what it is.

FieldTypeDescription
allocated int32

Allocated is the effective allocation ceiling for this home: the control-plane-admitted count, optionally lowered by a capacity report. Ready independently caps it when computing Weight.

ready int32

Ready is the home's live ready-replica count. It caps Allocated when computing Weight; zero health-gates the entry to weight 0.

factor Quantity

Factor is the per-replica relative serving capacity of this home's accelerator (baseline "1", higher = faster), so heterogeneous hardware is weighted by capacity rather than raw replica count: weight is proportional to min(allocated, ready) * factor. Defaults to "1" (homogeneous) when unset — the multiplicative identity, i.e. no scaling. It is operator-supplied config, never derived from raw hardware FLOPS.

source CapacitySource

Source names which input produced Allocated. FallbackReason separately distinguishes an intentionally control-plane-only allocation from a configured endpoint source that could not supply a usable ceiling.

Default: ControlPlane.

reported int32

Reported is the home's own servable-capacity figure, recorded whenever the endpoint source answered — including when it was at or above the plan and therefore did not lower Allocated. Keeping it visible in that case is what makes the ceiling auditable: Allocated alone cannot show that a report was received and found non-binding.

Minimum: 0.

fallbackReason string

FallbackReason explains why a configured endpoint capacity source did not produce an applied ceiling and the control-plane allocation was retained. Empty means capacity polling is disabled or its latest result was usable.

TrafficMapEntry

Used by TrafficMapSpec.

TrafficMapEntry is one serving home's routing target and the provenance of its weight.

FieldTypeDescription
cluster Required string

Cluster is the WorkloadCluster serving this home.

endpoint URL

Endpoint is the home's externally-addressable URL, taken from status.placement.candidates[].endpoint.

weight int32

Weight is the home's final, normalized, capacity-planned, health-gated traffic share as a relative integer from 0 through 1,000,000. The upper bound matches the Gateway API backendRef weight limit, so a publisher can apply it verbatim; another consumer may divide by the sum of weights for a percentage. Unready and zero-capacity homes always have weight 0. When every probe conclusively fails, PreserveTraffic may retain capacity-derived weights for ready homes; Drain writes an authoritative all-zero table. Manual DrainRefs can force any arm to zero after these automatic inputs.

Minimum: 0. Maximum: 1000000.

healthy bool

Healthy is the readiness-plus-probe result for this home. An unready home is always weighted 0; a probe-unhealthy home may retain a positive weight only under a fleet-wide PreserveTraffic fallback. A manual DrainRefs override can set a healthy home to zero without changing its health evidence.

capacity TrafficMapCapacity

Capacity is the provenance of Weight: weight is proportional to min(allocated, ready) * factor, then gated by the active probe.

probe TrafficMapProbe

Probe is the active end-to-end health probe's contribution to Healthy, present only when probing is configured. Healthy alone does not say whether readiness or reachability failed, and those are different faults with different owners: readiness is the workload's, reachability is the path's (ingress, DNS, certificate, route).

drainRefs []string

DrainRefs names the independent override IDs in the source InferenceService's ome.io/traffic-drain annotation that force this entry's weight to zero. Empty means no manual override contributed.

TrafficMapGatewayRef

Used by TrafficMapStatus.

TrafficMapGatewayRef points at the data plane object a publisher created to realize a TrafficMap.

FieldTypeDescription
group string

Group is the API group of the realizing object (e.g. "gateway.networking.k8s.io"). Empty means the core group.

kind string

Kind is the object kind (e.g. "HTTPRoute").

name string

Name is the object name.

namespace string

Namespace is the object namespace. Empty means the TrafficMap's namespace.

TrafficMapProbe

Used by TrafficMapEntry.

TrafficMapProbe records what the active end-to-end probe observed for one home. The probe targets the entry's Endpoint — the URL a client uses — so it covers the whole serving path rather than pod readiness inside the home.

FieldTypeDescription
policyDigest string

PolicyDigest identifies the effective probe policy that produced this observation. A controller may restore hysteresis state after a restart only when this digest and the entry identity still match.

Pattern: ^sha256:[0-9a-f]{64}$.

result ProbeResult

Result is the most recent probe attempt's verdict. Failing gates only after the configured threshold. Unknown does not change the previous gate.

gated bool

Gated is the current hysteresis gate. It remains true through an Unknown attempt until enough consecutive passing attempts reopen the home.

lastProbeTime Time

LastProbeTime is when the latest probe attempt completed, so a stalled prober is visible rather than being read as a steady pass.

consecutiveFailures int32

ConsecutiveFailures counts unbroken Failing verdicts. The weight is gated only once this reaches the configured failure threshold: a single dropped packet must not move a large traffic share, and the reprogramming churn from flapping would itself be the outage.

Minimum: 0.

message string

Message explains the current Result — the observed status code, the transport error, or why the probe could not run.

TrafficMapPublisherLastPositive

Used by TrafficMapPublisherStatus.

TrafficMapPublisherLastPositive is a complete post-transform publisher plan retained for restart-safe replay.

FieldTypeDescription
trafficMapGeneration int64

TrafficMapGeneration is the generation whose positive plan was applied.

Minimum: 1.

observedISVCGeneration int64

ObservedISVCGeneration is the source generation that produced the plan.

Minimum: 1.

planCompatibilityDigest string

PlanCompatibilityDigest identifies the effective publisher options that affect target identity or weights.

Pattern: ^sha256:[0-9a-f]{64}$.

targets []TrafficMapPublisherTarget

Targets is the complete canonical target-to-weight plan. Every claimed target appears exactly once, including inactive targets at weight zero.

Minimum items: 1. Maximum items: 128.

TrafficMapPublisherStatus

Used by TrafficMapStatus.

TrafficMapPublisherStatus is the durable cleanup and replay journal for one publisher. Claims are persisted before external mutation and retained until their targets have been cleaned up.

FieldTypeDescription
publisherName string

PublisherName identifies the publisher implementation whose cleanup semantics apply. An implementation upgraded under the same name must remain able to clean target identifiers written by its prior versions.

Minimum length: 1. Maximum length: 128.

claimedTargets []string

ClaimedTargets are publisher-defined canonical identifiers owned by this map. The publisher records the complete claim set before mutating any target. Identifiers are status-visible and must not contain credentials or secrets.

Minimum items: 1. Maximum items: 128. Minimum length per item: 1. Maximum length per item: 512.

observedOptionsDigest string

ObservedOptionsDigest is the SHA-256 digest of the effective safe publisher options used by the most recent successful reconciliation. It is absent before the first successful reconciliation and does not determine target ownership.

Pattern: ^sha256:[0-9a-f]{64}$.

lastPositive TrafficMapPublisherLastPositive

LastPositive is the latest complete positive publisher plan that was fully applied. It is absent when no compatible plan is available for replay.

TrafficMapPublisherTarget

Used by TrafficMapPublisherLastPositive.

TrafficMapPublisherTarget is one canonical target and its exact applied integer weight in a retained publisher plan.

FieldTypeDescription
target string

Target is a publisher-defined canonical identifier already covered by the enclosing publisher claim journal.

Minimum length: 1. Maximum length: 512.

weight int64

Weight is the exact non-negative integer applied by the publisher. Publisher-specific bounds are validated before replay.

Minimum: 0.

TrafficMapSpec

Used by TrafficMap.

TrafficMapSpec is the computed routing table. It is a machine-written declarative artifact — the routing controller recomputes it whenever status.placement or the home's quota allocation changes; the publisher consumes it as desired state. A validating webhook may reject writes from non-controller users.

FieldTypeDescription
placementPlanID string

PlacementPlanID identifies the accepted allocation behind this routing table. Publication must acknowledge this plan before a placement drains.

service Required string

Service is the routed logical service — the InferenceService name. Equal to metadata.name in v1; a distinct field leaves room for a future many-ISVC-to-one-service map.

mode PlacementMode

Mode mirrors the ISVC's spec.placement.mode (Single/All/Split) so a consumer can read the routing intent without reading the ISVC.

entries []TrafficMapEntry

Entries is the routing table: one entry per serving home, each with its endpoint, final apply-verbatim weight, and the capacity/health provenance of that weight. Consumers apply the weights directly — no gating, fallback, or normalization is left for them to redo.

observedISVCGeneration int64

ObservedISVCGeneration is the InferenceService generation this table was computed from, so a consumer can detect staleness relative to the source.

TrafficMapStatus

Used by TrafficMap.

TrafficMapStatus reports whether the active publisher has realized this map onto a concrete data plane, and whether the map has anything to realize. Two writers share it: the publisher owns Published, GatewayRef, ObservedTrafficMapGeneration, Publisher, and the Published and PublicationFallback conditions; the routing controller owns SourceUID plus the Routable, CapacityFallback, and OverrideActive conditions. Conditions is keyed on type, so each writer must patch only its own fields and conditions.

FieldTypeDescription
sourceUID UID

SourceUID is the UID of the InferenceService that generated this map. The routing controller writes it through its own status field manager before a publisher may create external effects. It remains available if orphan deletion propagation removes the owner reference.

published bool

Published reports whether the active publisher has realized this map onto its data plane.

gatewayRef TrafficMapGatewayRef

GatewayRef identifies the data plane object realizing this map (e.g. the HTTPRoute the Gateway API publisher created). Empty until published.

observedTrafficMapGeneration int64

ObservedTrafficMapGeneration is the spec generation the publisher last realized, so lag between generation and realization is observable.

publisher TrafficMapPublisherStatus

Publisher records the durable target claims and optional replay state needed to recover or reverse data-plane mutations made while realizing this map.

conditions []Condition

Conditions carry the routing controller's Routable, CapacityFallback, and OverrideActive conditions and the publisher's Published and PublicationFallback conditions.

TrafficSpec

Used by InferenceServiceSpec.

TrafficSpec configures the load-balancing policy applied to all HTTPRoutes OME emits for the InferenceService. The translated backend policy resource (e.g. Envoy Gateway BackendTrafficPolicy) targets every OME-managed HTTPRoute via targetRefs, so behavior is consistent whether clients address the top-level URL or a per-Component subdomain.

For less-common settings (circuit breaker, retries, sub-second timeouts), see the ome.io/* annotation contract on the InferenceService metadata.

For Component-specific routing (one Component needs a different LB algorithm), hand-author a separate BackendTrafficPolicy targeting only that Component's HTTPRoute — OME defers to the hand-authored policy.

FieldTypeDescription
algorithm LoadBalancingType

Algorithm selects the load-balancing algorithm. Absent = the Gateway implementation's default (LeastRequest for Envoy Gateway).

Allowed values: RoundRobin, LeastRequest, Random, ConsistentHash.

consistentHash ConsistentHashSpec

ConsistentHash configures the hash key. Required when Algorithm=ConsistentHash; rejected otherwise (webhook).

endpointOverride EndpointOverrideSpec

EndpointOverride routes requests to a specific pod when a request header (e.g. "X-Endpoint-HostPort: 10.0.0.5:30000") is present and the endpoint is healthy; falls back to the configured Algorithm when the endpoint is unhealthy or the header is absent.

Envoy Gateway only in alpha (no Istio equivalent). Translators that do not support endpoint override surface this as an UnsupportedField condition on the InferenceService.

TrafficStatus

Used by InferenceServiceStatus.

TrafficStatus reflects the resolved backend traffic policy and the emitted policy resource (e.g. Envoy Gateway BackendTrafficPolicy) for an InferenceService. Lives at InferenceServiceStatus.Traffic. Populated only when traffic intent is declared via spec.traffic or any ome.io/* traffic annotation; otherwise nil so older clients see nothing.

FieldTypeDescription
algorithm string

Algorithm reflects the resolved load-balancing algorithm. One of RoundRobin | LeastRequest | Random | ConsistentHash | Default. "Default" means no Algorithm was set on spec.traffic and the Gateway implementation default applies.

backendPolicyResource BackendPolicyRef

BackendPolicyResource references the OME-emitted backend policy (typically a gateway.envoyproxy.io/v1alpha1.BackendTrafficPolicy). Empty when no policy was emitted (e.g. translator deferred to a conflicting hand-authored policy).

targetedHTTPRoutes []string

TargetedHTTPRoutes lists the HTTPRoute names the emitted policy targets. Operators read this to understand which routes the policy applies to without inspecting the emitted resource. Empty when no policy was emitted.

conditions []Condition

Conditions surface translation, conflict, and gateway-acceptance state. The well-known condition type is BackendPolicyReady.

TransitionStatus

Used by ModelStatus.

TransitionStatus enum

Underlying type: string.

Allowed values: "", UpToDate, InProgress, BlockedByFailedLoad, InvalidSpec.

UpdateStrategy

Used by LifecycleSpec.

UpdateStrategy controls how OMENative rolls template changes across an Instance's pods.

FieldTypeDescription
type UpdateStrategyType

Type selects the rollout mechanism. Unset inherits the ServingRuntime's value, then the cluster default from the inferenceservice-config ConfigMap, then SurgeThenDrain, which preserves serving capacity throughout the rollout.

rollingUpdate RollingUpdate

RollingUpdate paces the rollout across Instances of the Component.

inPlaceUpdateStrategy InPlaceUpdateStrategy

InPlaceUpdateStrategy tunes the per-pod in-place update sequence. Ignored when Type is RecreatePod.

UpdateStrategyType

Used by UpdateStrategy.

UpdateStrategyType selects the rollout mechanism.

Underlying type: string.

Allowed values: SurgeThenDrain, RecreatePod, InPlaceIfPossible, InPlaceOnly.

WorkerSpec

Used by DecoderSpec, EngineSpec.

WorkerSpec defines the configuration for worker nodes in a multi-node component. Worker nodes perform the distributed processing tasks assigned by the leader node, enabling horizontal scaling for compute-intensive workloads.

FieldTypeDescription
Embedded PodSpec

PodSpec for the worker. Allows customization of the Kubernetes Pod configuration specifically for worker nodes.

The fields of PodSpec appear directly in this object.

size int

Size of the worker, this is the number of pods in the worker. Controls how many worker pod instances will be deployed for horizontal scaling. Unset inherits the ServingRuntime's value; when neither sets it, a declared leader gets one worker.

runner RunnerSpec

Runner container override for customizing the main container. This is essentially a container spec that can override the default container. Provides fine-grained control over the container that executes the worker node's processing logic.

WorkloadClusterSpec

Used by WorkloadCluster.

FieldTypeDescription
clusterSource Required ClusterConnectionSource

ClusterSource is how the control plane connects to this cluster.

WorkloadClusterStatus

Used by WorkloadCluster.

FieldTypeDescription
conditions []Condition

Conditions report connection health ONLY (the Ready condition). Never capacity, never Kueue/quota state.