Kubernetes Descheduler #
Der Kubernetes Descheduler ist ein Tool, das die Pod-Platzierung in einem Cluster optimiert, indem es Pods, die nicht den definierten Richtlinien entsprechen, entfernt. Dies hilft, die Ressourcennutzung zu verbessern und die Cluster-Gesundheit zu erhalten.
Deployment #
Quelle #
Das Projekt basiert auf dem Kubernetes Descheduler GitHub Repository. Das Helm-Chart stammt aus dem Kubernetes Descheduler Helm Charts Repository.
Dokumentation #
Funktion #
Der Kubernetes Descheduler läuft als CronJob und prüft den Cluster regelmäßig auf Pods, die basierend auf den definierten Policies umverteilt werden sollten. Dies hilft, die Ressourcennutzung zu optimieren und die Cluster-Stabilität zu verbessern. Zum Beispiel kann er Pods von Knoten entfernen, die unter- oder überausgelastet sind, oder Pods, die Anti-Affinity-Regeln verletzen.
Lokale Anpassungen #
Die Konfiguration erfolgt über die values.yaml-Datei.
Wichtige Einstellungen #
- Betriebsart: Der Descheduler wird als
CronJobausgeführt, der alle zwei Minuten läuft. - Prioritätsklasse: Er läuft mit der Prioritätsklasse
system-cluster-critical, um sicherzustellen, dass er bei Ressourcenknappheit nicht verdrängt wird. - Aktivierte Strategien:
RemoveDuplicates: Entfernt doppelte Pods, die auf demselben Knoten laufen.RemovePodsHavingTooManyRestarts: Entfernt Pods mit einer hohen Anzahl von Neustarts (mehr als 50).RemovePodsViolatingNodeAffinity,RemovePodsViolatingNodeTaints,RemovePodsViolatingInterPodAntiAffinity,RemovePodsViolatingTopologySpreadConstraint: Stellt sicher, dass Pods, die gegen (Anti-)Affinity-, Taint- oder Topologie-Regeln verstoßen, neu geplant werden.LowNodeUtilization&HighNodeUtilization: Versucht, Pods von unter- und überausgelasteten Knoten zu verschieben, um eine ausgeglichenere Ressourcennutzung zu erreichen.
Installation #
Die Anwendung wird mittels Kustomize und Helm durch ArgoCD im Kubernetes-Cluster bereitgestellt. Die Konfiguration befindet sich im apps/descheduler-Verzeichnis. Eine manuelle Installation kann mit folgendem Befehl durchgeführt werden:
1kubectl kustomize --enable-helm apps/descheduler | kubectl apply -n descheduler -f -
Abhängigkeiten #
Der Descheduler hat keine direkten Anwendungsabhängigkeiten, interagiert aber eng mit dem Kubernetes Scheduler.
Per E-Mail antworten