What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Short answer: Init:ImagePullBackOff means an init container in the calico-node pod cannot obtain its image. It does not, by itself, prove that Calico networking, BGP, or your pod CIDR is broken. Start with the pod’s Events output; the exact error—such as a timeout, DNS failure, TLS error, missing credential, wrong tag, rate limit, or unsupported architecture—determines the fix.

What the Linux Foundation forum case actually shows

A July 2021 Linux Foundation LFS258 forum post reported a calico-node-f9wr4 pod at 0/1 Init:ImagePullBackOff. The node also reported NetworkPluginNotReady and Docker reported cni config uninitialized.

The historical environment was Ubuntu 16.04.7, Docker 18.9.7, and Kubernetes v1.21.2. Those details should not be treated as current installation requirements. Crucially, the post did not include the decisive image-pull Event, so the exact cause cannot be proven from the thread. The responder suggested checking the course-version sequence and ensuring the custom 192.168.0.0/24 pod network was consistent in both calico.yaml and kubeadm-config.yaml. That is a valid configuration check, not proof that a CIDR mismatch caused the image pull failure.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What Init:ImagePullBackOff means

  • Init: one or more init containers must finish before the main container can start.
  • ImagePullBackOff: Kubernetes failed to pull an image and is retrying with increasing delays. The documented maximum backoff interval is five minutes.
  • 0/1: the pod has no ready main container; it may be blocked before calico-node starts.

The status describes an image-retrieval failure, not the underlying reason. NetworkPluginNotReady and cni config uninitialized are commonly downstream effects while the CNI cannot initialize.

#1 Best Overall

See Kubernetes’ documentation on container images and image-pull behavior.

Run these diagnostics first

kubectl -n kube-system get pods -o wide
kubectl -n kube-system describe pod <calico-node-pod>
kubectl -n kube-system get pod <calico-node-pod> -o yaml
kubectl get nodes -o wide
kubectl get events -A --sort-by=.lastTimestamp

The describe command is the most important. Read the Events section, especially the newest warning. On newer Kubernetes versions, you can filter events directly:

kubectl events -n kube-system --for pod/<calico-node-pod> --types=Warning,Normal

Find the exact failing image

Do not assume the failing image is calico/node. Calico manifests may include images for the CNI installer, Calico node, pod2daemon-flexvol, kube controllers, CSI, and node-driver components.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
kubectl -n kube-system get pod <calico-node-pod> 
  -o jsonpath='{range .spec.initContainers[*]}init: {.name}{"t"}{.image}{"n"}{end}{range .spec.containers[*]}container: {.name}{"t"}{.image}{"n"}{end}'

Match the Event to the remedy

Event or message Likely cause What to check
manifest unknown Wrong repository or tag Compare the live manifest with the Calico release documentation.
pull access denied or unauthorized Private image or invalid credentials Repository name, registry hostname, credentials, and image-pull Secret.
FailedToRetrieveImagePullSecret Missing, misspelled, or wrongly scoped Secret The Secret must exist in kube-system, the pod’s namespace.
i/o timeout, context deadline exceeded, or connection refused Firewall, proxy, routing, or unavailable registry Node egress, runtime proxy settings, and registry endpoints.
no such host DNS failure Node resolver configuration and registry-name resolution.
x509: certificate signed by unknown authority Missing corporate proxy or registry CA Install the CA in the runtime trust store, then restart and retest.
429 Too Many Requests Docker Hub pull-rate limit Authentication, quota, or a registry mirror.
unsupported platform No image manifest for the node architecture Node architecture and the selected Calico image tag.

Test the pull on the scheduled node

First identify where the pod is running:

kubectl -n kube-system get pod <calico-node-pod> -o wide

Then test the exact image on that node using the same runtime kubelet uses. A successful docker pull proves little if kubelet is configured for containerd.

containerd

sudo crictl images
sudo crictl pull docker.io/calico/cni:<TAG>
# Or, where appropriate:
sudo ctr -n k8s.io images pull docker.io/calico/cni:<TAG>

Docker-based clusters

sudo docker pull docker.io/calico/cni:<TAG>

Use the image printed from the live pod specification, not an old example tag. Avoid changing one image tag manually in generated Calico YAML unless the supported installation method explicitly permits it.

Check proxy, DNS, TLS, and firewall configuration

A proxy variable in your interactive shell does not automatically configure containerd or Docker. Inspect the services:

env | grep -i proxy
systemctl show containerd --property=Environment
systemctl show docker --property=Environment
sudo systemctl cat containerd
sudo systemctl cat docker

If a proxy is required, configure it for the runtime service, restart that service, and repeat the runtime-specific pull. Ensure NO_PROXY includes the API endpoint, node-local addresses, cluster service and pod CIDRs, and relevant internal hostnames. The exact list depends on your topology: an overbroad list can bypass a required proxy, while an incomplete list can send internal traffic through it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A separate Linux Foundation Calico case demonstrates that the same pod status can result from a timeout reaching registry-1.docker.io through a proxy.

For TLS interception or a private registry, install the organization’s CA where the container runtime trusts it—not only in a user’s shell trust store. Also verify node DNS, outbound firewall rules, disk space, and clock correctness.

Fix credentials and namespace scope

For a private image or authenticated mirror, create the Secret in the pod’s namespace:

kubectl -n kube-system create secret docker-registry regcred 
  --docker-server=<registry-server> 
  --docker-username=<username> 
  --docker-password='<password>'

Ensure the Calico pod template references it:

imagePullSecrets:
  - name: regcred

A Secret in default cannot satisfy a pod in kube-system. Kubernetes also supports node-level registry authentication and credential-provider plugins; choose the approach supported by your runtime and operating model. The Kubernetes private-registry guide covers Secret creation and the FailedToRetrieveImagePullSecret diagnostic.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Handle Docker Hub rate limits

If Events show HTTP 429, treat it as registry throttling rather than a Calico defect. Docker documents pull limits for unauthenticated and Docker Personal users, a six-hour example window, and no pull rate limit for paid subscriptions under its stated policy. The applicable quota depends on authentication and account status; do not assume a universal numeric limit.

  1. Authenticate the node or workload to Docker Hub.
  2. Wait for the documented limit window to reset.
  3. Use a pull-through cache or private registry mirror.
  4. Use an alternate registry only after verifying image provenance, tag availability, digest parity, and vendor support.
  5. Pre-pull images on every node only when its operational limitations are acceptable.

Repeatedly deleting pods creates more pull attempts and is not a rate-limit solution. See Docker’s current pull-usage documentation.

Check architecture, tags, and image policy

kubectl get nodes -o wide
uname -m
kubectl -n kube-system get daemonset calico-node 
  -o jsonpath='{.spec.template.spec.initContainers[*].image}{"n"}{.spec.template.spec.containers[*].image}{"n"}'

Use a manifest intended for the actual Kubernetes and Calico release combination. Check whether the image supports the node’s architecture and whether admission policy, registry rewrites, or signature requirements reject the image.

Digest pinning improves reproducibility but requires deliberate image-set maintenance. Tigera documents Calico image sets and digest-based references. Follow the installation method’s supported registry or image-set mechanism rather than editing generated YAML blindly.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Validate pod-network CIDRs separately

Once image retrieval works, check the cluster’s network design. The pod CIDR in kubeadm configuration and the Calico IP pool must match the intended design:

grep -n -E 'podSubnet|serviceSubnet' kubeadm-config.yaml
kubectl get ippools.crd.projectcalico.org -o yaml
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"t"}{.spec.podCIDR}{"n"}{end}'
kubectl cluster-info dump | grep -i -E 'pod[- ]cidr|cluster-cidr'
kubectl -n kube-system get daemonset calico-node -o yaml
kubectl -n kube-system get configmap -o yaml | grep -i -C 3 cidr

A CIDR mismatch can cause later CNI, routing, or pod-connectivity failures. It generally does not explain a registry DNS, HTTP, TLS, authentication, or timeout error. Do not blindly copy 192.168.0.0/24; use the CIDR selected for your cluster design and installation method.

Use the scope of the failure to narrow it down

kubectl -n kube-system get pods -l k8s-app=calico-node -o wide
  • Every Calico pod fails: suspect image references, registry access, proxy, credentials, or rate limits.
  • Only one node fails: compare that node’s DNS, firewall, runtime, architecture, certificates, disk, and proxy settings with a working node.
  • Only the control-plane node fails: inspect its taints, runtime, and outbound access independently.
  • Calico is running but CoreDNS is Pending: investigate scheduling, node readiness, and CIDR or CNI configuration rather than returning to image-pull diagnosis.
kubectl get node <node> -o yaml
sudo crictl info
sudo crictl images
resolvectl status
df -h
df -i

Recover and verify

After correcting the underlying cause:

kubectl -n kube-system get pods -w
kubectl get nodes
kubectl -n kube-system get daemonset calico-node
kubectl -n kube-system get pods -l k8s-app=calico-node -o wide

Expected results are Calico pods at 1/1 Running, nodes becoming Ready, CoreDNS scheduling and starting, and the disappearance of NetworkPluginNotReady and cni config uninitialized.

If retrying is delayed after the fix, delete only the affected pod so its DaemonSet recreates it:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
kubectl -n kube-system delete pod <calico-node-pod>

Deletion does not fix the cause; it only triggers another pull attempt.

Prevention for production clusters

  • Operate a pull-through cache or private mirror where registry availability and rate limits matter.
  • Document proxy, NO_PROXY, CA, DNS, and runtime configuration for every node image.
  • Keep Calico manifests versioned and aligned with the supported Kubernetes release combination.
  • Use digest pinning or managed image sets when reproducibility is more important than tag convenience.
  • Use pre-pulling for controlled or air-gapped provisioning, while accounting for autoscaling and upgrades.
  • Monitor DaemonSet rollout health and image-pull warning Events.
  • Keep container runtime configuration consistent across nodes.

For a managed or private registry, choose the platform that matches your existing environment: Amazon ECR for AWS, Google Artifact Registry for Google Cloud, Azure Container Registry for Azure, GitHub Container Registry for GitHub-centered workflows, or Harbor for self-managed and restricted environments. A registry is an operational choice, not a substitute for fixing a broken node runtime or network path.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.