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 or etcd 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

  1. Check scheduler logs
  2. Verify static pod manifest (/etc/kubernetes/manifests/kube-scheduler.yaml).
  3. Ensure no port conflicts.
  4. Validate certificates and kubeconfig.
  5. 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.