kube-scheduler Not Starting: Troubleshooting Guide
The kube-scheduler is a critical control plane component in Kubernetes.
If it doesn’t start, pods cannot be scheduled to nodes — leaving them stuck in a Pending
state.
Here’s how to troubleshoot when the scheduler refuses to start.
Common Symptoms
kubectl get pods -n kube-system
shows kube-scheduler CrashLoopBackOff or not running at all.- Pods stay in Pending forever.
- Logs contain errors like
failed to bind to port
oretcd connection refused
.
Possible Causes and Fixes
1. Port Conflicts
By default, kube-scheduler listens on 10259 (secured) and optionally 10251 (insecure).
If another process is already using the port, scheduler won’t start.
Fix:
Check which process is using the port:
sudo lsof -i :10259
Stop the conflicting service, or reconfigure kube-scheduler.
2. Misconfigured Manifest
In clusters bootstrapped with kubeadm, kube-scheduler runs as a static pod (/etc/kubernetes/manifests/kube-scheduler.yaml
).
A typo in the file may break the scheduler.
Fix: Validate the manifest:
cat /etc/kubernetes/manifests/kube-scheduler.yaml
Look for incorrect --leader-elect
, --bind-address
, or --kubeconfig
flags.
3. Missing or Wrong Certificates
kube-scheduler needs valid certificates to talk to the API server. If certs are expired, moved, or missing, it won’t start.
Fix:
Check /etc/kubernetes/scheduler.conf
and make sure the referenced certificate files exist and are valid.
4. API Server Connectivity
If kube-scheduler cannot reach the API server (e.g., network issues, wrong address), it will fail.
Fix: Verify connectivity:
kubectl get componentstatuses
curl -k https://<apiserver>:6443/healthz
5. Resource Pressure
On small VMs or nodes under heavy load, scheduler may fail due to OOM (out-of-memory).
Fix: Check logs:
journalctl -u kubelet | grep scheduler
Increase resources or adjust system limits.
Quick Debugging Checklist
- Check scheduler logs
- Verify static pod manifest (
/etc/kubernetes/manifests/kube-scheduler.yaml
). - Ensure no port conflicts.
- Validate certificates and kubeconfig.
- Test connectivity to API server.
Final Thoughts
The kube-scheduler is the brain that decides where pods run. If it fails, the cluster becomes unusable. Luckily, most issues boil down to config errors, certs, or API server connectivity problems.