PerfectScale
Kubernetes v1.37 (Garhwal): Das ist neu und besser
Kubernetes v1.37 "Garhwal" bringt In-Place-Resize für Sidecars (GA), HPA Scale-to-Zero, Memory QoS und Gang Scheduling. Alle Stable-, Beta- und Alpha-Features.
Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.
TL;DR
Kubernetes v1.37 ("Garhwal") liefert 67 Enhancements: 16 Stable, 23 Beta, 27 Alpha und 1 Entfernung. Die wichtigsten Neuerungen sind In-Place-Resize für Init- und Sidecar-Container (GA), konfigurierbare HPA-Toleranz (GA), Node Declared Features (GA), Scale-to-Zero für den HorizontalPodAutoscaler (Beta), Memory QoS (Beta), Pod-Level Resource Manager (Beta), Gang Scheduling über die neue Workload API (Beta) und der Rootless-Modus für das Kubelet (Beta). Zu den Alpha-Features gehören eine kooperative Eviction Request API und Checkpoint/Restore auf Pod-Ebene sowie weitere Fortschritte bei Dynamic Resource Allocation (DRA). Wichtig: Das SELinux-Mount-Labeling ändert sich in diesem Release standardmäßig und kann bestehende Workloads auf Clustern mit aktiviertem SELinux beeinträchtigen.
Kubernetes v1.37, auch bekannt als "Garhwal", bringt eine starke Reihe von Änderungen für Teams, denen Ressourcenmanagement, Autoscaling und Scheduling wichtig sind. Das Release umfasst 67 Enhancements: 16 davon sind jetzt Stable (GA), 23 Beta, 27 Alpha, und 1 Feature wurde entfernt. Der Name stammt von Garhwal, einer Himalaya-Region im indischen Bundesstaat Uttarakhand. Das Thema dreht sich um Schichten, die miteinander verbunden sind und einander tragen – von Terrassenfeldern bis zu Bergbächen – und passt damit gut zu einem Release, das konsequent auf früheren Versionen aufbaut.
Auf diese Features in Kubernetes v1.37 freuen wir uns besonders: In-Place-Resize für Init- und Sidecar-Container, Scale to Zero für den HorizontalPodAutoscaler, Memory QoS und natives Gang Scheduling über die Workload API. Viele dieser Neuerungen helfen Kubernetes dabei, Ressourcen effizienter zu nutzen, anhand der tatsächlichen Nachfrage zu skalieren und eng gekoppelte Workloads besser zu platzieren.
Das sind die wichtigsten Änderungen in Kubernetes v1.37:
Stable Features in Kubernetes v1.37
1. In-Place Pod Resize für Init- und Sidecar-Container
Feature-Gruppe: SIG Node | KEP: #1287
In-Place Pod Resize wurde in Kubernetes v1.35 Stable (GA). Mit v1.37 wird diese Unterstützung auf Init- und Sidecar-Container ausgeweitet – und auch dieser Teil ist jetzt GA.
Vor dieser Änderung konnten Sie CPU und Arbeitsspeicher eines laufenden App-Containers ohne Neustart anpassen, Init- und Sidecar-Container blieben jedoch außen vor. Ein Sidecar-Container ist ein Init-Container mit restartPolicy: Always und läuft damit über die gesamte Lebensdauer des Pods. Brauchte ein Sidecar mehr CPU oder Speicher, blieb praktisch nur, den Pod neu zu erstellen. Das bedeutete Ausfallzeit auch für die Hauptanwendung, obwohl nur der Sidecar die Änderung benötigte.
Mit v1.37 ist das Feature-Gate InPlacePodVerticalScalingInitContainers GA. Sie können die CPU- und Speicher-Requests oder -Limits eines laufenden Sidecar-Containers ändern, und das Kubelet aktualisiert die cgroup-Einstellungen des Containers im laufenden Betrieb. Der Pod läuft einfach weiter. Über resizePolicy steuern Sie pro Ressource, was passiert: NotRequired wendet die Änderung live an, RestartContainer startet nur diesen einen Container neu. v1.37 ergänzt dasselbe Feature außerdem um zwei Alpha-Bausteine: das In-Place-Resizing von speichergestützten emptyDir-Volumes (Gate InPlacePodVerticalScalingMemoryBackedVolumes) und die Möglichkeit, dass der Scheduler Pods mit niedrigerer Priorität verdrängt, um Platz für ein aufgeschobenes Resize zu schaffen (Gate InPlacePodVerticalScalingSchedulerPreemption).
apiVersion: v1kind: Podmetadata: name: app-with-sidecarspec: initContainers: - name: log-shipper # sidecar image: log-shipper:1.0 restartPolicy: Always resizePolicy: - resourceName: cpu restartPolicy: NotRequired - resourceName: memory restartPolicy: RestartContainer resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "200m" memory: "256Mi" containers: - name: app image: app:1.0 # ...Mit diesem Setup können Sie die CPU des Sidecars ganz ohne Neustart erhöhen. Eine Erhöhung des Speichers startet nur diesen einen Container neu – niemals den gesamten Pod.
2. Konfigurierbare Toleranz für HorizontalPodAutoscaler
Feature-Gruppe: SIG Autoscaling | KEP: #4951
In Kubernetes v1.37 hat die konfigurierbare Toleranz für den HorizontalPodAutoscaler (HPA) den Status General Availability (GA) erreicht.
Der HPA passt die Anzahl der Pod-Replikas anhand von Metriken wie CPU oder Arbeitsspeicher an. Vor diesem Feature nutzte der HPA eine feste Toleranz von 10 % für den gesamten Cluster. Er wurde erst aktiv, wenn die Auslastung mehr als 10 % vom Zielwert abwich. Dieser eine Wert passte nicht zu jedem Workload. Sensible Services konnten zu träge reagieren, und um den Wert zu ändern, mussten Sie ein globales Controller-Flag anpassen, das jeden HPA im Cluster betraf.
Mit v1.37 ist das Feature-Gate HPAConfigurableTolerance GA. Sie können die Toleranz pro HPA und pro Skalierungsrichtung im Feld behavior festlegen. Eine enge Toleranz beim Hochskalieren lässt einen kritischen Service schon auf kleine Lastanstiege reagieren. Eine großzügigere Toleranz an anderer Stelle hält ruhigere Workloads stabil. Das Feature war in v1.35 Beta und ist jetzt Standardverhalten.
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: web-hpaspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: web minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 behavior: scaleUp: tolerance: 0.05Die Toleranz ist ein Verhältnis, keine Angabe in Prozentpunkten. Mit 0.05 und einem Zielwert von 60 % skaliert der HPA hoch, sobald die CPU-Auslastung etwa 63 % übersteigt (60 % mal 1,05). Der HPA reagiert damit früher, als es die alte feste 10-%-Toleranz erlaubt hätte.
3. Node Declared Features
Feature-Gruppe: SIG Node | KEP: #5328
In Kubernetes v1.37 haben Node Declared Features den Status General Availability (GA) erreicht.
Vor diesem Feature ging Kubernetes davon aus, dass ein Node jedes Feature beherrscht, das die Control Plane unterstützt – solange die Versionen innerhalb des unterstützten Skews lagen. Das stimmt aber nicht immer. Wurde ein neues Feature auf der Control Plane aktiviert, konnte der Scheduler einen Pod, der es nutzt, trotzdem auf einem älteren Node platzieren, der es noch nicht unterstützte. Der Pod scheiterte dann zur Laufzeit oder blieb nach dem Scheduling hängen, obwohl die Platzierung korrekt aussah.
Mit v1.37 ist das Feature-Gate NodeDeclaredFeatures GA. Jeder Node veröffentlicht jetzt die Menge der Features, die er versteht, im Feld status.declaredFeatures des Node-Objekts. Scheduler und Admission-Checks nutzen diese Information, um Pods, die ein Feature verwenden, nur auf Nodes zu platzieren, die diese Features unterstützen. So wird aus einem Laufzeitfehler eine klare Scheduling-Entscheidung – besonders wichtig bei Upgrades, wenn Node-Versionen gemischt sind. Node Declared Features war in v1.35 Alpha.
Beta Features in Kubernetes v1.37
4. Scale to Zero für HorizontalPodAutoscaler
Feature-Gruppe: SIG Autoscaling | KEP: #2021
In Kubernetes v1.37 hat Scale to Zero für den HorizontalPodAutoscaler den Beta-Status erreicht und ist standardmäßig aktiviert.
Vor diesem Feature konnte ein HPA einen Workload nicht auf null Replikas herunterskalieren. Das Minimum lag bei eins. Für einen Service, der nur zeitweise Arbeit hat – etwa einen Queue-Consumer oder einen Batch-Worker – hieß das: mindestens einen laufenden Pod bezahlen, selbst wenn es nichts zu tun gab.
Mit v1.37 können Sie spec.minReplicas: 0 auf einem HPA setzen und den Workload im Leerlauf auf null herunterskalieren lassen – und wieder hochfahren, sobald die Nachfrage zurückkehrt. Das funktioniert für Workloads, die über Object- oder External-Metriken gesteuert werden, etwa eine Queue-Länge. Für CPU- oder Speichermetriken funktioniert es nicht, weil diese Metriken von laufenden Pods stammen – und bei null gibt es keine. Das kann die Kosten für Queue-Consumer, Batch-Jobs und GPU-Workloads senken, die zwischen den Läufen brachliegen. Solange der HPA einen Workload bei null hält, setzt er eine ScaledToZero-Condition auf True. So lässt sich unterscheiden, ob ein Workload vom HPA auf null skaliert oder von Hand abgeschaltet wurde. Skaliert er wieder hoch, wechselt die Condition auf False mit dem Grund NotScaledToZero.
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: worker-hpaspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: queue-worker minReplicas: 0 maxReplicas: 20 metrics: - type: External external: metric: name: queue_messages target: type: AverageValue averageValue: "30"Mit dieser Konfiguration fällt der Workload auf null Pods, wenn die Queue leer ist, und der HPA skaliert ihn wieder hoch, sobald Nachrichten eintreffen.
5. Memory QoS
Feature-Gruppe: SIG Node | KEP: #2570
In Kubernetes v1.37 hat Memory QoS den Beta-Status erreicht.
Vor diesem Feature setzte das Kubelet für einen Container ein hartes Speicherlimit (cgroup memory.max), gab dem Kernel aber keine weicheren Signale. Ein Container konnte Speicher bis knapp ans Limit verbrauchen und wurde dann fast ohne Vorwarnung per OOM-Kill beendet. Außerdem gab es keinen Speicherschutz, der an den Request eines Containers gekoppelt war – unter Speicherdruck konnte der Kernel also Seiten von einem Container zurückfordern, der noch innerhalb seines Requests lag.
Mit v1.37 ist das Feature-Gate MemoryQoS Beta. Es nutzt die Speicher-Controls von cgroup v2, um dem Kernel bessere Signale zu geben. Das Kubelet setzt memory.min anhand des Memory-Requests eines Containers und schützt diesen Speicher damit vor Reclaim. Wenn Sie memoryThrottlingFactor in der Kubelet-Konfiguration setzen, setzt das Kubelet zusätzlich memory.high als Drosselungsschwelle unterhalb des Limits. Der Kernel bremst den Container dann und fordert Seiten zurück, bevor er das harte Limit erreicht und per OOM-Kill beendet wird. Standardmäßig ist memoryThrottlingFactor nicht gesetzt, und memory.high bleibt deaktiviert, solange Sie es nicht konfigurieren. Voraussetzung ist cgroup v2 – seit v1.35 ohnehin der einzige unterstützte Modus.
apiVersion: kubelet.config.k8s.io/v1beta1kind: KubeletConfigurationmemoryThrottlingFactor: 0.9Mit dieser Einstellung setzt das Kubelet memory.high für Container unterhalb ihres Speicherlimits, basierend auf dem Faktor 0.9. Der Kernel fordert Speicher zurück und drosselt den Container, bevor er das harte Limit erreicht – OOM-Kills unter Last werden dadurch unwahrscheinlicher.
6. Pod-Level Resource Manager
Feature-Gruppe: SIG Node | KEP: #5526
In Kubernetes v1.37 haben die Pod-Level Resource Manager den Beta-Status erreicht.
Kubernetes v1.34 führte Pod-Level Resources ein (KEP #2837), mit denen sich CPU- und Speicher-Requests und -Limits für den gesamten Pod statt nur pro Container festlegen lassen. Die Resource Manager des Kubelets verstanden diese Pod-Level-Werte allerdings noch nicht. Vor diesem Feature betrachteten CPU Manager, Memory Manager und Topology Manager nur die Requests einzelner Container. Ein Pod, der Ressourcen auf Pod-Ebene definierte, konnte dadurch exklusives CPU-Pinning oder NUMA-Alignment verpassen.
Mit v1.37 ist das Feature-Gate PodLevelResourceManagers Beta. In v1.37 ist es standardmäßig deaktiviert: Es war zunächst aktiviert, wurde aber spät im Release-Zyklus wieder abgeschaltet, nachdem das Team kritische Probleme gefunden hatte. Wer es nutzen möchte, aktiviert es also selbst. Ist es aktiv, berücksichtigen der CPU Manager (Static Policy), der Memory Manager und der Topology Manager Pod-Level-Ressourcen bei der Zuweisung von CPUs, Speicher und Hardware-Lokalität. Das hilft latenzsensiblen und anspruchsvollen Workloads, die Ressourcen auf Pod-Ebene definieren – sie bekommen weiterhin exklusive Cores und NUMA-ausgerichteten Speicher.
apiVersion: v1kind: Podmetadata: name: guaranteed-podspec: resources: # pod-level resources requests: cpu: "2" memory: "4Gi" limits: cpu: "2" memory: "4Gi" containers: - name: app image: app:1.0 # containers can set their own resources, or use the pod-level onesMit dieser Konfiguration ist der Pod auf Pod-Ebene Guaranteed, und die Manager des Kubelets können ganze CPUs pinnen und Speicher für ihn ausrichten – selbst wenn der Container keine eigenen Requests setzt.
7. Gang Scheduling mit der Workload API
Feature-Gruppe: SIG Scheduling | KEP: #4671
In Kubernetes v1.37 hat natives Gang Scheduling über die Workload API den Beta-Status erreicht.
Vor diesem Feature plante Kubernetes Pods einzeln ein. Bei eng gekoppelten Jobs – etwa einem verteilten Trainingslauf, bei dem alle Worker gemeinsam starten müssen – führte das zu partiellem Scheduling: Einige Pods starteten, andere blieben pending, belegten Ressourcen und leisteten nichts. Teams mussten einen externen Scheduler ergänzen, um Alles-oder-nichts-Verhalten (Gang) zu bekommen. Kubernetes v1.35 führte natives Gang Scheduling als Alpha über eine neue Workload API ein.
Mit v1.37 lautet die API jetzt scheduling.k8s.io/v1beta1. Aktiviert wird sie über das Feature-Gate GenericWorkload. In v1.37 wurden die älteren Gates GangScheduling und WorkloadAwarePreemption in GenericWorkload zusammengeführt – ein Gate deckt jetzt sowohl Gang Scheduling als auch Workload-aware Preemption ab. Das Modell besteht aus drei Teilen: Ein Workload enthält ein oder mehrere podGroupTemplates, jeweils mit einer Scheduling-Policy wie gang und einem minCount. Eine PodGroup wird aus einem Template erzeugt und verfolgt eine laufende Gruppe. Jeder Pod verweist über schedulingGroup.podGroupName auf seine Gruppe. Der Scheduler hält die Pods zurück, bis mindestens minCount von ihnen gemeinsam laufen können, und platziert sie dann. Kann er minCount nicht erreichen, wird keiner gebunden, und die Pods warten, bis Platz ist. Das Feld minCount bleibt nach der Erstellung änderbar – hilfreich für elastische Jobs, die hoch- oder herunterskalieren.
Der Workload definiert das Template:
apiVersion: scheduling.k8s.io/v1beta1kind: Workloadmetadata: name: training-jobspec: podGroupTemplates: - name: workers schedulingPolicy: gang: minCount: 4Eine PodGroup wird aus diesem Template erzeugt:
apiVersion: scheduling.k8s.io/v1beta1kind: PodGroupmetadata: name: training-job-workers-0spec: workloadRef: workloadName: training-job templateName: workers schedulingPolicy: gang: minCount: 4Jeder Pod tritt der Gruppe über ihren Namen bei:
apiVersion: v1kind: Podmetadata: name: worker-0spec: schedulingGroup: podGroupName: training-job-workers-0 containers: - name: trainer image: trainer:1.0 # ...Mit diesem Setup plant Kubernetes die Worker erst ein, wenn mindestens vier von ihnen gemeinsam laufen können. Finden im Cluster keine vier Platz, startet keiner von ihnen.
8. Kubelet im User Namespace (Rootless-Modus)
Feature-Gruppe: SIG Node | KEP: #2033
In Kubernetes v1.37 hat der Betrieb des Kubelets in einem User Namespace, auch Rootless-Modus genannt, den Beta-Status erreicht.
Vor diesem Feature liefen Node-Komponenten wie das Kubelet als Root auf dem Host. Wurde das Kubelet kompromittiert, konnte ein Angreifer Root-Rechte auf dem gesamten Node erlangen.
Mit v1.37 ist das Feature-Gate KubeletInUserNamespace Beta. Es lässt das Kubelet und die übrigen Node-Komponenten in einem Linux User Namespace laufen. Innerhalb des Namespace erscheinen sie weiterhin als Root, auf dem Host sind sie jedoch einem unprivilegierten Benutzer zugeordnet. Das schafft eine zusätzliche Isolationsschicht, ohne die tägliche Arbeit mit dem Kubelet zu verändern. Dieses Feature ist seit v1.22 in Arbeit – der Sprung auf Beta ist also ein großer Schritt.
Alpha Features in Kubernetes v1.37
9. Eviction Request API
Feature-Gruppe: SIG Node | KEP: #4563
Vor diesem Feature war das Drainen eines Nodes für Wartungsarbeiten eine clientseitige Aktion. Ein Tool wie kubectl drain entfernte Pods nacheinander per Eviction und respektierte dabei PodDisruptionBudgets, aber die Absicht lag im Client, nicht im Cluster. Controller und Anwendungen konnten weder erkennen, dass ein Node gedraint wird, noch einen sicheren Handoff koordinieren oder an der Entscheidung mitwirken. Eine Stateful-App konnte zum denkbar ungünstigsten Zeitpunkt verdrängt werden, weil sie von der anstehenden Wartung nichts erfuhr.
Mit v1.37 ergänzt ein Alpha-Feature die EvictionRequest API, damit Eviction kooperativ ablaufen kann statt als hartes Löschen. Ein Requester erstellt einen EvictionRequest für einen Pod, und Komponenten, die sich über das neue Pod-Feld spec.evictionResponders registriert haben, kümmern sich um einen sauberen Handoff. v1.37 ergänzt außerdem neue Node-Lifecycle-Conditions (MaintenancePlanned, MaintenanceInProgress, GracefulNodeShutdownInProgress, DrainInProgress und Drained), über die Controller nachvollziehen können, wo sich ein Node im Wartungsablauf befindet. Zusammen ermöglicht das Anwendungen und Operatoren, das Drainen zu ihren eigenen Bedingungen abzuwickeln – etwa indem sie einen Leader verschieben oder ihren State wegschreiben, bevor ihr Pod verschwindet.
10. Checkpoint und Restore auf Pod-Ebene
Feature-Gruppe: SIG Node | KEP: #5823
Vor diesem Feature konnte Kubernetes nur von einem einzelnen Container einen Checkpoint erstellen (KEP #2008), vor allem für forensische Analysen. Sie konnten den Zustand eines Containers als Snapshot sichern, aber nicht einen ganzen Pod auf einmal – ein Multi-Container-Pod ließ sich also nicht als eine Einheit erfassen.
Mit v1.37 ergänzt ein Alpha-Feature Checkpoint und Restore auf Pod-Ebene. Es erweitert das Container Runtime Interface (CRI) um die Aufrufe CheckpointPod und RestorePod, sodass das Kubelet und eine kompatible Runtime alle Container eines Pods gemeinsam sichern und anschließend wiederherstellen können. Das ist heute für forensische Arbeit nützlich und legt den Grundstein für künftige Anwendungsfälle wie das Verschieben eines laufenden Pods zwischen Nodes. Das Feature setzt eine Container-Runtime voraus, die die neuen CRI-Aufrufe unterstützt.
Dynamic Resource Allocation (DRA) – laufende Arbeiten
Feature-Gruppe: SIG Node / SIG Scheduling
Dynamic Resource Allocation (DRA) ist der native Weg, wie Kubernetes spezielle Hardware wie GPUs und andere Geräte anfordert und teilt – wobei der Scheduler weiß, was zugewiesen ist. Der DRA-Kern erreichte GA in v1.34. In v1.37 machen mehrere DRA-Features Fortschritte.
Device Taints und Tolerations (jetzt GA): Device Taints erlauben es einem einzelnen Gerät – nicht dem ganzen Node – zu signalisieren, dass es gemieden werden soll; Claims fügen Tolerations hinzu, um es dennoch zu akzeptieren. Das Feature erreichte in v1.37 GA und ist in der API resource.k8s.io/v1 verfügbar. So können Sie eine einzelne defekte GPU sperren oder markieren, ohne den ganzen Node außer Betrieb zu nehmen.
DRA Extended Resource (jetzt GA): Damit fordern Sie DRA-verwaltete Geräte im vertrauten Extended-Resource-Stil in den Requests eines Pods an, während DRA die Zuweisung im Hintergrund übernimmt. Das Feature erreichte in v1.37 GA.
ResourceClaim Device Status (jetzt GA): Der Status eines beanspruchten Geräts – etwa Netzwerkdetails, die ein Treiber zurückmeldet – ist jetzt GA. Tools können den Gerätezustand auf standardisierte Weise auslesen.
Workload Resource Claims (jetzt Beta): Resource Claims lassen sich jetzt an einen Workload binden – dieselbe Workload API, die auch für Gang Scheduling genutzt wird –, sodass eine Gruppe von Pods Device Claims gemeinsam nutzen kann. In v1.37 ist das Feature Beta; das Gate DRAWorkloadResourceClaims ist standardmäßig deaktiviert.
DRA Node Allocatable Resources (Alpha, fürs Ressourcenmanagement einen Blick wert): Diese Alpha-Arbeit lässt DRA Node-Ressourcen wie CPU, Speicher und Hugepages als Geräte modellieren. Ist sie aktiv, berücksichtigt das Kubelet DRA-zugewiesene Ressourcen beim Setzen von Pod- und Container-cgroups, OOM-Scores und Memory-QoS-Schwellwerten. Auch Standard-Requests und -Limits lassen sich für Pods mit DRA-Claims in-place anpassen. Das steht noch am Anfang, deutet aber auf eine Zukunft hin, in der DRA Kernressourcen verwalten kann – nicht nur Zusatzgeräte.
Deprecations / Entfernungen
SELinux Mount wird zum Standard (Handlungsbedarf): Das Feature-Gate SELinuxMount ist in v1.37 GA und standardmäßig aktiviert. Auf Clustern mit aktiviertem SELinux ändert das die Kennzeichnung von Volumes und kann einige bestehende Workloads beeinträchtigen. Wenn Sie SELinux einsetzen, lesen Sie vor dem Upgrade den Kubernetes-Blogbeitrag zu den Änderungen beim SELinux-Volume-Labeling, damit Sie betroffene Workloads finden und korrigieren oder das Verhalten vorher per Opt-out deaktivieren können. Cluster ohne SELinux sind nicht betroffen.
kube-proxy IPVS-Modus ist deprecated: Der IPVS-Modus für kube-proxy ist seit v1.35 deprecated. In v1.37 gibt kubeadm eine Warnung aus, wenn er verwendet wird. Auf neueren Linux-Kerneln lautet die Empfehlung nftables, seit v1.33 GA. Auf älteren Kerneln bleibt iptables Standard und wird weiterhin unterstützt.
Die API scheduling.k8s.io/v1alpha2 wurde entfernt: Die Version scheduling.k8s.io/v1alpha2 wurde in v1.37 gestrichen. Die neueren Alpha-Typen sind nach v1alpha3 umgezogen, die zentralen Workload- und PodGroup-Typen sind jetzt v1beta1. Wenn Sie die frühere Workload-aware-Scheduling-API genutzt haben, entfernen Sie vor dem Upgrade alle v1alpha2-Objekte vom API-Server.
Legacy-cAdvisor-Flags und -Metriken wurden entfernt: Der im Kubelet eingebaute cAdvisor wurde auf einen schlankeren Build umgestellt. Mehrere seit Langem als deprecated markierte cAdvisor-Flags werden nicht mehr akzeptiert, und das Kubelet startet nicht, wenn eines davon gesetzt ist (nur --housekeeping-interval bleibt erhalten). Einige alte cAdvisor-Metrikreihen wie container_tasks_state und container_cpu_load_average_10s werden nicht mehr exportiert. Prüfen Sie Ihre Kubelet-Flags und alle Dashboards, die diese Reihen verwendet haben.
Weitere Entfernungen und Hinweise: Das Feature-Gate AnyVolumeDataSource, seit v1.33 fest aktiviert, wurde entfernt. Kubernetes hat außerdem die Entfernung einiger als deprecated markierter Kubelet-Flags für die Container-Runtime-Konfiguration von v1.37 auf v1.38 verschoben, um sich mit dem Support für containerd v1.7 abzustimmen. Wenn Sie noch eine ältere containerd-Version betreiben, planen Sie Ihr Upgrade.
Kubernetes v1.37 bringt insgesamt 67 Enhancements. Über die hier behandelten Änderungen hinaus enthält das Release weitere Arbeiten in den Bereichen Autoscaling, Storage, Security und Observability – etwa die Metrics API (metrics.k8s.io), die v1 erreicht, den Abschluss der Arbeiten an der Watch-Cache-Initialisierung (das verbleibende Gate WatchCacheInitializationPostStartHook erreichte Stable) und Manifest-basierte Admission Control, die auf Beta wechselt. Wir empfehlen, die Kubernetes Release Notes zu v1.37 zu lesen und für die vollständige Liste in dieses Changelog zu schauen.
So bleiben Ihre Workloads mit PerfectScale by DoiT gesund
Kubernetes v1.37 gibt Ihnen bessere Werkzeuge für das Ressourcenmanagement an die Hand. Sie können Sidecars ohne Neustart anpassen, eine HPA-Toleranz pro Workload festlegen, ungenutzte Workloads auf null skalieren und Speicher mit Memory QoS schützen. Doch diese Werkzeuge zahlen sich nur aus, wenn Sie die richtigen Werte wählen. Setzen Sie Requests und Limits zu niedrig, drohen OOM-Kills, CPU-Throttling und Evictions. Setzen Sie sie zu hoch, bezahlen Sie für Kapazität, die Sie nie nutzen. Das von Hand zu erledigen – für jeden Workload, in einem Cluster, der sich ständig verändert – ist kaum zu stemmen.
PerfectScale by DoiT ist eine Governance-Plattform für Kubernetes, die genau das für Sie übernimmt. Sie überwacht Ihre Workloads auf ressourcenbedingte Risiken wie OOM-Kills, CPU-Throttling und Evictions und übersetzt sie in umsetzbare, automatisierte Right-Sizing-Empfehlungen, die Sie manuell oder autonom anwenden können. So realisieren Sie die Einsparungen von Features wie Scale to Zero und In-Place-Resize, ohne Ihre SLOs zu gefährden. Teams wie Paramount Pictures und Creditas nutzen PerfectScale, um ihre Cluster gleichzeitig kosteneffizient und zuverlässig zu halten.
Registrieren Sie sich oder buchen Sie eine technische Demo, um herauszufinden, wo Ihr Cluster Geld verschwendet oder Risiken birgt.
FAQ
Warum heißt Kubernetes v1.37 "Garhwal"?
Der Release-Name stammt von Garhwal, einer Himalaya-Region im indischen Bundesstaat Uttarakhand. Das Thema dreht sich um Schichten, die miteinander verbunden sind und einander tragen – von Terrassenfeldern bis zu Bergbächen – und passt zu einem Release, das konsequent auf früheren Versionen aufbaut.
Wie viele Enhancements enthält Kubernetes v1.37?
Insgesamt 67: 16 sind jetzt Stable (GA), 23 Beta, 27 Alpha, und 1 Feature wurde entfernt.
Was sind die größten Neuerungen in Kubernetes v1.37?
Die herausragenden Änderungen sind In-Place-Resize für Init- und Sidecar-Container (GA), konfigurierbare HPA-Toleranz (GA), Node Declared Features (GA), Scale-to-Zero für den HorizontalPodAutoscaler (Beta), Memory QoS (Beta), Pod-Level Resource Manager (Beta) und natives Gang Scheduling über die Workload API (Beta).
Kann ich ein Deployment mit dem HorizontalPodAutoscaler auf null Replikas skalieren?
Ja. Scale to Zero für den HPA ist in v1.37 Beta und standardmäßig aktiviert. Setzen Sie spec.minReplicas: 0 – das funktioniert für Workloads, die über Object- oder External-Metriken gesteuert werden, etwa die Queue-Länge. Für CPU- oder Speichermetriken funktioniert es nicht, da diese von laufenden Pods stammen und es bei null keine gibt.
Kann ich die Ressourcen eines Sidecar-Containers anpassen, ohne den ganzen Pod neu zu starten?
Ja. Das Feature-Gate InPlacePodVerticalScalingInitContainers ist in v1.37 GA und erweitert das In-Place-Resize (für App-Container bereits seit v1.35 GA) auf Init- und Sidecar-Container. Ob eine Änderung live greift oder nur diesen einen Container neu startet, hängt von der resizePolicy ab, die Sie pro Ressource festlegen.
Was ist Memory QoS in Kubernetes v1.37?
Memory QoS, jetzt Beta, nutzt cgroup-v2-Controls (memory.min und memory.high), um den angeforderten Speicher eines Containers vor Reclaim zu schützen und ihn zu drosseln, bevor er sein hartes Limit erreicht – OOM-Kills unter Last werden dadurch unwahrscheinlicher.
Was wird in Kubernetes v1.37 deprecated oder entfernt?
SELinux Mount wird zum GA-Standard und kann die Volume-Kennzeichnung auf Clustern mit aktiviertem SELinux verändern (Handlungsbedarf vor dem Upgrade). Der IPVS-Modus von kube-proxy ist zugunsten von nftables deprecated. Die API scheduling.k8s.io/v1alpha2 sowie Legacy-cAdvisor-Flags und -Metriken wurden entfernt.
Wie funktioniert Gang Scheduling in der neuen Workload API?
Ein Workload definiert ein oder mehrere podGroupTemplates mit einer Scheduling-Policy (etwa gang) und einem minCount. Pods treten einer aus dem Template erzeugten PodGroup bei, und der Scheduler platziert sie erst, wenn mindestens minCount Pods gemeinsam laufen können – nützlich für eng gekoppelte Jobs wie verteiltes Training.