What ContainerCreating means
ContainerCreating is a normal, transient phase: the Pod has been scheduled to a
node and the kubelet is pulling images, mounting volumes and secrets, and asking
the CNI plugin to set up networking before it starts the container. The problem
is not the status itself — it is a Pod that stays in ContainerCreating
instead of moving on to Running.
Because no container exists yet, kubectl logs is useless here. Everything you
need is in the Pod's events — and the first Warning event points at the root
cause.
Two scopes matter when you read those events. A container-level problem (image, secret, this Pod's volume) affects only this Pod. A node-level or cluster-level problem (CNI plugin down, IP exhaustion, a CSI driver missing on the node) affects every Pod that lands on the same node — fix the node, not the workload.
Diagnose it
kubectl get pod <pod> -n <namespace> -o wide
kubectl describe pod <pod> -n <namespace>
Events expire from the API server after about an hour, so capture them promptly.
The Events section will point at one of the categories below. Match the
message:
# Image pull
Failed to pull image "...": rpc error: ... 401 Unauthorized
Back-off pulling image "..."
# PVC / volume attach
Unable to attach or mount volumes: unmounted volumes=[data]
AttachVolume.Attach failed for volume "pvc-..."
Multi-Attach error for volume "pvc-..." Volume is already exclusively attached to one node
# Secret / ConfigMap mount
MountVolume.SetUp failed for volume "..." : secret "..." not found
# Network (CNI) sandbox
FailedCreatePodSandBox ... networkPlugin cni failed to set up pod ... failed to assign an IP address
If the volume is involved, the failing event is often recorded against the node or the PVC rather than the Pod:
kubectl get pvc -n <namespace>
kubectl describe pvc <claim> -n <namespace>
kubectl get events -n <namespace> --sort-by=.lastTimestamp
Note
Use kubectl get events --sort-by=.lastTimestamp when the Pod's own
event list has rolled over. Volume attach failures and CNI errors are often
recorded against the node or the PVC rather than the Pod.
Causes, and how to fix each
Each mechanism below is independent. Identify which event you have, then apply only that fix.
1. Image pull
The kubelet cannot fetch the image: a wrong tag, a private registry with no
imagePullSecret, or registry rate limiting (Back-off pulling image). This is
the most common cause of a Pod stuck before
start.
- Diagnose: the event reads
Failed to pull imageorBack-off pulling image. A401/403means auth;not found/manifest unknownmeans a bad tag or repository. - Fix: verify the tag exists in the registry. For private registries, attach
an
imagePullSecretto the Pod (directly or via its ServiceAccount). For rate limits, authenticate to the registry or use a pull-through cache.
2. PVC unbound
The Pod references a PVC that never bound to a PersistentVolume — no matching PV, or no StorageClass to dynamically provision one.
- Diagnose:
kubectl get pvcshowsPending, and the event readsunmounted volumes=[...].kubectl describe pvcshows why provisioning failed. - Fix: confirm a StorageClass exists and can
provision,
or create a matching PV. The PVC must reach
Boundbefore the Pod can mount it.
3. Multi-Attach — volume stuck on a prior node
A ReadWriteOnce volume can only be mounted read-write by a single
node.
After a node failure, the old VolumeAttachment can linger, so the new node
cannot attach the disk.
- Diagnose: the event reads
Multi-Attach error for volume. Check the attachment object:kubectl get volumeattachment. The volume is still bound to the dead/old node. - Fix: let the original Pod terminate so the attachment is released. If the
old node is gone for good, the stale
VolumeAttachmentmust be cleared before the new node can attach. For single-writer correctness, considerReadWriteOncePod, which restricts the volume to one Pod.
4. Volume zone / topology mismatch
A block volume (EBS, GCE PD) lives in one availability zone; if the Pod is scheduled to a node in a different zone, the attach fails.
- Diagnose: the attach event names the volume but the disk cannot reach the node. Compare the node's zone label with the volume's zone.
- Fix: use a StorageClass with
volumeBindingMode: WaitForFirstConsumerso the volume is provisioned in the zone the Pod is scheduled to, rather than provisioned first and stranded.
5. Missing Secret or ConfigMap
This is not a PVC failure. The Pod mounts a Secret or ConfigMap that does not exist, or exists in a different namespace.
- Diagnose: the event reads
MountVolume.SetUp failed for volume "..." : secret "..." not found(orconfigmap ... not found). - Fix: create the referenced object in the same namespace as the Pod
(Secrets are
namespaced);
fix any typo in the
secretName/namefield. The kubelet retries the mount automatically once the object exists.
6. CNI cannot set up the network sandbox
The CNI plugin assigns the Pod IP and wires up networking. If it is unhealthy or the subnet is out of IPs, the sandbox never comes up. This is a node/cluster problem, not a workload problem.
- Diagnose: the event reads
FailedCreatePodSandBox ... networkPlugin cni failed to set up podorfailed to assign an IP address. Check the CNI daemonset:kubectl get pods -n kube-system(e.g. Calico, Cilium, Flannel, or the cloud CNI). A freshly joined node can take 30-60s for its CNI pod to write config. - Fix: restore the CNI daemonset on the node, or free IP addresses in the subnet if the pool is exhausted. Because the failure is per-node, every Pod scheduled there is affected.
7. CSI driver node plugin missing
A CSI volume needs the driver's node plugin running on the target node. If that
DaemonSet pod is missing (wrong nodeSelector/toleration, or crashed), the mount
hangs even when the PVC is Bound.
- Diagnose: the PVC is
Bound, but the mount still fails on this node. Confirm the CSI node DaemonSet is running there:kubectl get pods -n kube-system -o wide | grep csi. - Fix: get the CSI node DaemonSet
scheduled onto the
node (tolerations/
nodeSelector), or reschedule the Pod to a node where the driver is healthy.
8. Init container not finishing (related state)
If the Pod uses init containers, it shows Init:X/Y rather than
ContainerCreating — but the init container itself can sit in
ContainerCreating for any reason above. App containers do not start until all
init containers complete.
- Diagnose: status is
Init:0/1.kubectl describe podshows which init container is blocked and why (its own image, volume, or secret). - Fix: resolve the init container's blocker; the app containers proceed automatically once all init containers run to completion.
Fix it
- Run
kubectl describe podand read the first Warning event. - Classify it: image, PVC, multi-attach, zone, secret/configmap, CNI sandbox, or CSI node plugin.
- Decide the scope. Image/secret/this-PVC are container-level — fix the workload. CNI/IP-exhaustion/CSI-node-plugin are node-level — fix the node, and expect other Pods on it to be affected too.
- Apply the single matching fix above. The kubelet retries mounts and pulls automatically; you rarely need to delete the Pod.
- Delete the Pod only if it does not advance within a minute after the dependency is resolved.
How Intellira diagnoses this
Intellira pulls the Pod's events through the Kubernetes MCP server and classifies
the stall — image, PVC, multi-attach, secret/configmap, CNI sandbox, or CSI node
plugin — on the first pass, then follows the chain. For a volume stall it inspects
the PVC binding and the node's VolumeAttachment objects; for a secret stall it
checks whether the referenced object exists in the Pod's namespace; for a CNI
stall it correlates against the health of the network daemonset rather than
blaming your workload. It also separates container-level from node-level causes,
so you know whether to fix the Pod or the node. You get the actual blocking
dependency, not just the word "ContainerCreating."
Sources
- Debug Pods — Kubernetes
- Images / using a private registry — Kubernetes
- Persistent Volumes (access modes, dynamic provisioning) — Kubernetes
- Storage Classes / volume binding mode — Kubernetes
- Secret must exist (namespaced) — Kubernetes
- Volumes / CSI — Kubernetes
- Cluster networking — Kubernetes
- Init Containers — Kubernetes
By Intellira Engineering. AI-assisted draft, reviewed by the Intellira engineering team; claims cited inline; last verified 2026-06-02.