kube-scheduler ist die Komponente der Kubernetes-Control-Plane, die entscheidet, auf welchem Worker-Knoten ein neuer Pod läuft. Er beobachtet den Cluster über den kube-apiserver, findet Pods ohne Knotenzuweisung und wählt für jeden den passendsten Knoten — in zwei Phasen: Filtern und Bewerten.

Phase 1: Filtern (Filtering)

Zuerst fallen alle Knoten weg, die den harten Anforderungen des Pods nicht genügen: zu wenig CPU oder Speicher, fehlende Ports, Health-Check- oder Affinitäts-Regeln. Übrig bleibt eine Menge von Kandidaten-Knoten.

Phase 2: Bewerten (Scoring)

Danach bewertet der Scheduler jeden Kandidaten mit Punkten: Knoten mit mehr freien Ressourcen, besserer Lastverteilung oder passender Pod-Affinität erhalten höhere Werte. Der Knoten mit der höchsten Punktzahl bekommt den Pod zugewiesen — die Entscheidung schreibt der Scheduler über den API-Server zurück.

Taints, Tolerations und Praxis

Mit Taints können Knoten Pods abstoßen; ein Pod muss die passende Toleration besitzen, um dort doch zu landen. So bleiben etwa Control-Plane-Knoten von normalen Workloads frei. Der Scheduler lässt sich durch eigene Scheduling-Plugins erweitern. Wichtig ist dabei die Priorität der Pods: Eine Kubernetes PriorityClass legt fest, welche Workloads bei Ressourcenknappheit zuerst verdrängt werden dürfen.

Das Gegenstück zum Scheduler ist der Descheduler: Er läuft als separates Add-on und entfernt Pods, die suboptimal platziert sind, damit sie neu geplant werden.

Verwandte Grundlagen: Kubernetes, kube-apiserver, etcd, Kubelet, Pod.