Kubernetes Outage Postmortem: Nodes Stuck in NotReady Due to CNI Failure

Search for a command to run...

No comments yet. Be the first to comment.
The Ops Fix Hub is a dynamic series designed to tackle real-world challenges in the DevOps and CloudOps domains. "Breaking Down Barriers, One Ops Fix at a Time."
Context We were running a Node.js backend using PM2 on a Linux server. Application details: Process manager: PM2 Mode: fork User: root Deployment: Manual setup on VM No containerization No autoscaling The service was running fine in steady st...
This migration was performed on a production workload where cost reduction was prioritized over zone-level high availability.

1. Overview What I Designed I designed a hybrid infrastructure architecture: Terraform → Foundation Layer Crossplane → Dynamic Lifecycle Layer ArgoCD → GitOps Enforcement This created a continuou

Cross-cloud VM migration is not a disk copy task. It is: An access model transformation A replication lifecycle management exercise A downtime control operation A cost boundary decision We execu

When AWS introduced AWS DevOps Agent, I was less interested in feature lists and more interested in one practical question. Can it actually reduce investigation time during real production-style failu

Migrating object storage across cloud providers is not a copy task.It is a cost, network, and security boundary problem. We migrated 10+ TB of object data from Google Cloud Storage to Amazon S3 under

Recently, we encountered a critical production outage in our Kubernetes cluster. New nodes provisioned during autoscaling remained in a NotReady state, leading to service disruptions and failed health checks across workloads.
In this post, I’ll walk you through:
What caused the issue
How we identified and resolved it
Best practices to prevent similar failures in your clusters
During a surge in traffic, our cluster autoscaler kicked in and added new nodes. However, these nodes failed to become Ready, resulting in:
❌ Workloads not scheduled
❌ Services unreachable
❌ Health checks failing, pods crashing
A quick check with:
kubectl get nodes
revealed multiple entries like:
ip-node-ip.eu-west-1.compute.internal NotReady
To dig deeper, we inspected system logs and found this error:
container runtime network not ready: NetworkReady=false
NetworkPluginNotReady: docker: network plugin is not ready: cni config uninitialized
These errors indicated a CNI (Container Network Interface) misconfiguration. Our cluster was using Calico as the CNI, and it wasn’t initializing properly.
The Calico pods responsible for managing the network stack were either stuck or not starting due to missing configurations.
Force Kubernetes to restart Calico:
kubectl delete pod -n kube-system -l k8s-app=calico-node
This helped in recreating the Calico pods with the current (and correct) configuration.
On some nodes, the CNI config was missing or corrupted:
/etc/cni/net.d/10-calico.conflist
We reinstalled Calico using the official manifest:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Restarting the kubelet reinitialized the CNI network stack:
sudo systemctl restart kubelet
After applying the fixes, we verified node status:
kubectl get nodes
Now showed:
ip-node-ip.eu-west-1.compute.internal Ready
Services started recovering, and workloads were rescheduled.
Always back up CNI configs, especially:
/etc/cni/net.d/10-calico.conflist
This helps with disaster recovery and rapid bootstrapping.
Set up monitoring and alerting for:
kubectl get pods -n kube-system -l k8s-app=calico-node
kubectl get nodes
Alert if:
Calico pods crash or restart frequently
Nodes enter or stay in NotReady
Do not mix different CNI plugins (e.g., Calico and AWS VPC CNI) unless you're explicitly building a hybrid setup. It introduces instability and unexpected behavior.
In our case, we’ve since migrated to the AWS VPC CNI, which aligns better with EKS and provides native integration with VPC IP address management.
Networking is the backbone of Kubernetes, and when the CNI fails, everything breaks.
This incident was a sharp reminder of the importance of:
Validating CNI configurations
Monitoring node readiness
Keeping your control plane and worker nodes in sync
By following the steps outlined above and applying proactive monitoring, you can prevent CNI-related outages and ensure high availability for your workloads.