During kubeadm init, the control plane failed to initialize within the timeout period, usually because critical system Pods are not starting.
Fixes timed out waiting for the condition (kubeadm init)
sudo systemctl status docker # or containerd
sudo docker ps # Test connectivitysudo systemctl status docker # or containerdsudo docker ps # Test connectivitytimed out waiting for the condition (kubeadm init)
Kubeadm init creates core Kubernetes system components (API server, scheduler, controller-manager) and waits for them to become healthy. If these Pods don't start within a few minutes (default timeout), kubeadm exits with a timeout error. This indicates issues with container runtime, images, or node resources.
Before kubeadm init, verify runtime:
sudo systemctl status docker # or containerd
sudo docker ps # Test connectivityIf not running, start it:
sudo systemctl start dockerCheck node resources:
df -h # Check disk space, need at least 10GB free
free -m # Check memory, need at least 2GBIf low, clean up before retrying kubeadm init.
Use the --timeout flag:
kubeadm init --timeout 5mDefault is often 4-5 minutes. Increase for slow networks.
Download images before init to speed up:
kubeadm config images pull
# Then run init
kubeadm initReview kubelet logs:
sudo journalctl -u kubelet -n 100 --no-pager
# Or check control plane pod logs
kubectl logs -n kube-system kube-apiserver-NODE_NAMEFor air-gapped environments, pre-load container images. Use containerd with image caching for faster startup. Monitor system resources during init with: watch -n 1 "free -m && df -h". For development/testing, consider increasing --apiserver-advertise-address explicitly. Check network connectivity to image registries using: curl -I https://registry.k8s.io