Kubernetes nodes fail to pull container images after containerd overlay storage filled on GKE-like cluster
Environment
On-prem K8s cluster (v1.26) with containerd 1.7, nodes provisioned from a node pool with 200 GB root disk; workloads include several large images (~2–6 GB each) and a nightly batch job that pulls and extracts images concurrently.
Symptoms
New pods enter ImagePullBackOff or ErrImagePull with errors mentioning 'no space left on device' or 'failed to unpack image' when scheduled to nodes; existing running containers continue but any attempt to start new pods fails on affected nodes.
Observations
df -h shows /var/lib/containerd/overlay2 consuming >95% of disk; journalctl on node shows containerd errors 'failed to reserve layer' and overlayfs lowerdir/upperdir errors; kubelet reports 'image pull rate limited' and Docker registry is reachable (curl succeeds). After cleaning a few images manually, some pulls succeed for a short time before problem returns.
Already attempted
Manually docker/containerd image prune on affected nodes (containerd ctr images rm and runc delete) temporarily freed space and allowed pods to start; increased ephemeral disk size on one node and cordoned/drained it to test (worked on that node); configured image garbage-collection thresholds in kubelet (no immediate effect).
Question
How can I reliably diagnose why overlay storage grows uncontrollably under these workloads, implement safe cleanup that won't disrupt running pods, and put in place limits or automation to prevent recurrence at scale?
Verified community troubleshooting
No answers yet..
Incident analysis
Most likely causes
Summary
Suggested Fixes
Continue troubleshooting
Related troubles
Matched from the title, description and tags
- Virtualization23% match
Docker Swarm overlay: intermittent packet loss between nodes after lowering MTU — vxlan fragmented frames dropped
Open0 answers - Cloud Computing23% match
Kubernetes StatefulSet pods fail to mount Ceph PVCs on nodes upgraded to newer kubelet: 'failed to find device' in kubelet logs
Open0 answers - Cloud Computing22% match
Kubernetes pods CrashLoopBackOff only on upgraded nodes with hugepages enabled — short lived OOM at container startup
Open0 answers - Cloud Computing20% match
GKE cluster DNS fails inside pods intermittently after node auto-scaler removes older node pool
Open0 answers - Cloud Computing20% match
Kubernetes PVCs stuck Pending after node migration — CSI node plugin fails to register with kubelet
Open0 answers