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
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
AcceleratorClassSpec |
The desired state of the |
status |
AcceleratorClassStatus |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
AcceleratorQuotaSpec |
The desired state of the |
status |
AcceleratorQuotaStatus |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
AutoscalerPolicySpec |
The desired state of the |
status |
AutoscalerPolicyStatus |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
BaseModelSpec |
The desired state of the |
status |
ModelStatusSpec |
The observed state of the |
BenchmarkJob¶
BenchmarkJob runs genai-bench against an InferenceService or a URL and stores the results in the output location you choose.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
BenchmarkJobSpec |
The desired state of the |
status |
BenchmarkJobStatus |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
BaseModelSpec |
The desired state of the |
status |
ModelStatusSpec |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
ServingRuntimeSpec |
The desired state of the |
status |
ServingRuntimeStatus |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
FineTunedWeightSpec |
The desired state of the |
status |
ModelStatusSpec |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
InferenceReplicaSpec |
The desired state of the |
status |
InferenceReplicaStatus |
The observed state of the |
InferenceService¶
InferenceService ties a model to a serving runtime and declares the engine, decoder and router components that OME turns into workloads.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
InferenceServiceSpec |
The desired state of the |
status |
InferenceServiceStatus |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
RolloutPolicySpec |
The desired state of the |
status |
RolloutPolicyStatus |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
ServingRuntimeSpec |
The desired state of the |
status |
ServingRuntimeStatus |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
TrafficMapSpec |
The desired state of the |
status |
TrafficMapStatus |
The observed state of the |
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.
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
|
kind Required |
string |
|
metadata |
ObjectMeta |
Standard object metadata, such as |
spec |
WorkloadClusterSpec |
The desired state of the |
status |
WorkloadClusterStatus |
The observed state of the |
Removed in v1.3¶
v1.3 removes these fields. Each item says what to use instead.
spec.kedaConfigon an InferenceService, andkedaConfigon a component. Useautoscaleron each component, withclass: KEDAand aprometheustrigger inkeda.triggers.scaleMetricon a component. Useautoscaler.hpa.metrics[0].resource.name, withclass: HPAinautoscaler.scaleTargeton a component. Useautoscaler.hpa.metrics[0].resource.target.averageUtilization.spec.workerson a ServingRuntime or ClusterServingRuntime. Usespec.engineConfig.leaderandspec.engineConfig.worker, or the same fields onspec.decoderConfig.status.components.<component>.latestCreatedRevisionon an InferenceService. Nothing replaces it. OMENative components reportlatestReadyRevisionandlatestRolledoutRevision.
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
cluster Required |
string |
Cluster is the WorkloadCluster's name. Maximum length: |
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
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
kueueResourceFlavor |
string |
KueueResourceFlavor name to sync with |
volcanoGPUType |
string |
VolcanoGPUType for Volcano integration |
AcceleratorLatency¶
Used by AcceleratorPerformance.
| Field | Type | Description |
|---|---|---|
averageMillis |
int64 |
Average latency in milliseconds |
maximumMillis |
int64 |
Maximum latency in milliseconds |
AcceleratorModelConfig¶
AcceleratorModelConfig provides accelerator-specific overrides for this model format
| Field | Type | Description |
|---|---|---|
minMemoryPerBillionParams |
int64 |
MinMemoryPerBillionParams specifies memory required per billion parameters. OME doesn't read it. Minimum: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name is the parent AcceleratorQuota's metadata.name. Maximum length: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
AcceleratorQuotaStatus¶
Used by AcceleratorQuota.
AcceleratorQuotaStatus is the observed state of one node. The quota controller owning the plane is its sole writer.
| Field | Type | Description |
|---|---|---|
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
| Field | Type | Description |
|---|---|---|
acceleratorClasses |
[]string |
AcceleratorClasses lists the names of AcceleratorClasses this runtime supports |
minMemory |
int64 |
MinMemory specifies minimum GPU memory required in GB Minimum: |
minComputePerformanceTFLOPS |
int64 |
MinComputePerformanceTFLOPS specifies minimum compute capability in TFLOPS Minimum: |
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.
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name of the resource (e.g., nvidia.com/gpu) |
quantity |
Quantity |
Quantity per accelerator Default: |
divisible |
bool |
Divisible indicates if the resource can be subdivided |
AcceleratorSelection¶
Used by ComponentStatusSpec.
AcceleratorSelection shows what accelerator was selected and why
| Field | Type | Description |
|---|---|---|
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
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name of an AutoscalerPolicy in the InferenceService's namespace. Minimum length: |
kind |
string |
Kind of the referenced policy. "ClusterAutoscalerPolicy" is a reserved shape: admission rejects it until the cluster-scoped twin ships. Allowed values: Default: |
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.
| Field | Type | Description |
|---|---|---|
enforcement |
PolicyEnforcement |
Enforcement tier. v1 admits only "Default"; "Required" is a reserved shape rejected at admission. Allowed values: 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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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
| Field | Type | Description |
|---|---|---|
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 |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
state |
string |
State represents the current state of the benchmark job: "Pending", "Running", "Completed", "Failed". Allowed values: |
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.
| Field | Type | Description |
|---|---|---|
reason |
CanaryFailureReason |
Reason names the gate that gave up. Allowed values: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
capacity |
PlacementCapacitySample |
Capacity is the accepted hardware sample, when capacity determines weight. |
originalReplicas |
int32 |
Minimum: |
currentReplicas |
int32 |
Minimum: |
desiredReplicas |
int32 |
Minimum: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
resolvedDigest |
string |
|
ready |
bool |
CandidatePlacement¶
Used by PlacementStatus.
CandidatePlacement is the per-cluster state of a fan-out candidate.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
name |
string |
|
portableDigest |
string |
CandidateRolloutGroup¶
Used by CandidateRolloutStatus.
CandidateRolloutGroup is one pinned group's provenance as observed on a home.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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).
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
matchExpressions |
[]ClusterSelectorRequirement |
MatchExpressions selects the WorkloadCluster's actual labels. Maximum items: |
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: |
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.
| Field | Type | Description |
|---|---|---|
kubeConfig |
KubeConfigSource |
|
clusterProfileRef |
ClusterProfileRef |
ClusterProfileRef¶
Used by ClusterConnectionSource.
ClusterProfileRef references a SIG-Multicluster cluster-inventory-api ClusterProfile. The reference is recorded but not resolved.
| Field | Type | Description |
|---|---|---|
name Required |
string |
ClusterSelectorRequirement¶
Used by ClusterAffinityTerm.
ClusterSelectorRequirement tests one label or supported object field.
| Field | Type | Description |
|---|---|---|
key Required |
string |
Key is a label key, or metadata.name for a field requirement. Minimum length: |
operator Required |
NodeSelectorOperator |
Operator follows Kubernetes node-selector semantics for labels. Allowed values: |
values |
[]string |
Values is nonempty for In/NotIn, empty for Exists/DoesNotExist, and a single integer for Gt/Lt. Maximum items: |
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.
| Field | Type | Description |
|---|---|---|
component |
ComponentType |
Allowed values: |
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: |
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.
| Field | Type | Description |
|---|---|---|
class Required |
AutoscalerClass |
Class selects the autoscaler implementation. Allowed values: |
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.
| Field | Type | Description |
|---|---|---|
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.
Allowed values: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
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: |
ComponentExtensionSpec¶
Used by DecoderSpec, EngineSpec, RouterSpec.
ComponentExtensionSpec defines the deployment configuration for a given InferenceService component
| Field | Type | Description |
|---|---|---|
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
| Field | Type | Description |
|---|---|---|
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: |
latestReadyRevision |
string |
LatestReadyRevision is the per-revision Service name
( |
latestRolledoutRevision |
string |
Since v1.3.
LatestRolledoutRevision is the per-revision Service name
( |
previousRolledoutRevision |
string |
Since v1.3.
PreviousRolledoutRevision is the per-revision Service name
( |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
type Required |
HashType |
Type selects the hash source. Allowed values: |
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.
| Field | Type | Description |
|---|---|---|
| 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 |
| 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 |
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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
url Required |
string |
URL represents the endpoint URL for the inference service. Pattern: |
apiFormat Required |
string |
APIFormat specifies the type of API, such as "openai" or "oci-cohere". Allowed values: |
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.
| Field | Type | Description |
|---|---|---|
type Required |
EndpointOverrideType |
Type selects where to read the endpoint override from. Allowed values: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
| 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 |
| 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 |
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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
replicas Required |
ReplicaValueSource |
Replicas is the fallback replica count. |
FineTunedWeightSpec¶
Used by FineTunedWeight.
FineTunedWeightSpec defines the desired state of FineTunedWeight
| Field | Type | Description |
|---|---|---|
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 |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name is the cookie name. Minimum length: |
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: |
HashHeader¶
Used by ConsistentHashSpec, EndpointOverrideSpec.
HashHeader names a single request header to include in the consistent-hash input.
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name is the header name (case-insensitive per HTTP). Minimum length: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
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: |
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: |
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: |
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.
Allowed values: |
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: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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 — Valid values:
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: |
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: |
InferenceServiceStatus¶
Used by InferenceService.
InferenceServiceStatus defines the observed state of InferenceService
| Field | Type | Description |
|---|---|---|
| Embedded | Status |
Conditions for the InferenceService:
The fields of |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
members |
string |
Members is the index set of every Instance that has a row. Minimum length: |
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: |
phases |
[]InstanceStatusPhaseGroup |
Phases groups Instances by lifecycle phase. Every member appears in exactly one group; there is no default phase. Minimum items: |
runningRevisions |
[]InstanceStatusRevisionGroup |
RunningRevisions groups Instances by nonempty running revision. A member absent from every group has an empty running revision. Minimum items: |
targetRevisions |
[]InstanceStatusRevisionGroup |
TargetRevisions groups Instances by nonempty target revision. A member absent from every group has an empty target revision. Minimum items: |
incarnations |
[]InstanceStatusIncarnationGroup |
Incarnations groups Instances by nonzero incarnation. A member absent from every group has incarnation 0. Minimum items: |
podCounts |
[]InstanceStatusCountGroup |
PodCounts groups Instances by positive podCount. A member absent from every group has podCount 0. Minimum items: |
servingPodCounts |
[]InstanceStatusCountGroup |
ServingPodCounts groups Instances by positive servingPodCount. A member absent from every group has servingPodCount 0. Minimum items: |
availablePodCounts |
[]InstanceStatusCountGroup |
AvailablePodCounts groups Instances by positive availablePodCount. A member absent from every group has availablePodCount 0. Minimum items: |
admitted |
string |
Admitted is the index set of Instances whose admitted is true. Absent means no Instance is admitted. Minimum length: |
activeOrdinalOne |
string |
ActiveOrdinalOne is the index set of Instances whose activeOrdinal is 1. Absent means every activeOrdinal is 0. Minimum length: |
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: |
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.
| Field | Type | Description |
|---|---|---|
value |
int32 |
Value is the shared positive count. Minimum: |
indexes |
string |
Indexes is the canonical index set of the Instances with this value. Minimum length: |
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.
| Field | Type | Description |
|---|---|---|
index |
int32 |
Index is the Instance this entry belongs to; it is a member. Minimum: |
conditions |
[]Condition |
Conditions is the Instance's conditions. Minimum items: |
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: |
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.
| Field | Type | Description |
|---|---|---|
value |
int64 |
Value is the shared nonzero incarnation. |
indexes |
string |
Indexes is the canonical index set of the Instances with this value. Minimum length: |
InstanceStatusPhaseGroup¶
Used by InstanceStatusColumns.
InstanceStatusPhaseGroup is one phase and the Instances that carry it.
| Field | Type | Description |
|---|---|---|
value |
OMENativeInstancePhase |
Value is the shared lifecycle phase. |
indexes |
string |
Indexes is the canonical index set of the Instances with this value. Minimum length: |
InstanceStatusRevisionGroup¶
Used by InstanceStatusColumns.
InstanceStatusRevisionGroup is one full ControllerRevision name and the Instances that carry it.
| Field | Type | Description |
|---|---|---|
value |
string |
Value is the shared revision name; the empty revision is never grouped. Minimum length: |
indexes |
string |
Indexes is the canonical index set of the Instances with this value. Minimum length: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
triggers Required |
[]KedaTriggerTemplate |
Minimum items: |
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).
| Field | Type | Description |
|---|---|---|
type Required |
string |
Type is the KEDA trigger type ("prometheus" in v1). Admission requires ProviderRef for network-endpoint trigger types. Minimum length: |
providerRef |
MetricProviderRef |
ProviderRef binds the trigger's endpoint by logical provider name. |
metricType |
MetricTargetType |
MetricType is forwarded to the rendered trigger. Allowed values: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
| 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 |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
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).
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
name Required |
string |
Minimum length: |
MigrationEvent¶
Used by MigrationHistoryEntry.
MigrationEvent is one observation logged during a migration.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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).
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
backend |
string |
Backend identifies the configured cache provider. |
sourceUri |
string |
SourceUri is the model source URI being cached. |
ModelCopies¶
Used by ModelStatus.
| Field | Type | Description |
|---|---|---|
failedCopies |
int |
How many copies of the model failed to load recently. Default: |
totalCopies |
int |
How many copies of the model are loaded. |
ModelExtensionSpec¶
Used by BaseModelSpec, FineTunedWeightSpec.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
weight |
int64 |
Weight of the model format in the runtime selector, used to prioritize modelFormat Default: |
ModelFrameworkSpec¶
Used by BaseModelSpec, SupportedModelFormat.
| Field | Type | Description |
|---|---|---|
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: |
weight |
int64 |
Weight of the framework in the runtime selector, used to prioritize modelFramework Default: |
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).
| Field | Type | Description |
|---|---|---|
name Required |
string |
|
kind |
string |
Default: |
apiGroup |
string |
Default: |
ModelQuantization¶
Used by BaseModelSpec, SupportedModelFormat.
Underlying type: string.
ModelRef¶
Used by InferenceReplicaSpec, InferenceServiceSpec.
| Field | Type | Description |
|---|---|---|
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: |
apiGroup |
string |
APIGroup of the resource being referenced. Specifies the Kubernetes API group of the referenced model. Default: |
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.
| Field | Type | Description |
|---|---|---|
activeModelState |
ModelState |
High level state string: Pending, Standby, Loading, Loaded, FailedToLoad Default: |
targetModelState |
ModelState |
Default: |
ModelSizeRangeSpec¶
Used by ServingRuntimeSpec.
ModelSizeRangeSpec defines the range of model sizes supported by this runtime
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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 |
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 Minimum: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name is the name of the parent InferenceService. Minimum length: |
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.
| Field | Type | Description |
|---|---|---|
resourceName |
string |
|
resourceFlavor |
string |
|
demand |
int64 |
Minimum: |
allocatable |
int64 |
Minimum: |
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.
| Field | Type | Description |
|---|---|---|
demandFingerprint |
string |
|
demandContract |
PlacementDemandContract |
DemandContract binds normalization to the member rendering authorized by this allocation. Its fingerprint must equal DemandFingerprint. |
replicas |
int64 |
Minimum: |
pools |
[]PlacementCapacityPool |
PlacementComponentDemand¶
Used by PlacementDemandContract.
PlacementComponentDemand identifies one component's rendered replica shape.
| Field | Type | Description |
|---|---|---|
component Required |
ComponentType |
Allowed values: |
renderingHash Required |
string |
RenderingHash includes pod shapes, worker count, mode and RuntimeClasses. Pattern: |
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.
| Field | Type | Description |
|---|---|---|
component Required |
ComponentType |
Allowed values: |
replicas Required |
int32 |
Minimum: |
PlacementDemandContract¶
Used by PlacementCapacitySample, PlacementExecutionPolicy.
PlacementDemandContract binds component rendering to normalized unit demand. Router is excluded because its replicas follow a per-home policy.
| Field | Type | Description |
|---|---|---|
fingerprint Required |
string |
Fingerprint identifies the complete resolved resource/flavor demand. Pattern: |
components Required |
[]PlacementComponentDemand |
Components includes exactly the declared Engine/Decoder components. Minimum items: |
PlacementExecutionPolicy¶
Used by InferenceReplicaSpec.
PlacementExecutionPolicy carries source allocation authority to a member's component reconciler. It is absent for locally managed services.
| Field | Type | Description |
|---|---|---|
planID Required |
string |
|
revision Required |
int64 |
Minimum: |
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: |
PlacementHomePolicy¶
Used by CandidateAllocationStatus.
PlacementHomePolicy records the full component floors of one retained home.
| Field | Type | Description |
|---|---|---|
inputDigest |
string |
InputDigest binds these resolved floors to the accepted source intent. |
replicaFloors |
[]PlacementComponentFloor |
Minimum items: |
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.
| Field | Type | Description |
|---|---|---|
id |
string |
|
mode |
PlacementMode |
Mode identifies the execution semantics of this accepted plan. Allowed values: |
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: |
sourceUID |
UID |
|
observedGeneration |
int64 |
Minimum: |
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: |
assignedReplicas |
int64 |
Minimum: |
unassignedReplicas |
int32 |
Minimum: |
originalUnassignedReplicas |
int32 |
OriginalUnassignedReplicas retains the unassigned part of the original floor. Minimum: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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:
|
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.
| Field | Type | Description |
|---|---|---|
anchor |
ComponentType |
Anchor is the Component whose replica count drives followers. Allowed values: Default: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
value |
int32 |
Value is a fixed replica count. Minimum: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
partition |
int32 |
Partition holds back updates for Instances whose index is < Partition. 0 (the default) updates all Instances. Used for canary holds. Minimum: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
Allowed values: |
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: |
RolloutCoordinationGroupStatus¶
Used by RolloutCoordinationStatus.
RolloutCoordinationGroupStatus reports the observed state of one coordination group.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
components Required |
[]ComponentType |
Components lists the Component names in this group (they roll together). Valid values: "router", "engine", "decoder". Minimum items: |
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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
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".
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name of the RolloutPolicy in the InferenceService's namespace. Minimum length: |
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: |
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.
| Field | Type | Description |
|---|---|---|
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).
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
groups |
[]RolloutRunGroup |
RolloutRunProvenance¶
Used by RolloutRunRecord.
RolloutRunProvenance is the provenance subset of a pinned group, kept after the run closes.
| Field | Type | Description |
|---|---|---|
source |
RolloutPlanSource |
|
policyRef |
RolloutPolicyRef |
|
portableDigest |
string |
RolloutRunRecord¶
Used by RolloutStatus.
RolloutRunRecord is the bounded record of a closed run.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
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).
| Field | Type | Description |
|---|---|---|
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
| Field | Type | Description |
|---|---|---|
| Embedded | PodSpec |
PodSpec defines the container configuration for the router The fields of |
| Embedded | ComponentExtensionSpec |
ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc. The fields of |
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.
| Field | Type | Description |
|---|---|---|
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: |
method |
string |
Method is the HTTP method used by the capacity request. Allowed values: |
format |
string |
Format names the response shape returned by the capacity endpoint. Minimum length: |
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: |
quorum |
int32 |
Quorum is the number of readings required to corroborate a lower capacity. Minimum: |
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.
| Field | Type | Description |
|---|---|---|
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: |
method |
string |
Method is the HTTP method used by the probe. Allowed values: |
acceptStatuses |
[]int32 |
AcceptStatuses are response codes counted as a successful probe. Minimum items: |
gateStatuses |
[]int32 |
GateStatuses are response codes counted as a failed probe. A code in neither status list is inconclusive. Minimum items: |
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: |
successThreshold |
int32 |
SuccessThreshold is the number of consecutive successes required to restore a gated serving home. Minimum: |
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.
| Field | Type | Description |
|---|---|---|
options |
map[string]string |
Options are interpreted and validated by the operator-selected publisher. Maximum keys: 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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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:
Minimum: |
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.
| Field | Type | Description |
|---|---|---|
| Embedded | Container |
Container spec for the runner. Provides complete Kubernetes container configuration for the primary execution container. The fields of |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
mode |
ScalingMode |
Mode selects the coordination strategy. Allowed values: Default: |
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.
| Field | Type | Description |
|---|---|---|
engine Required |
string |
Engine specifies the backend model server engine. Supported values: "vLLM", "SGLang", "TGI". Allowed values: |
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: |
gpuCount Required |
int |
GpuCount indicates the number of GPU cards available on the model server. |
ServingRuntimePodSpec¶
Used by ServingRuntimeSpec.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
apiGroup |
string |
APIGroup of the resource being referenced. Specifies the Kubernetes API group of the referenced runtime. Default: |
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: |
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.
| Field | Type | Description |
|---|---|---|
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 |
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
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
maxReplicasPerCluster |
int32 |
MaxReplicasPerCluster is an optional local ceiling. Plans exceeding it are held; zero follows the assigned allocation without an extra ceiling. Minimum: |
StorageSpec¶
Used by BaseModelSpec, BenchmarkJobSpec, FineTunedWeightSpec.
| Field | Type | Description |
|---|---|---|
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:
|
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:
|
SupportedModelFormat¶
Used by ServingRuntimeSpec.
| Field | Type | Description |
|---|---|---|
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: |
acceleratorConfig |
map[string]AcceleratorModelConfig |
AcceleratorConfig provides accelerator-specific overrides for this model format |
TensorParallelismConfig¶
Used by AcceleratorModelConfig.
TensorParallelismConfig specifies tensor parallelism settings
| Field | Type | Description |
|---|---|---|
tensorParallelSize |
int64 |
tensorParallelSize specifies the size of the tensor parallelism Minimum: |
pipelineParallelSize |
int64 |
pipelineParallelSize specifies the size of the pipeline parallelism Minimum: |
dataParallelSize |
int64 |
dataParallelSize specifies the size of the data parallelism Minimum: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
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.
| Field | Type | Description |
|---|---|---|
trafficMapGeneration |
int64 |
TrafficMapGeneration is the generation whose positive plan was applied. Minimum: |
observedISVCGeneration |
int64 |
ObservedISVCGeneration is the source generation that produced the plan. Minimum: |
planCompatibilityDigest |
string |
PlanCompatibilityDigest identifies the effective publisher options that affect target identity or weights. Pattern: |
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: |
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.
| Field | Type | Description |
|---|---|---|
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: |
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: |
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: |
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.
| Field | Type | Description |
|---|---|---|
target |
string |
Target is a publisher-defined canonical identifier already covered by the enclosing publisher claim journal. Minimum length: |
weight |
int64 |
Weight is the exact non-negative integer applied by the publisher. Publisher-specific bounds are validated before replay. Minimum: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
algorithm |
LoadBalancingType |
Algorithm selects the load-balancing algorithm. Absent = the Gateway implementation's default (LeastRequest for Envoy Gateway). Allowed values: |
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
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.
| Field | Type | Description |
|---|---|---|
| Embedded | PodSpec |
PodSpec for the worker. Allows customization of the Kubernetes Pod configuration specifically for worker nodes. The fields of |
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.
| Field | Type | Description |
|---|---|---|
clusterSource Required |
ClusterConnectionSource |
ClusterSource is how the control plane connects to this cluster. |
WorkloadClusterStatus¶
Used by WorkloadCluster.
| Field | Type | Description |
|---|---|---|
conditions |
[]Condition |
Conditions report connection health ONLY (the Ready condition). Never capacity, never Kueue/quota state. |