KubeErrors
A plain-language reference for Kubernetes and container error states
Every entry explains what the error actually means, what usually causes it, how to confirm the cause on a real cluster, and how to fix it. Each page lists the sources it was built from.
Pod status reasons
- ContainerCreating — The pod is scheduled and the kubelet is setting the container up, but it has not started yet
- CrashLoopBackOff — Container keeps starting and exiting, so the kubelet is waiting longer between restarts
- CreateContainerConfigError — The container cannot be created because something it references does not exist
- CreateContainerError — The container runtime failed to create the container
- ErrImageNeverPull — The image is not present on the node and imagePullPolicy is Never
- ErrImagePull — The first failed attempt to pull a container image
- ImagePullBackOff — Kubernetes could not pull the container image and is backing off before retrying
- Init:CrashLoopBackOff — An init container keeps failing, so the kubelet is backing off between retries
- Init:Error — An init container exited with a non-zero status
- InvalidImageName — The image reference in the pod spec is not a syntactically valid image name
- PodInitializing — An init container is still running, so the main containers have not started
- RunContainerError — The container was created but failed to start
- Terminating — The pod has been asked to delete and is not going away
Termination reasons
- ContainerStatusUnknown — The kubelet lost track of a container's outcome and cannot say how it ended
- Evicted — The kubelet removed the pod because the node ran short of a resource
- OOMKilled — The container exceeded its memory limit and was killed by the kernel
Exit codes
- Exit code 0 — The process exited successfully
- Exit code 1 — The application exited with a general error
- Exit code 2 — Misuse of a shell builtin, or an application-specific usage error
- Exit code 126 — The command was found but could not be executed
- Exit code 127 — The command was not found
- Exit code 128 — An invalid exit argument, or the base of the signal-encoded range
- Exit code 130 — The process was terminated by SIGINT
- Exit code 132 — The process was terminated by SIGILL — an illegal instruction
- Exit code 134 — The process was terminated by SIGABRT — it aborted itself
- Exit code 137 — The process was killed with SIGKILL
- Exit code 139 — The process was terminated by SIGSEGV — a segmentation fault
- Exit code 141 — The process was terminated by SIGPIPE — it wrote to a closed pipe or socket
- Exit code 143 — The process was terminated by SIGTERM
- Exit code 255 — An out-of-range or application-specific exit status
Pod phases
- Completed — Every container in the pod exited successfully
- Pending — The pod has been accepted but is not running yet, usually because it cannot be scheduled
- Unknown — The control plane has lost contact with the node and cannot report the pod's state
Scheduling
- didn't match pod anti-affinity rules — The pod's spreading rules cannot be satisfied at the current node count
- FailedScheduling — The scheduler could not find a node that satisfies the pod's requirements
- Insufficient cpu — No node has enough unreserved CPU for the pod's request
- Insufficient memory — No node has enough unreserved memory for the pod's request
- node(s) didn't match Pod's node affinity/selector — No node carries the labels the pod requires
- untolerated taint — The node repels this pod and the pod has no matching toleration
Probes
- exec probe failed — The probe command ran inside the container and exited non-zero
- Liveness probe failed — The kubelet decided the container is unhealthy and restarted it
- Probe: connection refused — The probe reached the pod but nothing was listening on that port
- Probe: HTTP 503 — The application answered the probe and reported itself unhealthy
- Probe: timeout — The probe connected or tried to, and got no answer in time
- Readiness probe failed — The pod was removed from its Service's endpoints but was not restarted
- Startup probe failed — The container did not finish starting within the startup probe's budget
- Unhealthy — The event Kubernetes emits whenever any probe fails
Volumes and storage
- CSI driver not found — The named CSI driver is not registered on the node or in the cluster
- FailedAttachVolume — The volume could not be attached to the node the pod was scheduled to
- FailedDetachVolume — The volume could not be detached from a node
- FailedMount — The kubelet could not mount a volume into the pod
- FailedUnmount — The kubelet could not unmount a volume from a terminating pod
- FileSystemResizePending — The volume was expanded but the filesystem inside it has not been
- Multi-Attach error — A ReadWriteOnce volume is already attached to a different node
- no space left on device — A write failed because the volume, the node's disk, or its inodes are full
- permission denied on a mounted volume — The container's user cannot read or write the mounted volume
- PersistentVolume Released — The claim that owned this volume is gone, and the volume is not reusable yet
- PersistentVolumeClaim Pending — The claim has not been bound to a volume
- ProvisioningFailed — The provisioner tried to create a volume and the storage backend refused
- timeout expired waiting for volumes to attach or mount — The kubelet gave up waiting for a volume and will retry
- volume node affinity conflict — The volume exists somewhere the pod cannot be scheduled
Networking and DNS
- ClusterIP unreachable — The Service has endpoints but its ClusterIP does not work from some or all pods
- connection refused — The destination was reached and nothing was listening on that port
- connection reset by peer — An established connection was terminated abruptly by the other side
- DNS timeout — Cluster DNS did not answer the query in time
- FailedCreatePodSandBox — The runtime could not create the pod's network sandbox
- i/o timeout — The connection attempt got no response at all
- Ingress 502 — The ingress reached a backend and got an invalid response
- Ingress 503 — The ingress had no healthy backend to send the request to
- Ingress 504 — The backend did not respond within the ingress controller's timeout
- ndots:5 slow DNS — Every external lookup tries several cluster suffixes before succeeding
- network plugin is not ready — The kubelet cannot find a usable CNI configuration on the node
- NetworkPolicy blocking traffic — A policy is silently dropping connections that used to work
- no IP addresses available in range set — The node's pod IP pool is fully allocated
- no route to host — The network stack had nowhere to send the packet
- no such host — A DNS lookup returned no record for the name
- Service has no endpoints — The Service exists but no ready pod matches its selector
RBAC and admission
- admission webhook denied the request — A validating admission webhook rejected the object
- cannot list resource at the cluster scope — A cluster-wide request was made with only namespaced permissions
- Error from server (AlreadyExists) — An object with that name already exists in the namespace
- Error from server (Conflict) — The object was modified between reading it and writing it back
- Error from server (Forbidden) — The request was authenticated and RBAC denied it
- Error from server (NotFound) — The named object does not exist in the namespace that was searched
- error validating data — The manifest does not match the schema for that resource
- exceeded quota — The namespace's ResourceQuota does not allow this object
- failed calling webhook — The API server could not reach an admission webhook
- LimitRange violation — The container's resources fall outside the namespace's permitted range
- no matches for kind — The cluster does not recognise the resource type in your manifest
- PodSecurity violation — The pod does not meet the security standard enforced on its namespace
- ServiceAccount token not mounted — A pod expected in-cluster credentials and does not have them
- Unauthorized — The API server could not establish who is making the request
- x509: certificate signed by unknown authority — The client does not trust the certificate the server presented
Node conditions
- DiskPressure — The node is low on disk space or inodes
- failed to garbage collect required amount of images — The kubelet tried to reclaim disk by deleting images and could not free enough
- MemoryPressure — The node is low on available memory and has started protecting itself
- NetworkUnavailable — The node's network is not correctly configured
- node.kubernetes.io/unreachable — The node controller cannot reach the node and has tainted it
- NotReady — The node is not accepting new work and its existing pods are at risk
- PIDPressure — The node is running out of process IDs
- PLEG is not healthy — The kubelet's container state loop is taking too long, so the node reports NotReady
- SchedulingDisabled — The node has been cordoned and will not receive new pods
- System OOM encountered — The kernel's OOM killer acted at the node level, not on a single container's limit
Controllers and rollouts
- BackoffLimitExceeded — A Job's pods failed more times than its backoffLimit allows
- Cannot evict pod — A PodDisruptionBudget is refusing to allow the eviction
- DaemonSet not scheduling on a node — A DaemonSet has no pod on some nodes
- DeadlineExceeded — The Job ran longer than activeDeadlineSeconds and was stopped
- FailedCreate — A controller tried to create a pod and the API server rejected it
- orphaned pods after controller deletion — Pods outlived the controller that created them
- Preempted — A higher-priority pod needed the space and this pod was removed to make room
- ProgressDeadlineExceeded — The Deployment made no progress within its deadline and gave up reporting success
- rollout stuck with old and new pods — A rolling update stopped partway, leaving both versions serving
- selector does not match template labels — The controller's selector and its pod template disagree
- StatefulSet pod stuck — One pod is blocking every pod after it in the ordinal sequence
- too many missed start times — The CronJob controller lost track of the schedule and stopped
- unable to fetch metrics — The HorizontalPodAutoscaler cannot read the metric it scales on
Container runtime
- cgroup driver mismatch — The kubelet and the container runtime are managing cgroups differently
- ContainerCannotRun — The runtime accepted the container and the process could not be executed
- CRI context deadline exceeded — A call from the kubelet to the container runtime timed out
- exec format error — The binary is for a different architecture or is not an executable at all
- failed to create shim task — containerd could not start the process that supervises the container
- failed to pull the sandbox image — The runtime cannot fetch the pause image every pod needs
- failed to reserve container name — A container with that name already exists in the runtime's state
- failed to stop container — The runtime could not terminate a container
- OCI runtime create failed — The low-level runtime refused to create the container
- operation not permitted — A syscall was blocked by seccomp, capabilities, or a security module
- PostStartHookError — The container's postStart lifecycle hook failed
- read-only file system — The process tried to write somewhere it cannot
- snapshot already exists — containerd's snapshotter has leftover state for a container that no longer exists
- too many open files — A process or the node hit its file descriptor limit
- unknown service runtime.v1alpha2.RuntimeService — The kubelet and the container runtime disagree about which CRI version to speak
Resources and cgroups
- cannot allocate memory — An allocation failed inside the container before any OOM kill happened
- CPU throttling — The container hit its CPU limit and is being paused by the kernel
kubectl
- Apply failed with conflicts — Server-Side Apply refused because another manager owns the fields you are setting
- cannot delete DaemonSet-managed Pods — kubectl drain refuses to proceed because DaemonSet pods cannot be evicted
- container is waiting to start — kubectl logs has nothing to show because the container never started
- couldn't get current server API group list — kubectl could not complete API discovery
- current-context is not set — A kubeconfig exists but no context is selected
- exec plugin failed — The credential plugin named in the kubeconfig did not produce a token
- kubectl cp: tar not found — kubectl cp needs a tar binary inside the container and there is not one
- kubectl port-forward drops — The forwarded connection closes unexpectedly
- kubectl version skew — The kubectl client is too far from the cluster's version
- logs are truncated or missing — Older log lines have been rotated away by the node
- metadata.annotations: Too long — kubectl apply's stored configuration annotation exceeded the size limit
- metrics not available yet — kubectl top cannot read the metrics API
- OCI runtime exec failed — kubectl exec reached the container and the command could not be run inside it
- previous terminated container not found — There is no earlier container instance whose logs can be read
- The connection to the server localhost:8080 was refused — kubectl has no kubeconfig and is falling back to a default that does not exist
- the server doesn't have a resource type — kubectl does not recognise the resource name you used
- Unable to connect to the server — kubectl found a cluster address and could not reach it
- unable to upgrade connection — kubectl exec or attach could not establish its streaming connection to the kubelet
Pages on this site are written with AI assistance from the primary sources listed on each page, then checked against those sources before publishing.