Kubernetes 1.36 Workload-bewusstes Scheduling: Gang Scheduling und Ressourcenoptimierung für AI/ML Workloads
Kubernetes 1.36 führt bedeutende Verbesserungen beim workload-bewussten Scheduling ein, die grundlegend verändern, wie AI/ML- und Batch-Verarbeitungs-Workloads in Produktions-Clustern laufen. Die neue Architektur trennt die Zuständigkeiten zwischen statischen Templates und Runtime-State-Management und ermöglicht erstmals echtes Gang Scheduling und koordinierte Ressourcenzuteilung als native Kubernetes-Funktion.
Falls Sie verteilte Training-Jobs, Batch-Verarbeitungs-Pipelines oder andere Workloads betreiben, die mehrere Pods gleichzeitig starten müssen, werden diese Änderungen die Ressourcenverschwendung und Scheduling-Ineffizienzen eliminieren, gegen die Sie bisher mit benutzerdefinierten Schedulern und Workarounds gekämpft haben.
Die Architektur-Evolution verstehen
Kubernetes 1.36 baut auf dem Fundament von 1.35 auf und schafft eine klare architektonische Trennung. Laut dem offiziellen Kubernetes-Blog trennt das System nun API-Zuständigkeiten, wobei “die Workload API als statisches Template fungiert, während die neue PodGroup API den Runtime-State verwaltet.”
Diese Trennung ist wichtig, da sie es Controllern, Status-Reporting und zukünftigen workload-bewussten Features ermöglicht, über verwandte Pods zu entscheiden, auch wenn diese Pods keine strikte Alles-oder-Nichts-Zulassung benötigen. Wie Ryota Sawada erklärt: “Das workload-bewusste Scheduling trennt den Template-Teil in Workload und das tatsächliche Runtime-Objekt in PodGroup, und diese klare Trennung gibt uns eine noch klarere Verbindungsstelle für die DRA.”
Die praktische Auswirkung ist, dass Sie jetzt Workload-Templates einmal definieren und sie über mehrere Runtime-Instanzen wiederverwenden können, jede mit ihrer eigenen PodGroup, die den tatsächlichen Pod-Lebenszyklus und die Koordination verwaltet.
Gang Scheduling: Alles-oder-Nichts Pod-Zulassung
Gang Scheduling löst das grundlegende Problem der partiellen Workload-Zulassung. Beim traditionellen Kubernetes-Scheduling könnten Pods aus einem verteilten Training-Job einzeln geplant werden, was zu Szenarien führt, wo einige Pods starten, während andere aufgrund von Ressourcenbeschränkungen ausstehend bleiben. Dies führt zu Ressourcenverschwendung und Training-Verzögerungen.
Die neue Gang-Scheduling-Implementierung verwendet die Alles-oder-Nichts-Richtlinie durch das minCount-Feld. Wie im Medium-Artikel von Heba Elayoty dokumentiert: “Das minCount-Feld definiert das Quorum: mindestens so viele Pods müssen zusammen planbar sein, damit die Gruppe zugelassen wird.”
Das bedeutet, Ihr verteilter Training-Job mit 8 Worker-Pods startet nur, wenn alle 8 Pods gleichzeitig geplant werden können, wodurch partielle Deployments verhindert werden, die Ressourcen verbrauchen, ohne nützliche Arbeit zu leisten.
Workload-bewusste Preemption
Kubernetes 1.36 führt workload-bewusste Preemption durch KEP-5710 ein, die Gruppen verwandter Pods als einzelne Einheiten sowohl für Scheduling- als auch für Preemption-Entscheidungen behandelt. Laut Palarks Analyse werden “Gruppen verwandter Pods (PodGroups) nun als einzelne Einheit sowohl für Scheduling als auch für Preemption behandelt. Anstatt Pods einzeln zu entfernen, wird der Scheduler herausfinden”, wie ganze Workload-Gruppen zu handhaben sind.
Dies verhindert das Szenario, wo ein hochpriorisierter Workload nur einige Pods aus einem niedriger priorisierten verteilten Job verdrängt und die verbleibenden Pods laufen lässt, aber keinen Fortschritt machen können. Stattdessen berücksichtigt der Scheduler die gesamte Workload-Gruppe bei Preemption-Entscheidungen.
Gang Scheduling für AI/ML Workloads implementieren
Um Gang Scheduling für Ihre AI-Workloads zu implementieren, arbeiten Sie mit den Workload- und PodGroup-APIs. Die Workload API definiert das statische Template für Ihren verteilten Job, während die PodGroup die Runtime-Koordination verwaltet.
So strukturieren Sie einen verteilten Training-Workload, der alle Pods gemeinsam starten muss:
apiVersion: workload.k8s.io/v1alpha1
kind: Workload
metadata:
name: distributed-training-template
namespace: ml-workloads
spec:
podTemplate:
spec:
containers:
- name: trainer
image: tensorflow/tensorflow:latest-gpu
resources:
requests:
nvidia.com/gpu: 1
memory: 8Gi
cpu: 4
limits:
nvidia.com/gpu: 1
memory: 8Gi
cpu: 4
env:
- name: WORLD_SIZE
value: "8"
- name: RANK
valueFrom:
fieldRef:
fieldPath: metadata.annotations['workload.k8s.io/pod-index']
---
apiVersion: workload.k8s.io/v1alpha1
kind: PodGroup
metadata:
name: training-job-001
namespace: ml-workloads
spec:
workloadRef:
name: distributed-training-template
minCount: 8
replicas: 8
schedulingPolicy: AllOrNothing
Das minCount: 8 stellt sicher, dass alle 8 Training-Pods planbar sein müssen, bevor einer von ihnen startet. Dies verhindert Ressourcenverschwendung durch partielle Deployments und stellt sicher, dass Ihr verteilter Training-Job das vollständige Kontingent an Workern hat, bevor er beginnt.
Ressourcenoptimierungs-Strategien
Gang Scheduling ermöglicht verschiedene Ressourcenoptimierungs-Strategien, die mit individuellem Pod-Scheduling nicht möglich waren:
Koordinierte Ressourcenzuteilung: Da alle Pods in einer Workload-Gruppe zusammen geplant werden, können Sie Ressourcenanforderungen optimieren, da Sie die Anforderungen des gesamten Workloads kennen. Dies verhindert die Überbereitstellung einzelner Pods, um Unsicherheiten darüber zu berücksichtigen, ob der vollständige Workload zugelassen wird.
Verbesserte Cluster-Auslastung: Gang Scheduling reduziert Ressourcenfragmentierung, indem sichergestellt wird, dass Workloads nur dann Ressourcen verbrauchen, wenn sie effektiv laufen können. Dies ist besonders wichtig für GPU-Cluster, wo partielle Workloads teure Ressourcen blockieren, ohne Ergebnisse zu produzieren.
Vorhersagbares Scheduling-Verhalten: Mit Alles-oder-Nichts-Zulassung können Sie vorhersagen, wann Workloads basierend auf verfügbarer Cluster-Kapazität starten, was es einfacher macht, Batch-Verarbeitungsfenster zu planen und SLAs zu verwalten.
Integration mit Dynamic Resource Allocation
Die Verbesserungen beim workload-bewussten Scheduling in Kubernetes 1.36 integrieren sich eng mit Dynamic Resource Allocation (DRA) für GPU-Scheduling. Diese Integration bietet native Unterstützung für koordinierte GPU-Zuteilung über Pod-Gruppen hinweg und eliminiert die Notwendigkeit für benutzerdefinierte Scheduler oder externe Ressourcen-Manager.
Die klare Trennung zwischen Workload- und PodGroup-APIs schafft das, was Ryota Sawada “eine noch klarere Verbindungsstelle für die DRA” nennt, und ermöglicht ausgeklügelte Ressourcenzuteilungsrichtlinien, die die GPU-Anforderungen des gesamten Workloads bei Scheduling-Entscheidungen berücksichtigen.
Richtlinien für die Produktionsimplementierung
Bei der Implementierung von workload-bewusstem Scheduling in der Produktion sollten Sie diese wichtigen Praktiken berücksichtigen:
Beginnen Sie mit unkritischen Workloads: Implementieren Sie Gang Scheduling zunächst für Entwicklungs- und Test-Workloads, bevor Sie zu Produktions-Training-Jobs übergehen. Dies ermöglicht es Ihnen, das Verhalten zu validieren und Ressourcenanforderungen zu optimieren, ohne kritische Workflows zu beeinträchtigen.
Überwachen Sie die Ressourcenauslastung: Verfolgen Sie, wie Gang Scheduling die Gesamtcluster-Auslastung beeinflusst. Während es vorübergehend die Auslastung reduzieren kann, da Workloads auf vollständige Ressourcenverfügbarkeit warten, sollte es die effektive Auslastung durch Reduzierung verschwendeter partieller Deployments verbessern.
Setzen Sie angemessene Timeouts: Konfigurieren Sie vernünftige Timeouts für Workload-Zulassung, um zu verhindern, dass Jobs unendlich auf Ressourcen warten. Dies ist besonders wichtig in geteilten Clustern, wo die Ressourcenverfügbarkeit schwankt.
Planen Sie für Preemption-Szenarien: Gestalten Sie Ihre Workload-Prioritäten und Ressourcenanforderungen unter Berücksichtigung workload-bewusster Preemption. Höher priorisierte Workloads werden ganze niedriger priorisierte Workload-Gruppen verdrängen, nicht einzelne Pods.
Kostenoptimierungs-Vorteile
Gang Scheduling liefert messbare Kostenvorteile für AI/ML-Workloads:
Reduzierte GPU-Verschwendung: Durch die Verhinderung partieller Training-Jobs, die GPU-Ressourcen verbrauchen, ohne Fortschritte zu machen, kann Gang Scheduling die GPU-Auslastungsraten erheblich verbessern. Dies ist kritisch angesichts der GPU-Kosten in Cloud-Umgebungen.
Niedrigere Netzwerkkosten: Verteilte Training-Jobs, die alle Pods gleichzeitig starten, reduzieren die Zeit in Initialisierungs- und Synchronisationsphasen und minimieren zonenübergreifende Netzwerkkosten für Multi-Zone-Deployments.
Verbesserte Durchsatzleistung: Koordiniertes Scheduling reduziert die Zeit zwischen Job-Übermittlung und -Abschluss und ermöglicht es Ihnen, mehr Workloads mit der gleichen Infrastruktur-Investition zu verarbeiten.
Monitoring und Observability
Effektives Monitoring von workload-bewusstem Scheduling erfordert die Verfolgung von Metriken sowohl auf individueller Pod- als auch auf Workload-Gruppen-Ebene. Wichtige Metriken umfassen:
- Workload-Zulassungslatenz (Zeit von Übermittlung bis alle Pods geplant sind)
- Ressourcenauslastungseffizienz (produktive vs. Leerlauf-Ressourcenzeit)
- Preemption-Häufigkeit und Auswirkungen auf Workload-Gruppen
- Warteschlangentiefe für ausstehende Workloads, die auf Gang-Zulassung warten
Die PodGroup API stellt Statusinformationen über Workload-Koordination bereit, die mit individuellem Pod-Monitoring nicht verfügbar waren, und ermöglicht bessere Sichtbarkeit in das Verhalten verteilter Workloads.
Zukunfts-Roadmap und Überlegungen
Kubernetes 1.36 stellt die zweite große Iteration des workload-bewussten Schedulings dar und baut auf dem in 1.35 eingeführten Fundament auf. Der Kubernetes-Blog merkt an, dass “das kürzliche 1.35-Release von Kubernetes die erste Tranche workload-bewusster Scheduling-Verbesserungen lieferte”, was darauf hinweist, dass dies ein sich entwickelnder Bereich mit weiteren geplanten Verbesserungen ist.
Zukünftige Entwicklungen werden sich wahrscheinlich auf ausgeklügeltere Scheduling-Richtlinien, bessere Integration mit Cluster-Autoscaling und erweiterte Unterstützung für heterogene Workloads konzentrieren, die verschiedene Ressourcentypen und Scheduling-Anforderungen mischen.
Die in 1.36 eingeführte saubere API-Trennung bietet ein solides Fundament für diese zukünftigen Verbesserungen bei gleichzeitiger Wahrung der Rückwärtskompatibilität mit bestehenden Workloads.
Erste Schritte
Um mit workload-bewusstem Scheduling in Kubernetes 1.36 zu beginnen, stellen Sie sicher, dass Ihr Cluster die Feature Gates aktiviert hat, und beginnen Sie mit einfachen Gang-Scheduling-Anwendungsfällen. Die native Unterstützung eliminiert die Notwendigkeit für Drittanbieter-Scheduler und benutzerdefinierte Controller, die viele Teams als Workarounds verwendet haben.
Konzentrieren Sie sich auf Workloads, bei denen Koordination klare Vorteile bietet – verteiltes Training, Batch-Verarbeitungs-Pipelines und jede Anwendung, bei der partielle Deployments Ressourcenverschwendung oder operative Komplexität schaffen. Die Investition in die Migration zu workload-bewusstem Scheduling zahlt sich durch verbesserte Ressourceneffizienz und vorhersagbareres Anwendungsverhalten aus.
Die architektonischen Verbesserungen in Kubernetes 1.36 machen workload-bewusstes Scheduling zu einer produktionsreifen Lösung für koordinierte Workloads und bringen endlich native Unterstützung für Muster, die AI/ML- und Batch-Verarbeitungs-Teams seit Jahren benötigt haben.