--- # Generated by hack/genref/generate.sh from the Go types in pkg/apis/ome/v1beta1 # of ome-projects/ome. Don't edit this file. Edit the doc comments on the types, # or the templates in hack/genref, and run the script. title: OME API description: Look up the fields of every type in the ome.io/v1beta1 API, such as InferenceService, BaseModel and ClusterServingRuntime, in this generated reference. generated: true --- Every resource on this page has `apiVersion: ome.io/v1beta1`. The page is generated from the Go types in [`pkg/apis/ome/v1beta1`](https://github.com/ome-projects/ome/tree/main/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` {#ome-io-v1beta1-AcceleratorClass} AcceleratorClass defines a class of accelerators with similar capabilities
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`AcceleratorClass` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
AcceleratorClassSpec |
The desired state of the `AcceleratorClass`. |
status |
AcceleratorClassStatus |
The observed state of the `AcceleratorClass`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`AcceleratorQuota` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
AcceleratorQuotaSpec |
The desired state of the `AcceleratorQuota`. |
status |
AcceleratorQuotaStatus |
The observed state of the `AcceleratorQuota`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`AutoscalerPolicy` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
AutoscalerPolicySpec |
The desired state of the `AutoscalerPolicy`. |
status |
AutoscalerPolicyStatus |
The observed state of the `AutoscalerPolicy`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`BaseModel` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
BaseModelSpec |
The desired state of the `BaseModel`. |
status |
ModelStatusSpec |
The observed state of the `BaseModel`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`BenchmarkJob` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
BenchmarkJobSpec |
The desired state of the `BenchmarkJob`. |
status |
BenchmarkJobStatus |
The observed state of the `BenchmarkJob`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`ClusterBaseModel` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
BaseModelSpec |
The desired state of the `ClusterBaseModel`. |
status |
ModelStatusSpec |
The observed state of the `ClusterBaseModel`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`ClusterServingRuntime` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
ServingRuntimeSpec |
The desired state of the `ClusterServingRuntime`. |
status |
ServingRuntimeStatus |
The observed state of the `ClusterServingRuntime`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`FineTunedWeight` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
FineTunedWeightSpec |
The desired state of the `FineTunedWeight`. |
status |
ModelStatusSpec |
The observed state of the `FineTunedWeight`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`InferenceReplica` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
InferenceReplicaSpec |
The desired state of the `InferenceReplica`. |
status |
InferenceReplicaStatus |
The observed state of the `InferenceReplica`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`InferenceService` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
InferenceServiceSpec |
The desired state of the `InferenceService`. |
status |
InferenceServiceStatus |
The observed state of the `InferenceService`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`RolloutPolicy` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
RolloutPolicySpec |
The desired state of the `RolloutPolicy`. |
status |
RolloutPolicyStatus |
The observed state of the `RolloutPolicy`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`ServingRuntime` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
ServingRuntimeSpec |
The desired state of the `ServingRuntime`. |
status |
ServingRuntimeStatus |
The observed state of the `ServingRuntime`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`TrafficMap` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
TrafficMapSpec |
The desired state of the `TrafficMap`. |
status |
TrafficMapStatus |
The observed state of the `TrafficMap`. |
| Field | Type | Description |
|---|---|---|
apiVersion Required |
string |
`ome.io/v1beta1` |
kind Required |
string |
`WorkloadCluster` |
metadata |
ObjectMeta |
Standard object metadata, such as `name` and `labels`. |
spec |
WorkloadClusterSpec |
The desired state of the `WorkloadCluster`. |
status |
WorkloadClusterStatus |
The observed state of the `WorkloadCluster`. |
| 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: `253`. Pattern: `^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*(/[A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$`. |
resourceFlavor Required |
string |
ResourceFlavor names an existing Kueue ResourceFlavor. OME references flavors and does not own node labeling; a flavor missing on a target cluster makes that cluster's ClusterQueue inactive, so the budget is not materialized there. Maximum length: `253`. Pattern: `^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`. |
policy |
AcceleratorQuotaDistributionPolicy |
Policy overrides the node's default split for this flavor only, so a leaf can be Explicit on a reserved flavor and Proportional on a fungible one. Leaves only. |
nominal Required |
Quantity |
Nominal is the allowance for this flavor, in the plane's own terms: the fleet-wide total where the tree is authored, this cluster's resolved share on a projected copy. It becomes the ClusterQueue's nominalQuota. |
borrowingLimit |
Quantity |
BorrowingLimit is how far above its share this leaf may burst by borrowing idle sibling capacity, passed through to Kueue. Unset, this leaf does not borrow: nominal is its ceiling, and the materialized queue carries an explicit limit of zero to say so, because the enforcement backend reads an absent limit as unbounded. Borrowing is cluster-local, so setting it turns nominal from a ceiling into a floor plus overage, and the relaxed ceiling is reported in status. WARNING: overage is not currently reclaimable. This plane sets no preemption policy, so a borrower holds what it took until its own work finishes -- a leaf that bursts can leave a sibling waiting for the share that sibling was guaranteed. Leaves only. |
lendingLimit |
Quantity |
LendingLimit is how much of this leaf's share siblings may borrow while it is idle, passed through to Kueue. It MUST NOT exceed the share Kueue sees. Leaves only. |
perCluster |
[]AcceleratorClusterShare |
PerCluster is the admin-authored split, required when the effective policy is Explicit and rejected otherwise. Entries MUST sum to Nominal. It is absent on a projected copy, which carries one already-resolved share rather than a fleet split. |
| 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. |
| 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 |
| 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. |
| 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. |
| 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 |
| 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 |
| 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. |
| 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. |
| Field | Type | Description |
|---|---|---|
cluster Required |
string |
Cluster is the WorkloadCluster's name. Maximum length: `253`. |
nominal Required |
Quantity |
Nominal is that cluster's share, and becomes the nominalQuota of the ClusterQueue materialized there. |
| 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"]. |
| 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) |
| 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 |
| Field | Type | Description |
|---|---|---|
kueueResourceFlavor |
string |
KueueResourceFlavor name to sync with |
volcanoGPUType |
string |
VolcanoGPUType for Volcano integration |
| Field | Type | Description |
|---|---|---|
averageMillis |
int64 |
Average latency in milliseconds |
maximumMillis |
int64 |
Maximum latency in milliseconds |
| Field | Type | Description |
|---|---|---|
minMemoryPerBillionParams |
int64 |
MinMemoryPerBillionParams specifies memory required per billion parameters. OME doesn't read it. Minimum: `0`. |
tensorParallelismOverride |
TensorParallelismConfig |
TensorParallelismOverride overrides the default tensor parallelism settings |
runtimeArgsOverride |
[]string |
RuntimeArgsOverride provides accelerator-specific runtime arguments |
environmentOverride |
map[string]string |
EnvironmentOverride provides accelerator-specific environment variables |
| 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 |
| 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. |
| Field | Type | Description |
|---|---|---|
policy |
AcceleratorQuotaDistributionPolicy |
Policy is the default split for every budget on this node that does not override it. |
| 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. |
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name is the parent AcceleratorQuota's metadata.name. Maximum length: `253`. Pattern: `^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`. |
| 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: `63`. Pattern: `^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`. |
distribution |
AcceleratorQuotaDistribution |
Distribution is this leaf's default split policy, overridable per budget entry. Unset means the operator-level default from the quota config applies; absent that too, the node reports Degraded rather than guessing. |
budgets |
[]AcceleratorBudget |
Budgets is the per-flavor allowance, one entry per ResourceFlavor. On a leaf this is the budget: the fleet-wide allowance where the tree is authored, that cluster's resolved share on a projected copy. On a Cohort node it is an authoring guardrail only — the parent number that parent >= sum(children) is checked against. A grouping materializes as a Kueue Cohort with no resourceGroups, so a Cohort budget is never quota anyone can consume. Capped at the number of entries one Kueue resourceGroup accepts. Maximum items: `16`. |
| 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. |
| 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: `0`. |
minComputePerformanceTFLOPS |
int64 |
MinComputePerformanceTFLOPS specifies minimum compute capability in TFLOPS Minimum: `0`. |
minArchitectureVersion |
string |
MinArchitectureVersion Compute capability (NVIDIA) or equivalent |
requiredFeatures |
[]string |
RequiredFeatures lists hardware features that must be present. Examples: ["tensor-cores", "fp8", "nvlink"]. |
preferredPrecisions |
[]string |
PreferredPrecisions lists numeric precisions in order of preference. Examples: ["fp8", "fp16", "fp32"]. |
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name of the resource (e.g., nvidia.com/gpu) |
quantity |
Quantity |
Quantity per accelerator Default: `"1"`. |
divisible |
bool |
Divisible indicates if the resource can be subdivided |
| 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 |
| 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: `BestFit`, `Cheapest`, `MostCapable`, `FirstAvailable`. |
| 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: `LT`, `LTE`, `GT`, `GTE`. |
threshold Required |
string |
Threshold is the bound the query result is compared against. Parsed as a float (e.g. "0.05", "200", "1.5"); admission rejects a non-numeric value. |
| 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. |
| 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. |
| 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?"). |
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name of an AutoscalerPolicy in the InferenceService's namespace. Minimum length: `1`. |
kind |
string |
Kind of the referenced policy. "ClusterAutoscalerPolicy" is a reserved shape: admission rejects it until the cluster-scoped twin ships. Allowed values: `AutoscalerPolicy`, `ClusterAutoscalerPolicy`. Default: `AutoscalerPolicy`. |
| Field | Type | Description |
|---|---|---|
enforcement |
PolicyEnforcement |
Enforcement tier. v1 admits only "Default"; "Required" is a reserved shape rejected at admission. Allowed values: `Default`, `Required`. Default: `Default`. |
class Required |
AutoscalerClass |
Class selects the template. External and None are inline-only: "someone else scales this component" is a per-service statement, not a reusable behavior. Allowed values: `HPA`, `KEDA`. |
keda |
KedaPolicyTemplate |
Keda holds the parameterized KEDA template. Required when Class=KEDA. |
hpa |
HPAAutoscaler |
HPA holds HorizontalPodAutoscaler configuration, verbatim (no templating). Optional when Class=HPA; if absent the rendered block gets the default CPU=80% metric downstream, exactly like an inline block with a nil HPA field. |
| 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 |
| 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. |
| 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 `ModelExtensionSpec` appear directly in this object. |
servingMode |
[]string |
ServingMode of the model, e.g., ["On-demand", "Dedicated"] |
maxTokens |
int32 |
MaxTokens is the maximum number of tokens that can be processed by the model |
diffusionPipeline |
DiffusionPipelineSpec |
DiffusionPipeline captures pipeline-specific metadata for diffusion models (from model_index.json). |
additionalMetadata |
map[string]string |
Additional metadata for the model |
| 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: `text-to-text`, `image-to-text`, `text-to-embeddings`, `image-to-embeddings`. |
trafficScenarios |
[]string |
TrafficScenarios contains a list of traffic scenarios to simulate during the benchmark. If not provided, defaults will be assigned via genai-bench. |
numConcurrency |
[]int |
NumConcurrency defines a list of concurrency levels to test during the benchmark. If not provided, defaults will be assigned via genai-bench. |
maxTimePerIteration Required |
int |
MaxTimePerIteration specifies the maximum time (in minutes) for a single iteration. Each iteration runs for a specific combination of TrafficScenarios and NumConcurrency. |
maxRequestsPerIteration Required |
int |
MaxRequestsPerIteration specifies the maximum number of requests for a single iteration. Each iteration runs for a specific combination of TrafficScenarios and NumConcurrency. |
additionalRequestParams |
map[string]string |
AdditionalRequestParams contains additional request parameters as a map. |
dataset |
StorageSpec |
Dataset is the dataset used for benchmarking. It is optional and only required for tasks other than "text-to-<output-modality>". |
outputLocation Required |
StorageSpec |
OutputLocation specifies where the benchmark results will be stored (e.g., object storage). |
resultFolderName |
string |
ResultFolderName specifies the name of the folder that stores the benchmark result. A default name will be assigned if not specified. |
podOverride |
PodOverride |
PodOverride customizes the benchmark pod. OME merges it into the pod it builds by default, so fields you leave unset keep their defaults. |
| Field | Type | Description |
|---|---|---|
state |
string |
State represents the current state of the benchmark job: "Pending", "Running", "Completed", "Failed". Allowed values: `Pending`, `Running`, `Completed`, `Failed`. |
startTime |
Time |
StartTime is the timestamp for when the benchmark job started. |
completionTime |
Time |
CompletionTime is the timestamp for when the benchmark job completed, either successfully or unsuccessfully. |
lastReconcileTime |
Time |
LastReconcileTime is the timestamp for the last time the job was reconciled by the controller. |
failureMessage |
string |
FailureMessage contains any error messages if the benchmark job failed. |
details |
string |
Details provide additional information or metadata about the benchmark job. |
| Field | Type | Description |
|---|---|---|
reason |
CanaryFailureReason |
Reason names the gate that gave up. Allowed values: `CapacityTimeout`, `AnalysisStalled`, `StableRevisionMissing`. |
time |
Time |
Time is when the canary parked. |
| 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. |
| 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: `0`. |
componentMatches |
[]ComponentAffinityMatch |
ComponentMatches records, under the ComponentAffinity policy, how each component other than the primary one matched this cluster. MatchingTerms and Weight hold the primary component's match. The accepted plan keeps them so that member floors never follow unaccepted label changes. Maximum items: `2`. |
capacity |
PlacementCapacitySample |
Capacity is the accepted hardware sample, when capacity determines weight. |
originalReplicas |
int32 |
Minimum: `0`. |
currentReplicas |
int32 |
Minimum: `0`. |
desiredReplicas |
int32 |
Minimum: `0`. |
drainRequested |
bool |
DrainRequested withdraws this home from routing before physical removal. |
| 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. |
| Field | Type | Description |
|---|---|---|
resolvedDigest |
string |
|
ready |
bool |
| 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. |
| Field | Type | Description |
|---|---|---|
name |
string |
|
portableDigest |
string |
| 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. |
| 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. |
| 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. |
| 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: `1`. |
matchExpressions |
[]ClusterSelectorRequirement |
MatchExpressions selects the WorkloadCluster's actual labels. Maximum items: `64`. |
matchFields |
[]ClusterSelectorRequirement |
MatchFields selects the real metadata.name using In or NotIn. Multiple names are allowed; a label named metadata.name does not affect this match. Maximum items: `64`. |
| Field | Type | Description |
|---|---|---|
kubeConfig |
KubeConfigSource |
|
clusterProfileRef |
ClusterProfileRef |
| Field | Type | Description |
|---|---|---|
name Required |
string |
| Field | Type | Description |
|---|---|---|
key Required |
string |
Key is a label key, or metadata.name for a field requirement. Minimum length: `1`. |
operator Required |
NodeSelectorOperator |
Operator follows Kubernetes node-selector semantics for labels. Allowed values: `In`, `NotIn`, `Exists`, `DoesNotExist`, `Gt`, `Lt`. |
values |
[]string |
Values is nonempty for In/NotIn, empty for Exists/DoesNotExist, and a single integer for Gt/Lt. Maximum items: `64`. |
| Field | Type | Description |
|---|---|---|
component |
ComponentType |
Allowed values: `engine`, `decoder`, `router`. |
matchingTerms |
[]int32 |
MatchingTerms contains zero-based indexes into the component's terms. |
weight |
int64 |
Weight is the component's effective static weight, when applicable. Minimum: `0`. |
| Field | Type | Description |
|---|---|---|
class Required |
AutoscalerClass |
Class selects the autoscaler implementation. Allowed values: `HPA`, `KEDA`, `External`, `None`. |
keda |
KedaAutoscaler |
Keda holds KEDA-specific configuration. Required when Class == "KEDA". |
hpa |
HPAAutoscaler |
HPA holds HorizontalPodAutoscaler-specific configuration. Optional when Class == "HPA"; if absent the controller emits a default CPU=80% HPA. |
| 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. - "ome": OME emitted the HPA / ScaledObject; conditions and replica counters below mirror its live status. - "external": operator-owned scaler; OME publishes scaleTargetRef and stays out. Conditions empty. - "none": no OME-managed scaler is active. Conditions empty; counters zero. Allowed values: `ome`, `external`, `none`. |
specSource |
string |
SpecSource reports which layer of the ISVC -> policy -> runtime -> legacy -> default inheritance chain produced the resolved Autoscaler block. One of "isvc" | "policy" | "runtime" | "legacy" | "default". Mirrors autoscaler.SpecSource so the operator can debug which layer is contributing the live config. |
policy |
AutoscalerPolicyProvenance |
Policy identifies the AutoscalerPolicy that rendered the live block. Set only when SpecSource is "policy". |
shadowedPolicyRef |
ShadowedAutoscalerPolicy |
ShadowedPolicyRef reports a policy ref outranked by an inline block (SpecSource "isvc" with spec.<component>.autoscalerPolicyRef set). Its wouldRenderDigest is the in-cluster preview of what the policy would produce if the inline block were removed. |
currentReplicas |
int32 |
CurrentReplicas is mirrored from the HPA / ScaledObject status. Zero when ManagedBy != "ome" or when the scaler has not yet reported. |
desiredReplicas |
int32 |
DesiredReplicas is mirrored from the HPA / ScaledObject status. Zero when ManagedBy != "ome" or when the scaler has not yet reported. |
lastScaleTime |
Time |
LastScaleTime mirrors the HPA / ScaledObject's last scale event. Nil when ManagedBy != "ome", when the scaler has not yet reported, or when no scaling has occurred since the scaler was created. |
conditions |
[]Condition |
Conditions mirrors the HPA's or ScaledObject's conditions verbatim (HPA: ScalingActive / AbleToScale / ScalingLimited; ScaledObject: Ready / Active / Fallback / Paused). Empty when ManagedBy != "ome" — operator-owned scalers are surfaced via scaleTargetRef instead. |
| 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: `1`. Maximum items: `64`. |
decoder |
[]ClusterAffinityTerm |
Decoder selects clusters for the decoder and, in Split, weights its shares over the clusters that hold engine replicas. It is required when the service declares a decoder. Minimum items: `1`. Maximum items: `64`. |
router |
[]ClusterAffinityTerm |
Router selects clusters for the router. In Split, it divides router.minReplicas across the clusters that hold engine replicas; without it, each such cluster runs the full router policy. Minimum items: `1`. Maximum items: `64`. |
| 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. |
| 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: `Stable`, `Canarying`, `Pending`, `Paused`, `Promoting`, `RollingBack`, `RolledBack`, `Failed`. |
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. |
| 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: `0`. Maximum: `100`. |
tag |
string |
Tag is an optional short identifier for the target (e.g. "latest", "prev"). Cosmetic; not used by the consumer. |
latestRevision |
bool |
LatestRevision is true when this entry corresponds to the LatestRolledoutRevision for the Component. |
pairingProtocol |
string |
PairingProtocol is the engine↔decoder wire-compatibility token the target's revision was minted under (spec.rollout.pairingProtocol at mint time). Consumers MUST only pair engine and decoder targets whose PairingProtocol values are equal; an empty value pairs with anything. |
| Field | Type | Description |
|---|---|---|
type Required |
HashType |
Type selects the hash source. Allowed values: `Header`, `Cookie`, `SourceIP`. |
headers |
[]HashHeader |
Headers to hash on. Required when Type=Header (one or more). Translators that support multi-header hashing concatenate the headers before hashing; when the active translator supports only single-header hashing, multi-header specs are rejected at admission. Forbidden when Type is not Header. |
cookie |
HashCookie |
Cookie configuration. Required when Type=Cookie. Forbidden when Type is not Cookie. |
| 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 `PodSpec` appear directly in this object. |
| Embedded | ComponentExtensionSpec |
ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc. Controls scaling behavior and resource allocation for the decoder component. The fields of `ComponentExtensionSpec` appear directly in this object. |
runner |
RunnerSpec |
Runner container override for customizing the main container. This is essentially a container spec that can override the default container. Defines the main decoder container configuration, including image, resource requests/limits, environment variables, and command. |
leader |
LeaderSpec |
Leader node configuration (only used for multi-node deployment). Defines the pod and container spec for the leader node that coordinates distributed token generation in multi-node deployments. |
worker |
WorkerSpec |
Worker nodes configuration (only used for multi-node deployment). Defines the pod and container spec for worker nodes that perform distributed token generation tasks as directed by the leader. |
topologyKey |
string |
Since v1.3. TopologyKey is the node-label key (e.g. an NVLink/RDMA fabric-domain label) used to co-locate all pods of one multi-node (leader+worker) gang into a single network / NVLink topology domain. When set on a multi-node component, OME auto-generates the per-instance worker→leader podAffinity that anchors every worker to its gang's leader on a node sharing this label value — so users need not hand-write that affinity. Only meaningful for multi-node components; ignored for single-pod (no leader to anchor to). Unset means no auto-generated gang affinity. |
topologySpread |
TopologySpreadPolicy |
Since v1.3. TopologySpread spreads this component's instances across fault domains so losing one domain (rack / fabric slice / cube) cannot take out every instance at once. Rendered as a standard topologySpreadConstraint (maxSkew 1) on each instance's anchor pod (the leader, or the sole pod of a single-pod instance); workers follow their leader, so gangs stay whole. Required renders as DoNotSchedule — balanced spreading enforced by any scheduler that keeps PodTopologySpread's Filter, including the OME gang scheduler's packing profile. Preferred renders as ScheduleAnyway — advisory only, and currently without effect under the OME gang scheduler (its profile disables the spreading Score and pre-narrows gang candidates to one domain). Not part of the revision hash: changing it shapes future placements without rolling a healthy fleet. Unset keeps pure bin-packing. Allowed values: `Preferred`, `Required`. |
topologySpreadKey |
string |
Since v1.3. TopologySpreadKey is the node-label key naming the fault domains TopologySpread spreads across. Defaults to TopologyKey — right for fabrics where the co-location domain IS the failure zone (an NVLink rack). Set it to a coarser label when the failure zone contains many gang domains: e.g. co-locate by the TPU partition label while spreading across cloud.google.com/gce-topology-subblock. Single-pod components have no co-location key, so spreading them requires setting this explicitly. Ignored unless TopologySpread is set. |
acceleratorOverride |
AcceleratorSelector |
AcceleratorOverride allows overriding the global accelerator selection for this component |
| 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". |
| 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. |
| Field | Type | Description |
|---|---|---|
url Required |
string |
URL represents the endpoint URL for the inference service. Pattern: `^(http|https)://`. |
apiFormat Required |
string |
APIFormat specifies the type of API, such as "openai" or "oci-cohere". Allowed values: `openai`, `oci-cohere`, `cohere`. |
modelName |
string |
ModelName specifies the name of the model being served at the endpoint. Useful for endpoints that require model-specific configuration. For instance, for openai API, this is a required field in the payload |
| Field | Type | Description |
|---|---|---|
type Required |
EndpointOverrideType |
Type selects where to read the endpoint override from. Allowed values: `Header`, `Metadata`. |
headers |
[]HashHeader |
Headers to read the endpoint reference from. Required when Type=Header. Each header value must be "<host>:<port>" or "<ip>:<port>". |
| 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. |
| 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 `PodSpec` appear directly in this object. |
| Embedded | ComponentExtensionSpec |
ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc. Controls scaling behavior and resource allocation for the engine component. The fields of `ComponentExtensionSpec` appear directly in this object. |
runner |
RunnerSpec |
Runner container override for customizing the engine container. This is essentially a container spec that can override the default container. Defines the main model runner container configuration, including image, resource requests/limits, environment variables, and command. |
leader |
LeaderSpec |
Leader node configuration (only used for multi-node deployment). Defines the pod and container spec for the leader node that coordinates distributed inference in multi-node deployments. |
worker |
WorkerSpec |
Worker nodes configuration (only used for multi-node deployment). Defines the pod and container spec for worker nodes that perform distributed processing tasks as directed by the leader. |
topologyKey |
string |
Since v1.3. TopologyKey is the node-label key (e.g. an NVLink/RDMA fabric-domain label) used to co-locate all pods of one multi-node (leader+worker) gang into a single network / NVLink topology domain. When set on a multi-node component, OME auto-generates the per-instance worker→leader podAffinity that anchors every worker to its gang's leader on a node sharing this label value — so users need not hand-write that affinity. Only meaningful for multi-node components; ignored for single-pod (no leader to anchor to). Unset means no auto-generated gang affinity. |
topologySpread |
TopologySpreadPolicy |
Since v1.3. TopologySpread spreads this component's instances across fault domains so losing one domain (rack / fabric slice / cube) cannot take out every instance at once. Rendered as a standard topologySpreadConstraint (maxSkew 1) on each instance's anchor pod (the leader, or the sole pod of a single-pod instance); workers follow their leader, so gangs stay whole. Required renders as DoNotSchedule — balanced spreading enforced by any scheduler that keeps PodTopologySpread's Filter, including the OME gang scheduler's packing profile. Preferred renders as ScheduleAnyway — advisory only, and currently without effect under the OME gang scheduler (its profile disables the spreading Score and pre-narrows gang candidates to one domain). Not part of the revision hash: changing it shapes future placements without rolling a healthy fleet. Unset keeps pure bin-packing. Allowed values: `Preferred`, `Required`. |
topologySpreadKey |
string |
Since v1.3. TopologySpreadKey is the node-label key naming the fault domains TopologySpread spreads across. Defaults to TopologyKey — right for fabrics where the co-location domain IS the failure zone (an NVLink rack). Set it to a coarser label when the failure zone contains many gang domains: e.g. co-locate by the TPU partition label while spreading across cloud.google.com/gce-topology-subblock. Single-pod components have no co-location key, so spreading them requires setting this explicitly. Ignored unless TopologySpread is set. |
acceleratorOverride |
AcceleratorSelector |
AcceleratorOverride allows overriding the global accelerator selection for this component |
| 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 |
| 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: `1`. |
replicas Required |
ReplicaValueSource |
Replicas is the fallback replica count. |
| 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 `ModelExtensionSpec` appear directly in this object. |
configuration |
RawExtension |
Configuration of the fine-tuned weight, stored as generic JSON for flexibility |
storage Required |
StorageSpec |
Storage configuration for the fine-tuned weight |
trainingJobRef |
ObjectReference |
TrainingJobRef references the training job that produced this weight |
| 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: `20`. |
prometheus |
AnalysisPrometheus |
Prometheus is the metrics source (connection) shared by every analysis step in this canary: where to query and how to authenticate. When omitted (or when its serverAddress is empty), the operator-configured default source (canaryAnalysis.bundledPrometheusAddress) is used; if that is also unset the analysis has no source and its samples read inconclusive. It is only the source — WHAT to check is each step's analysis — and it gates nothing by itself. |
scaleDownDelaySeconds |
int32 |
ScaleDownDelaySeconds is the wait between shifting traffic off the old revision and scaling its pods down, to drain in-flight requests. |
readyTimeout |
Duration |
ReadyTimeout bounds how long a step's capacity gate may stay unsatisfied before the canary is marked Failed (stable keeps serving — no traffic has shifted). Unset falls back to the operator-configured default (the rollout block of the operator's ConfigMap); the ome.io/rollout-ready-timeout annotation still overrides both. |
| 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). |
| 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. |
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name is the cookie name. Minimum length: `1`. |
ttlSeconds |
int64 |
TTLSeconds, when greater than zero, makes the gateway auto-issue the cookie if absent on the request. When zero or unset, the client is responsible for sending the cookie. Minimum: `0`. |
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name is the header name (case-insensitive per HTTP). Minimum length: `1`. |
| 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. |
| 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: `0`. |
markNotReadyDuringLifecycle |
bool |
MarkNotReadyDuringLifecycle, when true, flips ome.io/serving=False on the pod before the in-place mutation so EndpointSlice drains traffic first. Unset inherits the ServingRuntime's value, then true. |
| 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: `0`. |
maxUnavailable |
IntOrString |
MaxUnavailable is reserved; setting it has no effect. Disruption during a rollout is paced by lifecycle.updateStrategy.rollingUpdate.maxUnavailable. |
rollbackToRevision |
string |
RollbackToRevision, when set, names a ControllerRevision the replica rolls every Instance back to: that revision's stored pod template becomes the update target while UpdateRevision keeps reporting the spec's own revision. The InferenceService controller sets it during a canary rollback; empty in steady state. If the named revision does not exist, the replica rolls to its spec. A revision this replica does not control is ignored and reported with a Warning event. |
| 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: `1`. |
parentRef |
ParentReference |
ParentRef names the InferenceService that projects this replica. The InferenceService controller sets it at create time and it is immutable thereafter; a standalone replica omits it. Pod, Service and ControllerRevision names derive from the parent name when set and from the replica's own name otherwise. Controller-only. |
component Required |
ComponentType |
Component is the role this pod set fills: engine | decoder | router. Immutable; moving a workload between roles requires recreating the InferenceReplica. |
modelRef |
ModelRef |
ModelRef names the BaseModel (in the replica's namespace) or ClusterBaseModel this replica serves. With it set the controller renders the pods from the model and the runtime: the runtime named by RuntimeRef, or the runtime selected for the model when RuntimeRef is absent. Fine-tuned weights and overlays render as they do on an InferenceService. Exclusive with Runners. User field. |
runtimeRef |
ServingRuntimeRef |
RuntimeRef names the ServingRuntime (in the replica's namespace) or ClusterServingRuntime whose piece for Component this replica renders. The runtime must declare that piece. Without ModelRef the piece renders as-is, with no model mounted. The runtime's pod spec places the pods (node selector, affinity, resources); a second accelerator pool is a second runtime. A pin (autoSync=false, revision) is not honored: the live runtime renders, and the validating webhook rejects a pinned reference. Exclusive with Runners. User field. |
replicas |
int32 |
Replicas is the desired Instance count; nil or 0 runs one Instance. Whatever targets the scale subresource (HPA, KEDA or an external scaler) writes this field. On a projected replica the InferenceService controller writes the component's minReplicas (at least 1) at create, and thereafter while no autoscaler owns the count or the stored count is nil or 0. Minimum: `0`. |
minReadySeconds |
int32 |
MinReadySeconds is the minimum time a newly Ready pod must stay Ready before it counts as Available. The workload engine paces rollout drains and promotions on Available pods and counts only Available pods in availableReplicas; 0 means Available as soon as Ready. On a projected replica the InferenceService controller copies the component's effective lifecycle.minReadySeconds: the InferenceService's value, else the runtime's, else the operator's deploy default. Minimum: `0`. |
topologyKey |
string |
TopologyKey is the gang co-location node-label key for this Component. When set on a multi-node Component, the InferenceReplica controller auto-generates the per-Instance worker→leader podAffinity that co-locates every worker onto its gang's leader on a node sharing this label value. Nil means no auto-generated gang affinity. On a projected replica the value is the effective InferenceService or runtime component setting. |
topologySpread |
TopologySpreadPolicy |
TopologySpread is the spreading policy for this Component. The InferenceReplica controller renders it as a topologySpreadConstraint on each Instance's anchor pod; nil keeps pure bin-packing. On a projected replica the value is the effective InferenceService or runtime component setting. Allowed values: `Preferred`, `Required`. |
topologySpreadKey |
string |
TopologySpreadKey is the fault-domain node-label key TopologySpread spreads across; nil defaults to TopologyKey. On a projected replica the value is the effective InferenceService or runtime component setting. |
pairingProtocol |
string |
PairingProtocol is the engine/decoder wire-compatibility token. It is folded into the revision hash (a change mints a new revision) and stamped as the ome.io/pairing-protocol label on rendered pods; nil pairs with anything. Only engine and decoder replicas pair on it; a change on any replica still mints a new revision. On a projected replica the InferenceService controller copies spec.rollout.pairingProtocol onto the engine and decoder replicas and never onto the router, which must not re-roll on a protocol change. Maximum length: `63`. Pattern: `^[A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?$`. |
runners |
[]Runner |
Runners is the fully-rendered set of pod templates per Instance. A single-pod Instance has one Runner named "default" with Size=1; a multi-node Instance has "leader" (Size=1) and "worker" (Size=N). Required unless ModelRef or RuntimeRef is set, in which case it must be absent: the controller renders the runners from the refs and never stores them. The controller treats each Runner.Template as opaque input. User field. |
lifecycle |
LifecycleSpec |
Lifecycle holds the OMENative lifecycle policies (RestartPolicy, UpdateStrategy, ReadyPolicy, InstanceReadyTimeout, MigrationPolicy). An unset policy takes the fixed fallback its LifecycleSpec field names; an unset or zero instanceReadyTimeout falls back to the operator's lifecycle.instanceReadyTimeout on every replica, and with neither set operations open with no deadline. The operator's deploy defaults are applied only to a projected replica, before the copy. lifecycle.minReadySeconds is not read on a replica and is rejected on a standalone one; set spec.minReadySeconds. On a projected replica this is the component's effective lifecycle: the InferenceService's value, else the runtime's, with unset fields filled from the operator's deploy defaults. |
pacing |
InferenceReplicaPacing |
Pacing is rollout control written onto this replica: the canary partition, the rollback target and a reserved disruption budget. The InferenceService controller writes it on the replicas it orchestrates; on a standalone replica its owner sets it. Nil means the replica rolls independently. |
autoscaler |
ComponentAutoscaler |
Autoscaler is the autoscaler configuration downstream scalers (HPA / KEDA / External) target. Only the InferenceService controller creates a scaler from it, so on a standalone replica the HPA and KEDA classes are rejected and an External scaler targets the scale subresource directly. On a projected replica the InferenceService controller writes the resolved per-Component autoscaler, replacing the whole block, whenever that autoscaler resolves; while an autoscaler policy fails to render, the stored block is kept as the last known good one. |
paused |
bool |
Paused, when true, stops the InferenceReplica controller from initiating fleet changes: Update, Create, and Migration operations are neither started nor advanced. The component's RestartPolicy keeps repairing existing Instances at their current revision unless PauseMode is Freeze. In-flight operations resume on unpause. |
pauseMode |
PauseMode |
PauseMode selects how much of the lifecycle Paused suspends. Only meaningful while Paused is true. - "Recover" (default when empty): fleet changes are suspended; the RestartPolicy continues to repair existing Instances at the revision they already run. - "Freeze": every lifecycle operation is suspended, including Instance repair. Only kubelet-level container restarts and deliberate replica reduction (scale-down) remain active. Status stays truthful in every depth: a Ready Instance whose pods are all gone (and whose RestartPolicy will not repair it) is demoted to Pending without running any recovery operation. Allowed values: `Recover`, `Freeze`. |
revisionHistoryLimit |
int32 |
RevisionHistoryLimit caps how many non-live ControllerRevisions the InferenceReplica controller retains. Live revisions (CurrentRevision / UpdateRevision and every per-Instance running/target revision) are never deleted regardless of the limit. Nil falls back to the operator-level lifecycle.revisionHistoryLimit config; when that is also absent, no revisions are pruned. On a projected replica the InferenceService controller copies the parent's ome.io/revision-history-limit annotation. Minimum: `1`. |
| 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: `1`. |
replicas |
int32 |
Replicas is the total Instance count (any phase). |
readyReplicas |
int32 |
ReadyReplicas is the number of Instances whose every pod is Ready. |
servingReplicas |
int32 |
ServingReplicas is the number of Instances whose every pod is both ContainersReady AND has serving=True on the controller-managed readiness gate (i.e., actually in the load balancer rotation). MaxUnavailable budgets are computed against this count, not ReadyReplicas, so "missing from traffic" reflects reality during in-place updates. |
availableReplicas |
int32 |
AvailableReplicas is the number of Instances whose desired pod count is Available: in rotation on the Component's headless Service and, when spec.minReadySeconds is set, Ready for at least that long. |
updatedReplicas |
int32 |
UpdatedReplicas is the number of Instances on UpdateRevision. |
updatedReadyReplicas |
int32 |
UpdatedReadyReplicas is the number of Instances on UpdateRevision that are fully Ready. UpdatedReadyReplicas / Replicas drives MaxUnavailable rollout pacing. |
currentRevision |
string |
CurrentRevision names the ControllerRevision currently serving traffic. Set by the InferenceReplica controller. |
updateRevision |
string |
UpdateRevision names the ControllerRevision being rolled out. |
collisionCount |
int32 |
CollisionCount is the salt folded into ControllerRevision hash input after a name collision is observed, so retries produce a different revision name. Same pattern as StatefulSet. |
labelSelector |
string |
LabelSelector identifies pods of this InferenceReplica for the HPA scale subresource. Uses the same selector formula as the Component's pod labels, so HPAs targeting either the ISVC or the InferenceReplica resolve to the same pod set. |
instanceStatuses |
[]OMENativeInstanceStatus |
InstanceStatuses is the DenseV1 representation of the per-Instance status, one row per Instance. Absent when instanceStatusEncoding is ColumnarV2, in which case instanceStatusColumns carries the same rows. |
instanceStatusEncoding |
InstanceStatusEncoding |
InstanceStatusEncoding names the representation that carries the per-Instance rows. Absent means DenseV1 (instanceStatuses). The only accepted value is ColumnarV2, which requires instanceStatusColumns and forbids instanceStatuses. |
instanceStatusColumns |
InstanceStatusColumns |
InstanceStatusColumns is the ColumnarV2 representation of the per-Instance rows. Present exactly when instanceStatusEncoding is ColumnarV2; it decodes to the same rows, in the same order, that instanceStatuses would carry. |
retryBlocks |
[]RetryBlock |
RetryBlocks records per-target-revision retry authority for update attempts. Revision-scoped: one block per failed target revision, shared by every Instance attempting it — allocating a new Instance cannot evade the block. |
migrations |
[]MigrationStatus |
Migrations is the authoritative set of migration records for this InferenceReplica — one entry per request UUID. Manual entries are resumable processes born Accepted; Auto entries are born-terminal Relocated records. Executors select on non-terminal phase only — terminal entries are records, never work. Non-terminal entries are never trimmed; terminal entries are pruned once older than the migration-capacity rate window, so the list stays bounded. Full history remains in the audit ledger and events. |
conditions |
[]Condition |
Conditions reports InferenceReplica-level conditions. Defined types include Available, Progressing, FailedScale, FailedUpdate, GangSchedulingUnavailable, OperationStuck. |
traffic |
[]ComponentTrafficTarget |
Traffic reports per-revision traffic weights for this InferenceReplica. Each entry corresponds to one revision currently receiving traffic. The ISVC controller mirrors this onto ISVC.status.components[c].traffic[] for the HTTPRoute builder. |
coordinationGroupRef |
string |
CoordinationGroupRef back-references the RolloutCoordinationGroup this replica is currently bound into (if any). Lets operators find the owning coord group from the child without parsing the ISVC spec. |
rolloutHold |
RolloutHold |
RolloutHold records the most recent reason a per-Instance Update was denied for this Component — cross-Component coordination (Ratio, Sequential), a surge/unavailability budget, or a same-target retry hold (RetryBlock, Held). Nil while the Component is progressing or has no rollout in flight. See RolloutHold for the field semantics. |
| 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. |
| 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 — `kubectl get -o yaml` stays clean. A per-Component `ome.io/deploymentMode` annotation still wins as an explicit override (the escape hatch is preserved for backward compat and mixed-mode experiments). Valid values: - "OMENative" — Native lifecycle-managed pods (also handles multi-node serving when Leader/Worker are present) - "RawDeployment" — Kubernetes Deployment/HPA-backed dispatch MultiNode (LeaderWorkerSet-backed multi-node serving) is selected via the ome.io/deploymentMode annotation or the operator-level default, never via this field. PDDisaggregated is a shape descriptor derived from engine+decoder pairing, and VirtualDeployment is legacy; neither is accepted here. Allowed values: `OMENative`, `RawDeployment`. |
engine |
EngineSpec |
Engine defines the serving engine spec. This provides detailed container and pod specifications for model serving. It allows defining the model runner (container spec), as well as complete pod specifications including init containers, sidecar containers, and other pod-level configurations. Engine can also be configured for multi-node deployments using leader and worker specifications. |
decoder |
DecoderSpec |
Decoder defines the decoder spec. This is specifically used for PD (Prefill-Decode) disaggregated serving deployments. Similar to Engine in structure, it allows for container and pod specifications, but is only utilized when implementing the disaggregated serving pattern to separate the prefill and decode phases of inference. |
model |
ModelRef |
Model defines the model to be used for inference, referencing either a BaseModel or a custom model. This allows models to be managed independently of the serving configuration. |
runtime |
ServingRuntimeRef |
Runtime defines the serving runtime environment that will be used to execute the model. It is an inference service spec template that determines how the service should be deployed. Runtime is optional - if not defined, the operator will automatically select the best runtime based on the model's size, architecture, format, quantization, and framework. |
router |
RouterSpec |
Router defines the router spec |
replicaRefs |
ReplicaRefs |
ReplicaRefs names, per role, the standalone InferenceReplicas this service fronts instead of rendering the role itself. The service creates the role's stable Service (<name>-engine, -decoder, -router) and the route in front of their pods and writes nothing on the replicas: their specs, rollouts and scaling stay with their owner. A service references either all of its roles this way or none, so spec.engine, spec.decoder and spec.router are unset with it, as are spec.model and spec.runtime (the replicas carry their own); engine is required. Fixed at create. A replica that needs a peer's address (an engine its decoder, a router its engine and decoder) is configured by its owner with the stable Service names, which exist once the service does. |
acceleratorSelector |
AcceleratorSelector |
AcceleratorSelector specifies accelerator selection preferences |
traffic |
TrafficSpec |
Since v1.3. Traffic configures the load-balancing policy applied to all HTTPRoutes OME emits for this InferenceService. See the TrafficSpec doc for details. |
rollout |
RolloutSpec |
Since v1.3. Rollout is the single home for rollout configuration on this InferenceService: an ordered list of rollout groups, each polymorphic in its progression (canary | blueGreen | rollingUpdate). Sequencing is the group list order; a group's Components roll together. |
scalingPolicy |
ScalingPolicy |
Since v1.3. ScalingPolicy coordinates replica counts across Components when more than one autoscaler would otherwise drift (e.g., engine + decoder in a PD-disaggregated service that requires 1:1 sharding). When nil, every Component autoscales independently. Alpha. The API may change without notice. |
placement |
PlacementSpec |
Since v1.3. Placement declares how the multi-cluster control plane selects workload clusters and allocates replicas. An absent block declares no placement intent. Derived member services carry allocation authority in metadata. |
routing |
RoutingSpec |
Since v1.3. Routing configures cross-cluster traffic distribution for this InferenceService. Unset fields inherit the operator-level routing configuration. Only consulted on the control-plane cluster; ignored in single-cluster deployments. Alpha; the API may change without notice. |
ttlSecondsAfterCreation |
int64 |
Since v1.3. TTLSecondsAfterCreation limits how long this InferenceService lives. Once that many seconds have passed since its creationTimestamp, the controller deletes it, and garbage collection removes everything it owns. Unset means it lives until deleted. The deadline is computed from creationTimestamp on every reconcile, so changing or clearing the field moves or cancels it. Placement member copies ignore it; the source InferenceService's TTL governs them. Minimum: `1`. |
| Field | Type | Description |
|---|---|---|
| Embedded | Status |
Conditions for the InferenceService: - EngineReady: engine readiness condition. - DecoderReady: decoder readiness condition. - RouterReady: router readiness condition. - IngressReady: ingress resource readiness. - Ready: component aggregate on workload clusters, or placement serving readiness on a multi-cluster control-plane source. The fields of `Status` appear directly in this object. |
address |
Addressable |
Addressable endpoint for the InferenceService |
url |
URL |
URL holds the url that will distribute traffic over the provided traffic targets. It generally has the form http[s]://{route-name}.{route-namespace}.{cluster-level-suffix} |
addresses |
[]Addressable |
Since v1.3. Addresses lists every reachable endpoint for this service — one per gateway its route attaches to, plus the cluster-local address. Each entry's Name carries the operator-declared class (see IngressGatewaySpec.Class): "internal", "external", "cluster-local", or any config-defined value. Derived from the same builder that produces the HTTPRoutes, so it never drifts from the actual routing. status.url is the primary gateway entry and status.address is the "cluster-local" entry — both projections of this list. |
components |
map[ComponentType]ComponentStatusSpec |
Statuses for the components of the InferenceService |
modelStatus |
ModelStatus |
Model related statuses |
migrationHistory |
[]MigrationHistoryEntry |
Since v1.3. MigrationHistory is a rolling window of OMENative migration requests processed against this InferenceService. Bounded to the most recent entries; older entries are dropped (and optionally archived to a controller-owned ConfigMap). |
mountedOverlays |
[]MountedOverlay |
Since v1.3. MountedOverlays lists overlays the controller attached to the pod spec. Skipped overlays (disabled, NotReady, NotFound) surface via the OverlaysReady condition. |
traffic |
TrafficStatus |
Since v1.3. Traffic reflects the resolved backend traffic policy and the emitted policy resource. Populated only when traffic intent is declared via spec.traffic or any ome.io/* traffic annotation; otherwise nil so older clients see nothing. |
canary |
CanaryStatus |
Since v1.3. Canary mirrors the canary run of the unit that owns the ISVC entrypoint (the router's when it has one, else the engine's); the per-unit copy on ComponentStatusSpec.Canary is authoritative. Absent until a canary first arms; afterwards it carries that unit's most recent run, a finished one included (see CanaryStatus). |
placement |
PlacementStatus |
Since v1.3. Placement reports multi-cluster placement of this ISVC, set by the control-plane fan-out controller. Empty on workload clusters and on single-cluster deployments. |
pinnedRevisionName |
string |
PinnedRevisionName is the ControllerRevision (OME ns) driving pod specs. Empty when autoSync is true. |
lastRuntimeSyncToken |
string |
LastRuntimeSyncToken is the ome.io/runtime-sync annotation value at last pin advance; the controller advances the pin when the live annotation differs from this. |
rollout |
RolloutStatus |
Since v1.3. Rollout is the run-model surface: the pinned active-run plan the executors consume, the previous run's bounded record, and the always-current per-group source resolution (including shadowed-policy previews). |
rolloutCoordination |
RolloutCoordinationStatus |
Since v1.3. RolloutCoordination reports per-group cross-Component coordination state for the InferenceService. Populated only when spec.rollout declares blueGreen/rollingUpdate groups (canary groups report under status.canary instead). |
| 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: `Create`, `Update`, `Restart`, `Migrate`, `Delete`. |
step |
string |
Step is the fine-grained resume point within the operation (e.g., Drain, DeletePods, WaitZero, Recreate, WaitReady). |
startedAt |
Time |
StartedAt is when this operation began. |
lastProgressAt |
Time |
LastProgressAt is when the operation last advanced. Used for stall detection. |
deadline |
Time |
Deadline is the hard timeout for the current Step. Zero (null) means the step clock is parked (e.g. while the instance's pods are admission-gated); optional + nullable so the parked null is accepted by the apiserver. |
retryCount |
int32 |
RetryCount is the per-step escalation counter. |
targetRevision |
string |
TargetRevision is the ControllerRevision the operation is converging toward. |
reason |
string |
Reason is a short cause string for the operation. Set once, when the operation starts, by whichever state machine owns it (the restart trigger, the revision-roll cause): it names WHY the operation exists and must survive for the operation's lifetime. |
waiting |
string |
Waiting is a short token naming an EXTERNAL condition currently holding the operation back — e.g. "QuotaExceeded" when admission refuses the operation's pods for lack of quota. Distinct from Reason, which names why the operation exists: Waiting comes and goes while the operation runs, so overloading Reason would erase the operation's cause. Empty means nothing external is blocking. A token only: the blocking authority's own message is volatile (an exceeded-quota message moves as other workloads come and go) and belongs in the Event, not in status. |
capacityRefusedAt |
Time |
CapacityRefusedAt is when admission last refused one of the operation's pod creates for lack of quota. The refusal is an apiserver answer to a call the create pass made, so it cannot be read off the cluster on a later pass: it is recorded here, and the hold pass converts it into the Waiting token and the deadline park on every pass it stands. Cleared by a create that completes with no refusal. Empty means the last create was not refused for capacity. |
strategy |
string |
Strategy is the update strategy the operation runs under, pinned when the operation opens. UpdateStrategy is not part of the revision payload, so editing it retargets nothing: an attempt keeps the mechanism it started with — a patch already under way is not re-dispatched as a recreate, a surge already spent is not unwound — and the edit reaches the Instance at its next admitted attempt. Set only when Type=Update. |
surgeIndex |
int32 |
SurgeIndex is the Instance index allocated for a surge replacement. Set only when Type=Migrate. |
fromNode |
string |
FromNode is the node the migrating Instance is being moved off. Set only when Type=Migrate. |
hintTargetNodes |
[]string |
HintTargetNodes is the caller-supplied preferred-node list for a migration. Set only when Type=Migrate. |
requestUUID |
string |
RequestUUID is the migration request UUID. Set only when Type=Migrate. |
| Field | Type | Description |
|---|---|---|
members |
string |
Members is the index set of every Instance that has a row. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`. |
rowOrder |
[]int32 |
RowOrder is the dense row order when it is not the ascending Members order: every member exactly once, in the order the DenseV1 list would carry. Absent means ascending Members order. Minimum items: `1`. Minimum per item: `0`. |
phases |
[]InstanceStatusPhaseGroup |
Phases groups Instances by lifecycle phase. Every member appears in exactly one group; there is no default phase. Minimum items: `1`. |
runningRevisions |
[]InstanceStatusRevisionGroup |
RunningRevisions groups Instances by nonempty running revision. A member absent from every group has an empty running revision. Minimum items: `1`. |
targetRevisions |
[]InstanceStatusRevisionGroup |
TargetRevisions groups Instances by nonempty target revision. A member absent from every group has an empty target revision. Minimum items: `1`. |
incarnations |
[]InstanceStatusIncarnationGroup |
Incarnations groups Instances by nonzero incarnation. A member absent from every group has incarnation 0. Minimum items: `1`. |
podCounts |
[]InstanceStatusCountGroup |
PodCounts groups Instances by positive podCount. A member absent from every group has podCount 0. Minimum items: `1`. |
servingPodCounts |
[]InstanceStatusCountGroup |
ServingPodCounts groups Instances by positive servingPodCount. A member absent from every group has servingPodCount 0. Minimum items: `1`. |
availablePodCounts |
[]InstanceStatusCountGroup |
AvailablePodCounts groups Instances by positive availablePodCount. A member absent from every group has availablePodCount 0. Minimum items: `1`. |
admitted |
string |
Admitted is the index set of Instances whose admitted is true. Absent means no Instance is admitted. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`. |
activeOrdinalOne |
string |
ActiveOrdinalOne is the index set of Instances whose activeOrdinal is 1. Absent means every activeOrdinal is 0. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`. |
entries |
[]InstanceStatusEntry |
Entries carries the per-Instance records that are not grouped: conditions, readySince, operation, and lastFailure. At most one entry per member, in ascending index order, each carrying at least one of those records. A member without an entry has none of them. Minimum items: `1`. |
| Field | Type | Description |
|---|---|---|
value |
int32 |
Value is the shared positive count. Minimum: `1`. |
indexes |
string |
Indexes is the canonical index set of the Instances with this value. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`. |
| Field | Type | Description |
|---|---|---|
index |
int32 |
Index is the Instance this entry belongs to; it is a member. Minimum: `0`. |
conditions |
[]Condition |
Conditions is the Instance's conditions. Minimum items: `1`. |
readySince |
Time |
ReadySince is the Instance's readySince. |
operation |
InstanceOperation |
Operation is the Instance's in-flight operation record. |
lastFailure |
InstanceTermination |
LastFailure is the Instance's preserved failure diagnostics. |
announced |
[]string |
Announced is the Instance's record of once-only messages already delivered. Minimum items: `1`. |
| 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: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`. |
| 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: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`. |
| Field | Type | Description |
|---|---|---|
value |
string |
Value is the shared revision name; the empty revision is never grouped. Minimum length: `1`. |
indexes |
string |
Indexes is the canonical index set of the Instances with this value. Minimum length: `1`. Pattern: `^(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?(,(0|[1-9][0-9]*)(-(0|[1-9][0-9]*))?)*$`. |
| 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). |
| 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: `1`. |
advanced |
AdvancedConfig |
Advanced ScaledObject configuration — horizontalPodAutoscalerConfig, restoreToOriginalReplicaCount. |
pollingInterval |
int32 |
PollingInterval is the interval, in seconds, at which KEDA checks each trigger. Defaults to the KEDA-side default when unset. |
cooldownPeriod |
int32 |
CooldownPeriod is the time, in seconds, KEDA waits before scaling down after the last trigger fires. Defaults to the KEDA-side default when unset. |
idleReplicaCount |
int32 |
IdleReplicaCount enables scaling to a fixed count when no triggers fire (commonly 0 for scale-to-zero). Must be strictly less than the effective MinReplicaCount. |
fallback |
Fallback |
Fallback policy applied when the metric source becomes unavailable. |
| Field | Type | Description |
|---|---|---|
triggers Required |
[]KedaTriggerTemplate |
Minimum items: `1`. |
advanced |
AdvancedConfig |
Advanced ScaledObject configuration, verbatim. |
pollingInterval |
int32 |
|
cooldownPeriod |
int32 |
|
idleReplicaCount |
int32 |
|
fallback |
FallbackTemplate |
| 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: `1`. |
providerRef |
MetricProviderRef |
ProviderRef binds the trigger's endpoint by logical provider name. |
metricType |
MetricTargetType |
MetricType is forwarded to the rendered trigger. Allowed values: `AverageValue`, `Value`. |
queryReturnsDesiredReplicas |
bool |
QueryReturnsDesiredReplicas declares that the trigger's query already computes the desired replica count. When true, admission requires MetricType=AverageValue: the HPA's Value math is ceil((metric/threshold) x readyPods), which breaks desired-count queries. |
metadata Required |
map[string]string |
Metadata is the KEDA trigger metadata. Admission rejects the keys "serverAddress" and "authModes" (the provider binding owns them), and requires "ignoreNullValues" to be explicit on prometheus triggers. |
| 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: `kubeconfig`. |
| 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 `PodSpec` appear directly in this object. |
runner |
RunnerSpec |
Runner container override for customizing the main container. This is essentially a container spec that can override the default container. Provides fine-grained control over the container that executes the leader node's coordination logic. |
| 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: `0`. |
migrationPolicy |
MigrationPolicy |
MigrationPolicy controls whether and how OMENative honors a migration request annotation for this Component. |
| 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. |
| 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: `0`. Maximum: `100`. |
| Field | Type | Description |
|---|---|---|
name Required |
string |
Minimum length: `1`. |
| Field | Type | Description |
|---|---|---|
at |
Time |
At is the time the event was recorded. |
message |
string |
Message describes the observation. |
| 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"). |
| 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. |
| 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. |
| Field | Type | Description |
|---|---|---|
backend |
string |
Backend identifies the configured cache provider. |
sourceUri |
string |
SourceUri is the model source URI being cached. |
| Field | Type | Description |
|---|---|---|
failedCopies |
int |
How many copies of the model failed to load recently. Default: `0`. |
totalCopies |
int |
How many copies of the model are loaded. |
| 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 |
| 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: `Equal`. |
weight |
int64 |
Weight of the model format in the runtime selector, used to prioritize modelFormat Default: `1`. |
| 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: `Equal`. |
weight |
int64 |
Weight of the framework in the runtime selector, used to prioritize modelFramework Default: `1`. |
| Field | Type | Description |
|---|---|---|
name Required |
string |
|
kind |
string |
Default: `ClusterBaseModel`. |
apiGroup |
string |
Default: `ome.io`. |
| 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: `ClusterBaseModel`. |
apiGroup |
string |
APIGroup of the resource being referenced. Specifies the Kubernetes API group of the referenced model. Default: `ome.io`. |
fineTunedWeights |
[]string |
FineTunedWeights names the FineTunedWeight resources to apply to the base model. |
overlays |
[]ModelOverlayRef |
Since v1.3. Overlays declares additional BaseModels attached to every serving pod alongside the primary. Each overlay is mounted (PVC/PerNode) or env-addressable (Sharded) at /opt/ml/model-overlays/<name> and exposed via OVERLAY_<UPPERCASED_NAME>_MODEL_PATH. Runner selects at request time; OME does not detect failures or auto-swap. Disabled or NotReady overlays are silently omitted. |
| Field | Type | Description |
|---|---|---|
activeModelState |
ModelState |
High level state string: Pending, Standby, Loading, Loaded, FailedToLoad Default: `Pending`. |
targetModelState |
ModelState |
Default: `""`. |
| 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. |
| 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. |
| 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. |
| Field | Type | Description |
|---|---|---|
name |
string |
|
envVar |
string |
|
mountPath |
string |
MountPath is empty for Sharded overlays (fetched at runtime). |
distribution |
string |
| 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 `ome.io/instance-incarnation` label. |
phase |
OMENativeInstancePhase |
Phase is the lifecycle phase of the Instance. |
runningRevision |
string |
RunningRevision is the ControllerRevision the live pods are running. |
targetRevision |
string |
TargetRevision is the ControllerRevision the live pods are converging toward. |
podCount |
int32 |
PodCount is the total number of pods owned by this Instance. |
readyPodCount |
int32 |
ReadyPodCount is retained for API compatibility. OMENative derives readiness from Pods and does not persist this field. |
servingPodCount |
int32 |
ServingPodCount is the number of pods that are BOTH ContainersReady AND have serving=True on the controller-managed readiness gate — i.e., pods actually in the load balancer rotation. Diverges from ReadyPodCount whenever the controller flips the serving gate (in-place updates, drain steps, etc.). MaxUnavailable budgets are computed against the serving count, not the ready count, so that "missing from traffic" reflects reality. |
availablePodCount |
int32 |
AvailablePodCount is the number of pods that are Available: in rotation on the Component's headless Service and, when lifecycle.minReadySeconds is set, Ready for at least that long. |
scheduledPodCount |
int32 |
ScheduledPodCount is retained for API compatibility. OMENative derives scheduling state from Pods and does not persist this field. |
admitted |
bool |
Admitted is true when this Instance's pods have left the Kueue admission scheduling gate (quota granted): the Instance has pods and none are admission-gated. False while gated/queued or before pods exist. Used by the control plane to decide the fan-out race winner. |
nodesOccupied |
[]string |
NodesOccupied is retained for API compatibility. OMENative reads current placement from Pods and does not persist this field. |
conditions |
[]Condition |
Conditions reports Instance-level conditions. Defined types include AllPodsScheduled, AllPodsReady, AllPodsAvailable, Drained, Failed, ProgressDeadlineExceeded. |
readySince |
Time |
ReadySince is when the Instance last entered Ready. Anchors post-Ready failure detection: container restarts that finished before this time belong to boot and never trigger a recreate. |
operation |
InstanceOperation |
Operation is the durable record of an in-flight destructive action against this Instance. Set before the action starts, cleared after it completes. Lets a crashed controller resume work without diffing pod state. |
activeOrdinal |
int32 |
ActiveOrdinal identifies which of two pod-naming slots (0 or 1) currently holds the canonical pod for this single-pod Instance. SurgeThenDrain alternates between slots: the surge creates a new pod at `1 - ActiveOrdinal`, waits Ready, drains the old pod, then advances ActiveOrdinal to the new slot. Stays 0 for InPlace and Recreate strategies (those reuse the same pod name). Defaults to 0 on initial create. Minimum: `0`. Maximum: `1`. |
lastFailure |
InstanceTermination |
LastFailure preserves the diagnostics of the pod whose failure (or stuck-pod escalation) last triggered a recreate of this Instance. OMENative drains and deletes every gang pod on recreate, so the failing pod and its container termination state vanish from the cluster — this field is the surviving trace operators read when a multi-node Instance keeps recreating. Set on the first pass of a failure-driven Restart and on stuck-pod escalation; left untouched by revision-roll recreates (those carry their cause in Operation.Reason instead) so the most recent genuine failure isn't overwritten by a clean rollout. |
announced |
[]string |
Announced records the once-only messages this Instance has already emitted, one entry per message: the event reason it was emitted under and the episode it was emitted in, joined by "@". A warning an operator needs to see once — the gang has no co-location term, the PodGroup was rebuilt, a repair is held, a drain is past its deadline — is emitted only when its entry is absent, and is stamped in the same write that emits it. Recording it on the Instance rather than in controller memory is what makes the once-only property hold per workload rather than per process, and survive a controller restart. The episode is the in-flight operation, or the incarnation when there is none: a new attempt or a rebuilt Instance has its own messages to deliver, and the entries of the episode it replaced no longer match. |
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name of the referenced object |
namespace |
string |
Namespace of the referenced object |
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name is the name of the parent InferenceService. Minimum length: `1`. |
| Field | Type | Description |
|---|---|---|
resourceName |
string |
|
resourceFlavor |
string |
|
demand |
int64 |
Minimum: `1`. |
allocatable |
int64 |
Minimum: `0`. |
observedAt |
Time |
|
reportUID |
UID |
|
reportResourceVersion |
string |
|
attribution |
AcceleratorCapacityAttribution |
| 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: `0`. |
pools |
[]PlacementCapacityPool |
| Field | Type | Description |
|---|---|---|
component Required |
ComponentType |
Allowed values: `engine`, `decoder`. |
renderingHash Required |
string |
RenderingHash includes pod shapes, worker count, mode and RuntimeClasses. Pattern: `^[a-f0-9]{64}$`. |
| Field | Type | Description |
|---|---|---|
component Required |
ComponentType |
Allowed values: `engine`, `decoder`, `router`. |
replicas Required |
int32 |
Minimum: `0`. |
| Field | Type | Description |
|---|---|---|
fingerprint Required |
string |
Fingerprint identifies the complete resolved resource/flavor demand. Pattern: `^[a-f0-9]{64}$`. |
components Required |
[]PlacementComponentDemand |
Components includes exactly the declared Engine/Decoder components. Minimum items: `1`. Maximum items: `2`. |
| Field | Type | Description |
|---|---|---|
planID Required |
string |
|
revision Required |
int64 |
Minimum: `1`. |
sourceUID Required |
UID |
|
clusterUID Required |
UID |
|
pauseSurge Required |
bool |
PauseSurge prevents new surplus-producing operations while existing operations retain their reservations and may finish cleanup. |
demand |
PlacementDemandContract |
Demand requires member rendering to match the accepted normalization inputs before a component can project workloads. Absent for static plans. |
replicaFloors |
[]PlacementComponentFloor |
ReplicaFloors binds the full per-home policy to the floors accepted by placement. Runtime changes cannot expand a paused placement reservation. Minimum items: `1`. Maximum items: `3`. |
| Field | Type | Description |
|---|---|---|
inputDigest |
string |
InputDigest binds these resolved floors to the accepted source intent. |
replicaFloors |
[]PlacementComponentFloor |
Minimum items: `1`. Maximum items: `3`. |
| Field | Type | Description |
|---|---|---|
id |
string |
|
mode |
PlacementMode |
Mode identifies the execution semantics of this accepted plan. Allowed values: `Single`, `All`, `Split`, `SplitByCapacity`. |
winner |
string |
Winner commits the admitted Single home before race losers are removed. Empty means the persisted Single admission race has not selected a home. |
singleMove |
PlacementSingleMoveStatus |
SingleMove retains bounded replacement-race state until the old home and losing probes have been removed. Winner remains the serving home. |
adoptionDigest |
string |
AdoptionDigest fixes the initial intent while standing homes are being inventoried. A changed intent cannot expand an incomplete inventory. |
revision |
int64 |
Revision increases for every accepted allocation or drain instruction. Minimum: `1`. |
sourceUID |
UID |
|
observedGeneration |
int64 |
Minimum: `1`. |
inputDigest |
string |
InputDigest identifies resolved source intent and accepted allocation inputs. Heartbeat timestamps and report resource versions do not change this digest. |
pauseSurge |
bool |
PauseSurge keeps new member rollout reservations stopped while placement owns the shared transition allowance. Releasing it creates a new revision. |
requestedReplicas |
int64 |
RequestedReplicas includes the assigned and unassigned desired floor. Minimum: `0`. |
assignedReplicas |
int64 |
Minimum: `0`. |
unassignedReplicas |
int32 |
Minimum: `0`. |
originalUnassignedReplicas |
int32 |
OriginalUnassignedReplicas retains the unassigned part of the original floor. Minimum: `0`. |
| 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. |
| 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: `1`. Maximum items: `64`. |
componentAffinity |
ComponentClusterAffinity |
ComponentAffinity holds one affinity term list per component and requires the ComponentAffinity policy. Every component must match the same clusters; in Split, each component's weights set its own shares. An explicit null is invalid. |
maxSurge |
int32 |
Deprecated: MaxSurge is ignored. A placement move may hold one extra full copy of the desired allocation; admission warns when this is set. Minimum: `0`. |
replacementTimeout |
Duration |
ReplacementTimeout bounds a non-admitting probe during a healthy Single move. Omission retains pending probes; a positive duration allows rotation. Validation: replacementTimeout must be a positive duration. |
split |
SplitSpec |
Split provides the requested floor and optional per-home ceiling for Split and SplitByCapacity. ClusterAffinity rejects it in other modes. |
| 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. |
| 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 |
| 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: - spec.hostPID - spec.hostIPC - spec.hostUsers - spec.securityContext.appArmorProfile - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup - spec.securityContext.fsGroupChangePolicy - spec.securityContext.sysctls - spec.shareProcessNamespace - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups - spec.securityContext.supplementalGroupsPolicy - spec.containers[*].securityContext.appArmorProfile - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities - spec.containers[*].securityContext.readOnlyRootFilesystem - spec.containers[*].securityContext.privileged - spec.containers[*].securityContext.allowPrivilegeEscalation - spec.containers[*].securityContext.procMount - spec.containers[*].securityContext.runAsUser - spec.containers[*].securityContext.runAsGroup |
hostUsers |
bool |
Use the host's user namespace. Optional: Default to true. If set to true or not present, the pod will be run in the host user namespace, useful for when the pod needs a feature only available to the host user namespace, such as loading a kernel module with CAP_SYS_MODULE. When set to false, a new userns is created for the pod. Setting false is useful for mitigating container breakout vulnerabilities even allowing users to run their containers as root without actually having root privileges on the host. This field is alpha-level and is only honored by servers that enable the UserNamespacesSupport feature. |
schedulingGates |
[]PodSchedulingGate |
SchedulingGates is an opaque list of values that if specified will block scheduling the pod. If schedulingGates is not empty, the pod will stay in the SchedulingGated state and the scheduler will not attempt to schedule the pod. SchedulingGates can only be set at pod creation time, and be removed only afterwards. |
resourceClaims |
[]PodResourceClaim |
ResourceClaims defines which ResourceClaims must be allocated and reserved before the Pod is allowed to start. The resources will be made available to those containers which consume them by name. This is an alpha field and requires enabling the DynamicResourceAllocation feature gate. This field is immutable. |
| Field | Type | Description |
|---|---|---|
anchor |
ComponentType |
Anchor is the Component whose replica count drives followers. Allowed values: `engine`, `decoder`, `router`. Default: `engine`. |
ratios |
map[ComponentType]Quantity |
Ratios maps each follower Component to its replica ratio relative to the anchor. A ratio of 1.0 means parity; 0.25 means one follower per four anchor replicas (rounded up). Components not listed scale independently. |
| 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. |
| Field | Type | Description |
|---|---|---|
value |
int32 |
Value is a fixed replica count. Minimum: `0`. |
fromComponent |
ComponentBoundsField |
FromComponent resolves against the consuming component's effective replica bounds — after defaulting and, on a placement-derived InferenceService, after the per-home bounds rewrite. |
| 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. |
| 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: `0`. |
maxUnavailable |
IntOrString |
MaxUnavailable is the maximum number of Instances (or fraction) allowed to be in a non-Ready state during the rollout. Accepts either an absolute integer count (e.g. 2) or a percent string (e.g. "25%"). Percent values resolve to ceil(replicas * percent / 100) at reconcile time so the budget scales with the Component's replica count. Unset inherits the ServingRuntime's value; when neither sets it and the strategy is not SurgeThenDrain, the cluster default applies, and without one this layer sets no cap. |
maxSurge |
IntOrString |
MaxSurge is the maximum number of extra Instances (or fraction) the rollout may create above the Component's desired replica count during a rolling update. Accepts either an absolute integer count (e.g. 1) or a percent string (e.g. "25%"). Percent values resolve to ceil(replicas * percent / 100) at reconcile time. Mirrors the semantics of upstream appsv1.Deployment.Strategy.RollingUpdate.MaxSurge — extra capacity is created and brought to Ready before old Instances are drained, enabling zero-capacity-dip rollouts. When the Component participates in a RolloutCoordinationGroup with a non-zero CoordinationPacing.MaxSurge, the group-wide ceiling caps the per-Component MaxSurge. Unset inherits the ServingRuntime's value; when neither sets it and the strategy is SurgeThenDrain, the cluster default applies, and without one this layer sets no cap. |
| 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: `1`. |
onInconclusive |
OnInconclusive |
OnInconclusive selects what to do when a sample cannot be completed (Prometheus unreachable, query error, or empty result) past the stall timeout — distinct from a metric breach. - Hold (default): keep traffic at the current step and escalate to Failed for an operator decision. A monitoring outage is not evidence the canary is bad. - Rollback: fail-safe — treat "can't tell" as "assume bad" and roll back on the first inconclusive sample, without waiting out the stall timeout. - RollbackOnStall: ride out transient gaps like Hold, but roll back instead of parking once the stall timeout expires. Allowed values: `Hold`, `Rollback`, `RollbackOnStall`. |
metrics Required |
[]AnalysisMetric |
Metrics are the success conditions. A sample passes only when EVERY metric passes (AND). At least one is required; an analysis with no metrics could never fail and would gate nothing. Minimum items: `1`. Maximum items: `10`. |
| 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. |
| 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. |
| Field | Type | Description |
|---|---|---|
groups |
[]RolloutCoordinationGroupStatus |
Groups reports the observed state of each declared rollout group, indexed by position in spec.rollout.groups[]. |
| Field | Type | Description |
|---|---|---|
components Required |
[]ComponentType |
Components lists the Component names in this group (they roll together). Valid values: "router", "engine", "decoder". Minimum items: `1`. Maximum items: `3`. |
order |
[]ComponentType |
Order optionally pins the sequence in which this group's Components roll. No progression applies it — the Components in a group advance together — so admission rejects a non-empty order (on create and on any update that changes spec.rollout) rather than accept a sequence the engine does not enforce. To roll Components one at a time, declare one single-Component blueGreen group per Component, in the desired list order. Must reference only Components in this group. Maximum items: `3`. |
canary |
GroupCanary |
Canary advances the group through explicit capacity + service-level-traffic steps with optional gates. One-of progression. |
blueGreen |
GroupBlueGreen |
BlueGreen surges the full new set, then flips traffic atomically. One-of progression. |
rollingUpdate |
GroupRollingUpdate |
RollingUpdate replaces pods gradually within the surge/unavailable budget, tolerating mixed revisions during the window. One-of progression. |
policyRef |
RolloutPolicyRef |
PolicyRef names a same-namespace RolloutPolicy that supplies this group's progression. A sibling of the progression one-of, not an arm of it: the ref may coexist with one inline progression, and the inline block wins (the preview/rollback mechanism) — the shadowed policy's would-pin digest is published in status.rollout.groups[]. A group whose only progression is an unresolvable ref PARKS at run open (fail-closed); it never falls back to the default blueGreen, because silently removing a declared gate is the failure this API exists to prevent. |
soak |
Duration |
Soak is the wait AFTER this group completes, before the next group begins. It is honored only when the rollout is a sequence of single-Component blueGreen groups (the run that collapses to the internal Sequential state machine); ignored on the last group. Admission rejects a soak the engine would silently drop — on a canary, multi-Component, or rollingUpdate group, or on a rollout that does not collapse to that sequence. |
maintainRatio |
MaintainRatio |
MaintainRatio guards the cross-Component replica ratio while this group rolls. Meaningful only on multi-Component blueGreen/rollingUpdate groups (e.g. a PD engine+decoder pair); ignored on single-Component groups and rejected by admission on canary groups (the canary engine does not enforce it). |
| 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. |
| 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: `0`. Maximum: `100`. |
pause |
RolloutPause |
Pause holds the step: with a Duration it is a timed advance (or, when Analysis is set, the bake window); without one it is a manual hold for the ome.io/rollout-promote annotation. Absent (and no Analysis) advances immediately. |
analysis |
RolloutAnalysis |
Analysis opts this step into metric-gated promotion: it carries the checks (metrics) and policy (interval, failureLimit, onInconclusive) for THIS step. The metrics source is GroupCanary.Prometheus, shared by all analysis steps. Absent leaves the step manual/timed/immediate per Pause. |
| 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). |
| Field | Type | Description |
|---|---|---|
duration |
Duration |
Duration to pause at this step; see the type doc for how each gate uses it. |
| Field | Type | Description |
|---|---|---|
name Required |
string |
Name of the RolloutPolicy in the InferenceService's namespace. Minimum length: `1`. |
progression Required |
RolloutProgressionKind |
Progression declares the referenced policy's kind so shape-dependent admission rules evaluate without dereferencing the policy. A mismatch with the policy's actual body parks the rollout at run open (ProgressionMismatch); it cannot mis-execute. |
kind |
string |
Kind is reserved: v1 admission accepts only "RolloutPolicy"; "ClusterRolloutPolicy" is the reserved cluster-scoped twin. Default: `RolloutPolicy`. |
| 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. |
| 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 |
| 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. |
| 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). |
| Field | Type | Description |
|---|---|---|
groups |
[]RolloutRunGroup |
| Field | Type | Description |
|---|---|---|
source |
RolloutPlanSource |
|
policyRef |
RolloutPolicyRef |
|
portableDigest |
string |
| 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). |
| 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. |
| 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: `3`. |
groupOrdering |
RolloutGroupOrdering |
GroupOrdering declares what groups[] list order means. Sequential (the default) promises group N completes before group N+1 begins, and is admitted only for the shape that actually enforces it. Concurrent declares the groups independent: they roll at the same time on their disjoint Components, each with its own progression, gates, and rollback. Concurrent is what lets one InferenceService run, say, a router canary and an engine canary as unrelated rollouts. Changing this does not change how the engine executes a list it could not sequence — that was always concurrent. It changes whether such a list is an error or a declaration of intent. |
pairingProtocol |
string |
PairingProtocol declares the engine↔decoder wire-compatibility contract for prefill-decode pairing (e.g. a KV-transfer protocol generation, such as "nixl-v2"). It is an opaque, operator-owned token compared only for equality; bump it ONLY when the engine↔decoder wire contract breaks. The value rides each engine and decoder revision: changing it mints new revisions for both Components (a rollout), stamps ome.io/pairing-protocol on their pods and per-revision Services, and is published on each traffic target so routing pairs only engine and decoder revisions whose values are equal. Empty or unset pairs with anything, so setting or clearing the token is upgrade-neutral. Changing it between two non-empty values requires engine and decoder to roll as one blueGreen or canary group. Maximum length: `63`. Pattern: `^[A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?$`. |
| 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. |
| Field | Type | Description |
|---|---|---|
| Embedded | PodSpec |
PodSpec defines the container configuration for the router The fields of `PodSpec` appear directly in this object. |
| Embedded | ComponentExtensionSpec |
ComponentExtensionSpec defines deployment configuration like min/max replicas, scaling metrics, etc. The fields of `ComponentExtensionSpec` appear directly in this object. |
runner |
RunnerSpec |
This is essentially a container spec that can override the default container |
config |
map[string]string |
Additional configuration parameters for the runner. This can include framework-specific settings. |
| 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: `1`. Pattern: `^/`. |
method |
string |
Method is the HTTP method used by the capacity request. Allowed values: `GET`, `HEAD`, `POST`. |
format |
string |
Format names the response shape returned by the capacity endpoint. Minimum length: `1`. |
options |
map[string]string |
Options contains format-specific settings interpreted by the configured capacity format. |
period |
Duration |
Period is how often each serving home is polled. |
timeout |
Duration |
Timeout bounds one capacity request and must be shorter than Period. |
samples |
int32 |
Samples is the number of recent readings in the capacity window. Minimum: `1`. |
quorum |
int32 |
Quorum is the number of readings required to corroborate a lower capacity. Minimum: `1`. |
maxAge |
Duration |
MaxAge is the maximum accepted age of a capacity report. |
| 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: `1`. Pattern: `^/`. |
method |
string |
Method is the HTTP method used by the probe. Allowed values: `GET`, `HEAD`, `POST`. |
acceptStatuses |
[]int32 |
AcceptStatuses are response codes counted as a successful probe. Minimum items: `1`. Minimum per item: `100`. Maximum per item: `599`. |
gateStatuses |
[]int32 |
GateStatuses are response codes counted as a failed probe. A code in neither status list is inconclusive. Minimum items: `1`. Maximum items: `500`. Minimum per item: `100`. Maximum per item: `599`. |
period |
Duration |
Period is how often each serving home is probed. |
timeout |
Duration |
Timeout bounds one probe request and must be shorter than Period. |
failureThreshold |
int32 |
FailureThreshold is the number of consecutive failures required to gate a serving home. Minimum: `1`. |
successThreshold |
int32 |
SuccessThreshold is the number of consecutive successes required to restore a gated serving home. Minimum: `1`. |
allFailedPolicy |
RoutingAllFailedPolicy |
AllFailedPolicy controls the result when every serving home has crossed the failure threshold. |
| Field | Type | Description |
|---|---|---|
options |
map[string]string |
Options are interpreted and validated by the operator-selected publisher. Maximum keys: `32`. Validation: publisher option keys must contain 1-128 characters and values must contain 1-4096 characters. |
| 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. |
| 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: - "default" Size MUST equal 1 - "leader" Size MUST equal 1 - "worker" Size MUST be >= 1 Minimum: `1`. |
template Required |
PodTemplateSpec |
Template is the fully-rendered pod template for this Runner. Labels include ome.io/runner=<name>. The InferenceReplica controller stamps OME_RUNNER (leader|worker|default) and, for non-leader pods, OME_LEADER_ADDRESS (short-form DNS, matching LWS conventions) onto the rendered pod at create. |
| Field | Type | Description |
|---|---|---|
| Embedded | Container |
Container spec for the runner. Provides complete Kubernetes container configuration for the primary execution container. The fields of `Container` appear directly in this object. |
| 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. |
| Field | Type | Description |
|---|---|---|
mode |
ScalingMode |
Mode selects the coordination strategy. Allowed values: `Independent`, `Proportional`, `Pinned`. Default: `Independent`. |
proportional |
ProportionalPolicy |
Proportional configuration; required when Mode == "Proportional". |
| Field | Type | Description |
|---|---|---|
engine Required |
string |
Engine specifies the backend model server engine. Supported values: "vLLM", "SGLang", "TGI". Allowed values: `vLLM`, `SGLang`, `TGI`. |
version Required |
string |
Version specifies the version of the model server (e.g., "0.5.3"). |
gpuType Required |
string |
GpuType specifies the type of GPU used by the model server. Supported values: "H100", "A100", "MI300", "A10". Allowed values: `H100`, `A100`, `MI300`, `A10`. |
gpuCount Required |
int |
GpuCount indicates the number of GPU cards available on the model server. |
| 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. |
| 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: `ClusterServingRuntime`. |
apiGroup |
string |
APIGroup of the resource being referenced. Specifies the Kubernetes API group of the referenced runtime. Default: `ome.io`. |
autoSync |
bool |
AutoSync (default true) re-renders pod specs from the live runtime every reconcile. When false, the ISVC pins to a ControllerRevision snapshot; bump ome.io/runtime-sync or set spec.runtime.revision to roll forward. Default: `true`. |
revision |
string |
Revision pins to a named ControllerRevision in the OME namespace. Enables rollback; ignored when AutoSync is true. |
| 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 `ServingRuntimePodSpec` appear directly in this object. |
scalingPolicy |
ScalingPolicy |
Since v1.3. ScalingPolicy default for InferenceServices binding this runtime. Replaced wholesale by isvc.spec.scalingPolicy when set on the ISVC. Alpha. The API may change without notice. |
acceleratorRequirements |
AcceleratorRequirements |
AcceleratorRequirements specifies the accelerator requirements for this runtime |
| 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. |
| 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. |
| 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. |
| 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: `1`. |
maxReplicasPerCluster |
int32 |
MaxReplicasPerCluster is an optional local ceiling. Plans exceeding it are held; zero follows the assigned allocation without an extra ceiling. Minimum: `0`. |
| 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: - OCI Object Storage: oci://n/{namespace}/b/{bucket}/o/{object_path} - CNCF ModelPack: modelpack://{registry}/{repository}[:{tag}] - Persistent Volume: pvc://{pvc-name}/{sub-path} - Vendor-specific: vendor://{vendor-name}/{resource-type}/{resource-path} - Hugging Face: hf://{org}/{repo}[@{revision}] - Amazon S3: s3://{bucket}/{object_path} - Azure Blob Storage: az://{account}/{container}/{object_path} - Google Cloud Storage: gs://{bucket}/{object_path} - GitHub: github://{org}/{repo}[@{tag}] - Local filesystem: local://{path} |
nodeSelector |
map[string]string |
NodeSelector defines a set of key-value label pairs that must be present on a node for the model to be scheduled and downloaded onto that node. |
nodeAffinity |
NodeAffinity |
NodeAffinity describes the node affinity rules that further constrain which nodes are eligible to download and store this model, based on advanced scheduling policies. |
downloadPolicy |
DownloadPolicy |
DownloadPolicy describes the policy of downloading model artifacts. Supported policies: - AlwaysDownload, the default: always download a copy of the model to its path. - ReuseIfExists: reuse Hugging Face files that another model already downloaded to the node. |
| 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: `1`. |
acceleratorConfig |
map[string]AcceleratorModelConfig |
AcceleratorConfig provides accelerator-specific overrides for this model format |
| Field | Type | Description |
|---|---|---|
tensorParallelSize |
int64 |
tensorParallelSize specifies the size of the tensor parallelism Minimum: `0`. |
pipelineParallelSize |
int64 |
pipelineParallelSize specifies the size of the pipeline parallelism Minimum: `0`. |
dataParallelSize |
int64 |
dataParallelSize specifies the size of the data parallelism Minimum: `0`. |
| 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: `ControlPlane`. |
reported |
int32 |
Reported is the home's own servable-capacity figure, recorded whenever the endpoint source answered — including when it was at or above the plan and therefore did not lower Allocated. Keeping it visible in that case is what makes the ceiling auditable: Allocated alone cannot show that a report was received and found non-binding. Minimum: `0`. |
fallbackReason |
string |
FallbackReason explains why a configured endpoint capacity source did not produce an applied ceiling and the control-plane allocation was retained. Empty means capacity polling is disabled or its latest result was usable. |
| 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: `0`. Maximum: `1000000`. |
healthy |
bool |
Healthy is the readiness-plus-probe result for this home. An unready home is always weighted 0; a probe-unhealthy home may retain a positive weight only under a fleet-wide PreserveTraffic fallback. A manual DrainRefs override can set a healthy home to zero without changing its health evidence. |
capacity |
TrafficMapCapacity |
Capacity is the provenance of Weight: weight is proportional to min(allocated, ready) * factor, then gated by the active probe. |
probe |
TrafficMapProbe |
Probe is the active end-to-end health probe's contribution to Healthy, present only when probing is configured. Healthy alone does not say whether readiness or reachability failed, and those are different faults with different owners: readiness is the workload's, reachability is the path's (ingress, DNS, certificate, route). |
drainRefs |
[]string |
DrainRefs names the independent override IDs in the source InferenceService's ome.io/traffic-drain annotation that force this entry's weight to zero. Empty means no manual override contributed. |
| 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. |
| 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: `^sha256:[0-9a-f]{64}$`. |
result |
ProbeResult |
Result is the most recent probe attempt's verdict. Failing gates only after the configured threshold. Unknown does not change the previous gate. |
gated |
bool |
Gated is the current hysteresis gate. It remains true through an Unknown attempt until enough consecutive passing attempts reopen the home. |
lastProbeTime |
Time |
LastProbeTime is when the latest probe attempt completed, so a stalled prober is visible rather than being read as a steady pass. |
consecutiveFailures |
int32 |
ConsecutiveFailures counts unbroken Failing verdicts. The weight is gated only once this reaches the configured failure threshold: a single dropped packet must not move a large traffic share, and the reprogramming churn from flapping would itself be the outage. Minimum: `0`. |
message |
string |
Message explains the current Result — the observed status code, the transport error, or why the probe could not run. |
| Field | Type | Description |
|---|---|---|
trafficMapGeneration |
int64 |
TrafficMapGeneration is the generation whose positive plan was applied. Minimum: `1`. |
observedISVCGeneration |
int64 |
ObservedISVCGeneration is the source generation that produced the plan. Minimum: `1`. |
planCompatibilityDigest |
string |
PlanCompatibilityDigest identifies the effective publisher options that affect target identity or weights. Pattern: `^sha256:[0-9a-f]{64}$`. |
targets |
[]TrafficMapPublisherTarget |
Targets is the complete canonical target-to-weight plan. Every claimed target appears exactly once, including inactive targets at weight zero. Minimum items: `1`. Maximum items: `128`. |
| 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: `1`. Maximum length: `128`. |
claimedTargets |
[]string |
ClaimedTargets are publisher-defined canonical identifiers owned by this map. The publisher records the complete claim set before mutating any target. Identifiers are status-visible and must not contain credentials or secrets. Minimum items: `1`. Maximum items: `128`. Minimum length per item: `1`. Maximum length per item: `512`. |
observedOptionsDigest |
string |
ObservedOptionsDigest is the SHA-256 digest of the effective safe publisher options used by the most recent successful reconciliation. It is absent before the first successful reconciliation and does not determine target ownership. Pattern: `^sha256:[0-9a-f]{64}$`. |
lastPositive |
TrafficMapPublisherLastPositive |
LastPositive is the latest complete positive publisher plan that was fully applied. It is absent when no compatible plan is available for replay. |
| Field | Type | Description |
|---|---|---|
target |
string |
Target is a publisher-defined canonical identifier already covered by the enclosing publisher claim journal. Minimum length: `1`. Maximum length: `512`. |
weight |
int64 |
Weight is the exact non-negative integer applied by the publisher. Publisher-specific bounds are validated before replay. Minimum: `0`. |
| 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. |
| 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. |
| Field | Type | Description |
|---|---|---|
algorithm |
LoadBalancingType |
Algorithm selects the load-balancing algorithm. Absent = the Gateway implementation's default (LeastRequest for Envoy Gateway). Allowed values: `RoundRobin`, `LeastRequest`, `Random`, `ConsistentHash`. |
consistentHash |
ConsistentHashSpec |
ConsistentHash configures the hash key. Required when Algorithm=ConsistentHash; rejected otherwise (webhook). |
endpointOverride |
EndpointOverrideSpec |
EndpointOverride routes requests to a specific pod when a request header (e.g. "X-Endpoint-HostPort: 10.0.0.5:30000") is present and the endpoint is healthy; falls back to the configured Algorithm when the endpoint is unhealthy or the header is absent. Envoy Gateway only in alpha (no Istio equivalent). Translators that do not support endpoint override surface this as an UnsupportedField condition on the InferenceService. |
| 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. |
| 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. |
| Field | Type | Description |
|---|---|---|
| Embedded | PodSpec |
PodSpec for the worker. Allows customization of the Kubernetes Pod configuration specifically for worker nodes. The fields of `PodSpec` appear directly in this object. |
size |
int |
Size of the worker, this is the number of pods in the worker. Controls how many worker pod instances will be deployed for horizontal scaling. Unset inherits the ServingRuntime's value; when neither sets it, a declared leader gets one worker. |
runner |
RunnerSpec |
Runner container override for customizing the main container. This is essentially a container spec that can override the default container. Provides fine-grained control over the container that executes the worker node's processing logic. |
| Field | Type | Description |
|---|---|---|
clusterSource Required |
ClusterConnectionSource |
ClusterSource is how the control plane connects to this cluster. |
| Field | Type | Description |
|---|---|---|
conditions |
[]Condition |
Conditions report connection health ONLY (the Ready condition). Never capacity, never Kueue/quota state. |