READY: False and had to wait. That’s normal — downloading and initializing a model from remote storage can take time.
But what if READY stays False for many minutes? Or never becomes True? Kubernetes contains the diagnostic information you need — you just need to know where to look and how to interpret it.

- If
READYisFalseandAGEis only tens of seconds, the service is usually still initializing (storage initializer downloading files). - If several minutes pass with no
URLandREADY: False, start troubleshooting — something likely failed.

AGE column is a helpful clue: if a service deployed five minutes ago is still False with no URL, it likely failed during initialization.

Scenario 1 — Broken storage URI (typo or wrong repo)
Apply a deliberately broken InferenceService to reproduce the error:status section, especially conditions. A healthy condition shows Status: True and Type: PredictorReady (or Ready). For failures, you’ll see Status: False and reason + message fields with diagnostic text.
Example storage-initializer failure (truncated for clarity):
Repository Not Found and 401 can be confusing. It may indicate:
- A typo in the
storageUri(e.g.,InstructvsInstuct) — the path is wrong, so the API returns “not found”. - Or a private/gated repository that requires authentication (e.g., an
HF_TOKEN).
kubectl describe is ambiguous, inspect pod and init container logs:
HF_TOKEN). If the path is wrong, correct the storageUri in your manifest and reapply.
Scenario 2 — Out of memory (OOMKilled)
ML models include weights that must be loaded into RAM. If a container is constrained to less memory than required, the kubelet will kill it (OOMKilled). This leads to restarts and the Revision/Deployment failing to reach minimum availability, causing the InferenceService to remainFalse.
Apply a manifest that intentionally causes OOM:
OOMKilled. Describing the InferenceService will show PredictorReady: False and messages about minimum availability or scheduling:
Deployment does not have minimum availability commonly indicates:
- Kubernetes couldn’t schedule the pod because nodes lack sufficient memory.
- Or the pod is repeatedly OOMKilled because requests/limits are too low.
requests and limits to 512Mi is too small for the Qwen model and will likely produce OOMKilled. A common starting point for Qwen is requests: 2Gi and limits: 4Gi. Adjust these values according to the model size and available node resources, or schedule on nodes with more memory.

Deployment does not have minimum availability, either increase the pod memory request/limit or provision nodes with sufficient memory so Kubernetes can schedule the pod.
Troubleshooting checklist (quick reference)
Read the
conditions -> message field first. It’s the single most useful piece of information KServe provides about why an InferenceService isn’t becoming ready.-
If
messageindicates storage or repository errors:- Verify the
storageUrifor typos (e.g.,InstructvsInstuct). - If the model is private/gated, set
HF_TOKENin your environment or use a repo you have access to. See Hugging Face authentication docs: https://huggingface.co/docs/huggingface_hub/authentication - Inspect storage-initializer logs:
- Verify the
-
If
messageindicates scheduling/minimum availability or pods showOOMKilled:- Check pod status and events:
- Increase
resources.requests.memoryandresources.limits.memoryin your InferenceService manifest to meet the model’s RAM needs (for example,requests: "2Gi",limits: "4Gi"for Qwen as a starting point), then reapply.
- Check pod status and events:
READY becomes True:
conditions/events don’t provide enough detail, inspect pod logs (init and main containers). Storage initializer and predictor logs typically reveal the root cause: bad path, authentication failure, or memory allocation problems.
Useful links and references:
- KServe documentation: https://kserve.github.io/ (KServe concepts and troubleshooting)
- Kubernetes docs: https://kubernetes.io/docs/ (kubectl, pods, events)
- Hugging Face authentication: https://huggingface.co/docs/huggingface_hub/authentication
reason and message fields in KServe conditions, you can distinguish a slow initial load from an actual failure and take the correct corrective action.