Conditions Reference#
Every AIM resource reports its state through standard Kubernetes conditions. This page catalogs all conditions, their reasons, and what triggers them.
Reading conditions#
kubectl get aimservice <name> -o jsonpath='{.status.conditions}' | jq
Each condition has:
type — The condition name (e.g.,
Ready)status —
True,False, orUnknownreason — Machine-readable cause
message — Human-readable description
lastTransitionTime — When the status last changed
Framework conditions#
These conditions are managed by the reconciliation framework and appear on all AIM resources.
DependenciesReachable#
Whether upstream dependencies (referenced models, profiles, configs) can be fetched.
Status |
Reason |
Description |
|---|---|---|
|
|
All dependencies are reachable |
|
|
Cannot reach one or more dependencies |
AuthValid#
Whether authentication and authorization for referenced secrets and registries are valid.
Status |
Reason |
Description |
|---|---|---|
|
|
Authentication and authorization successful |
|
|
Authentication or authorization failure |
ConfigValid#
Whether the resource’s spec is valid and all referenced resources exist.
Status |
Reason |
Description |
|---|---|---|
|
|
Configuration is valid |
|
|
Configuration validation failed |
|
|
|
|
|
Autoscaling is configured but no scaling trigger resolves. See AutoscalingConfig. |
|
|
A referenced resource does not exist |
Ready#
Overall readiness — the aggregate of all other conditions and component health.
Status |
Reason |
Description |
|---|---|---|
|
|
All components are ready |
|
|
One or more components are not ready |
|
|
Waiting for components to become ready |
AIMService conditions (v1alpha2)#
AIMService reports per-component conditions in addition to the framework conditions. The condition catalog covers profile resolution, cache, KServe runtime, routing, and autoscaling.
ProfileReady#
Status |
Reason |
Description |
|---|---|---|
|
|
Profile found and is deployable |
|
|
No matching |
|
|
Profile exists but its own |
|
|
|
|
|
Selector returned multiple equally-scored candidates |
When ProfileReady=False, the controller suppresses downstream component conditions (InferenceServiceReady, HTTPRouteReady) — the resources aren’t being created until profile resolution succeeds.
ModelReady#
Set when spec.model is used (by-model, model+selector, or model.image with the v1alpha2 profile-pipeline annotation).
Status |
Reason |
Description |
|---|---|---|
|
|
Model found and ready |
|
|
Referenced model does not exist |
|
|
Model exists but is not ready |
|
|
Auto-creating a model from |
RuntimeConfigReady#
Status |
Reason |
Description |
|---|---|---|
|
|
Runtime config found (or no runtime config required) |
|
|
Referenced runtime config does not exist |
ProfileCacheReady#
Replaces v1alpha1’s CacheReady. Tracks the AIMProfileCache lifecycle.
Status |
Reason |
Description |
|---|---|---|
|
|
All cache artifacts are downloaded and verified |
|
|
Creating the profile cache |
|
|
Cache exists but download is incomplete |
|
|
Cache download failed |
|
|
Previously-ready cache is no longer available |
InferenceServiceReady#
Status |
Reason |
Description |
|---|---|---|
|
|
KServe |
|
|
Creating or updating the InferenceService |
|
|
Replica scaling in progress |
InferenceServicePodsReady#
Tracks whether the predictor pods are running and ready.
HTTPRouteReady#
Set only when spec.routing.enabled: true.
Status |
Reason |
Description |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
Routing enabled but no |
HPAReady#
Set only when spec.minReplicas / spec.maxReplicas are configured.
Status |
Reason |
Description |
|---|---|---|
|
|
HPA is active and metrics are available |
|
|
Waiting for KEDA to create HPA |
|
|
InferenceService not ready yet; metrics unavailable |
ScaleToZeroConfig#
Validates the scale-from-zero prerequisite that routing be enabled. Reported only when spec.minReplicas: 0 is set and routing is disabled (neither spec.routing.enabled nor a cluster-wide runtimeConfig.routing.enabled default is on). The 0->1 activation trigger scrapes gateway-side Envoy metrics that only exist once an HTTPRoute is created, so a routing-less scale-to-zero service could never wake — AIM Engine therefore rejects the spec instead of creating it.
Status |
Reason |
Description |
|---|---|---|
|
|
|
When valid, this check is silent — no condition or component-health entry is emitted.
AutoscalingConfig#
Validates that whenever autoscaling is configured (spec.minReplicas/spec.maxReplicas/spec.autoScaling) at least one KEDA scaling trigger resolves. The controller stamps autoscalerClass=external on the InferenceService and owns the KEDA ScaledObject directly, but that ScaledObject is only created when a trigger exists — the scale-from-zero activation trigger (minReplicas: 0) or a user-defined spec.autoScaling.metrics entry. Configuring autoscaling with neither leaves the predictor under external scaling control with nothing to drive it, so the declared replica bounds are never enforced (e.g. maxReplicas is set but the deployment never scales). AIM Engine rejects the spec instead of creating it.
Status |
Reason |
Description |
|---|---|---|
|
|
Autoscaling configured but no trigger resolves. Drives |
When valid, this check is silent — no condition or component-health entry is emitted.
AIMModel / AIMClusterModel conditions (v1alpha2)#
DiscoveryReady#
Set only for the official and base-image flows (spec.image set). Tracks the in-cluster discovery Job.
Status |
Reason |
Description |
|---|---|---|
|
|
Discovery cache is populated and the spec hash matches |
|
|
Discovery Job completed and produced a valid cache |
|
|
Discovery Job has been launched |
|
|
Discovery Job is running |
|
|
Discovery completed but logs could not be parsed |
|
|
Discovery cache |
|
|
Discovery Job failed (image pull failure, registry auth, etc.) |
|
|
Could not count current attempts |
|
|
Concurrent discovery cap reached; waiting for slot |
status.discovery.lastFailureReason records the most recent failure reason. The message includes the retry backoff window.
DerivationReady#
Set only for the fine-tuned and custom flows (spec.profiles set). Mirrors the child AIMProfileSet’s DerivationReady.
Status |
Reason |
Description |
|---|---|---|
|
|
All derived profiles are ready |
|
|
Derivation in progress |
|
|
Selector matched zero source candidates |
|
|
One or more derived profiles failed |
Ready (managed profile rollup)#
Status |
Reason |
Description |
|---|---|---|
|
|
All managed profiles are ready |
|
|
Some profiles ready, others |
|
|
No managed profile is ready and at least one is |
|
|
Discovery completed but no supported profiles found |
|
|
Building the desired profile set failed |
|
|
Node-inventory snapshot built (intermediate state) |
AIMProfileSet / AIMClusterProfileSet conditions#
DerivationReady#
Status |
Reason |
Description |
|---|---|---|
|
|
All managed derived profiles are ready |
|
|
Derivation in progress |
|
|
Selector matched zero source candidates |
|
|
One or more derived profiles failed |
status.managedProfiles.{total,ready,deployable,base,notAvailable} are always populated (zero values serialised explicitly).
AIMProfile / AIMClusterProfile conditions#
HardwareAvailable#
Reports whether the cluster has nodes matching the profile’s accelerator labels and resource requests.
Status |
Reason |
Description |
|---|---|---|
|
|
Matching nodes found in cluster |
|
|
No accelerator requirements — profile is always available |
|
|
No cluster nodes match accelerator labels and resource requests |
The profile controller watches node events and re-evaluates hardware availability whenever node labels change.
AIMProfileCache conditions#
ArtifactsReady#
Status |
Reason |
Description |
|---|---|---|
|
|
All artifacts downloaded |
|
|
Creating artifact resources |
|
|
Some artifacts not ready |
AIMArtifact conditions#
Ready#
Status |
Reason |
Description |
|---|---|---|
|
|
Download complete and verified |
|
|
Download in progress |
|
|
Verifying downloaded data |
|
|
Waiting before retrying a failed download |
|
|
Terminal failure |
v1alpha1 conditions#
Legacy v1alpha1 controllers (template-based AIMService, AIMServiceTemplate, AIMTemplateCache) still emit their own condition catalog during the deprecation window. See Legacy Conditions for the full reference.
v1alpha1 AIMService (template path)#
When an AIMService uses spec.template (v1alpha1) the controller emits TemplateReady and CacheReady instead of ProfileReady and ProfileCacheReady:
Condition |
Reasons |
|---|---|
|
|
|
|
v1alpha1 AIMModel (template-emitting path)#
When an AIMModel still emits AIMServiceTemplate resources, its Ready rollup uses the v1alpha1 reason catalog (AllTemplatesReady, SomeTemplatesReady, etc.). See the legacy reference for the full list.
Condition polarity#
All AIM conditions follow positive polarity — status: True means healthy. When building dashboards or alerting:
Green — condition
status: TrueYellow — condition
status: Falsewith reason containingProgressing,Creating,Awaiting,StartedRed — condition
status: Falsewith reason containingFailed,Error,NotFound,Invalid,NotAvailable