Cloud & Infrastruktur

Kubernetes v1.34 ermöglicht Node-Swap für höhere Dichte bei KI-Workloads

Kubernetes v1.34 erreicht die allgemeine Verfügbarkeit (General Availability) für Node-Swap, wodurch Cluster schnelle NVMe-SSDs nutzen können, um inaktiven Speicher auszulagern und die Pod-Dichte für KI-Workloads erheblich zu steigern.

Illustration von Speicherseiten, die von RAM-Modulen auf ein schnelles SSD-Laufwerk bewegt werden.
Für diesen Artikel generierte Illustration

Automatisch aus dem englischen Original übersetzt.

Die Unterstützung von Kubernetes für Nodes mit aktiviertem Swap hat in Version 1.34 den Status der allgemeinen Verfügbarkeit (General Availability) erreicht. Dieses Update ermöglicht es Cluster-Betreibern, schnellen lokalen Speicher zur Bewältigung von Speicherüberläufen zu nutzen und adressiert damit einen kritischen Engpass für moderne agentische KI-Workloads, die oft im Leerlauf sind, während sie große Mengen an RAM verbrauchen.

Was ist passiert?

Speicherkapazität ist häufig die erste harte Grenze, auf die man in Kubernetes-Clustern stößt. Nodes erschöpfen ihren physischen RAM oft lange bevor die CPU-Ressourcen vollständig ausgelastet sind. Diese Einschränkung hat sich mit dem Aufkommen agentischer KI-Workloads verschärft, die erhebliche Speicherfootprints benötigen, um nicht vertrauenswürdigen Code zu initialisieren und auszuführen. Nach dieser anfänglichen Aktivitätsphase gehen diese Agenten oft in lange Phasen des Leerlaufs über, während sie auf Benutzereingaben warten. Das resident halten dieses Ruhezustands im teuren physischen RAM begrenzt die Anzahl der Pods, die ein einzelner Node hosten kann, was die Infrastrukturkosten in die Höhe treibt.

Die Veröffentlichung von Kubernetes v1.34 ändert diese Dynamik durch die offizielle Unterstützung von Node-Swap. Indem der Linux-Kernel anonymen Speicher auf die Festseite auslagert, fungiert Swap als Puffer während Traffic-Spitzen oder Zeiten hoher Speicher-Übersubskription. Wenn dies durch Hochgeschwindigkeits-NVMe-Festkörperlaufwerke (SSDs) unterstützt wird, können Nodes inaktive Speicherseiten auslagern und deutlich mehr Pods auf jeder Maschine packen. Benchmarks zeigen, dass diese Methode Dichtegewinne von bis zum Dreifachen erzielen kann, oft mit minimaler Auswirkung auf die Latenz.

Historisch wurde Swap in Kubernetes-Umgebungen aus zwei Hauptgründen abgeraten. Erstens behandelte die Speicherverwaltung unter cgroup v1 Speicher und Swap als kombinierte Grenze, was es schwierig machte, den tatsächlichen Speicherverbrauch eines Containers zu isolieren und vorherzusagen. Zweitens führte das Auslagern auf traditionelle rotierende Festplatten zu schweren Latenzeinbußen. Die neue Unterstützung basiert auf cgroup v2, das eine separate Swap-Buchführung bietet, und kombiniert dies mit schnellem NVMe-Speicher, um Latenzprobleme zu mildern, was die Funktion für den produktiven Einsatz praktikabel macht.

Wie es funktioniert

Node-Swap funktioniert, indem das Betriebssystem inaktive Speicherseiten vom RAM in einen designated Swap-Bereich auf der Festplatte verschiebt. In Kubernetes v1.34 wird dies über die kubelet-Konfiguration verwaltet. Operatoren setzen failSwapOn auf false und definieren swapBehavior als LimitedSwap. Diese Konfiguration weist den Node an, Swap nur bei Bedarf zu verwenden, anstatt sich darauf als primären Speicher zu verlassen.

Die Wirksamkeit dieses Mechanismus hängt stark von der Geschwindigkeit des zugrunde liegenden Speichers ab. Durch das Routing von Swap zu Local SSDs werden die I/O-Wartezeiten beim Auslagern drastisch reduziert. Dieses Setup funktioniert am besten mit Burstable Quality of Service (QoS)-Klassen, bei denen die Container-Speichergrenzen höher als die Anforderungen gesetzt sind. Der Node rationiert dann automatisch den Swap-Bereich basierend auf der Nutzung des inaktiven Anwendungs-speichers, wobei aktive Prozesse im schnellen physischen RAM gehalten werden, während ruhende Daten auf die Festplatte verschoben werden.

Wichtige Details

  • Kubernetes v1.34 markiert die allgemeine Verfügbarkeit der Node-Swap-Unterstützung.
  • Die Funktion erfordert cgroup v2 für unabhängige Swap-Buchführung und Isolation.
  • Benchmarks zeigen eine Reduzierung des RAM-Footprints um 50 % bei Linux-Kernel-Builds, von 600 MB auf 300 MB.
  • Headless-Chrome-Pods unter Verwendung von gVisor verzeichneten eine Steigerung der Dichte um 100 %, von 80 auf 160 gleichzeitige Pods.
  • Isolierte Python-Sandboxes erreichten eine Verbesserung der Dichte um 200 %, skalierend von 80 auf 240 gleichzeitige Sitzungen.
  • Latenzanstiege bei maximaler Dichte werden primär durch CPU-Konkurrenz getrieben, nicht durch Swap-I/O.

Warum das wichtig ist

Für Ingenieure, die Plattformen für KI-Agenten oder CI/CD-Pipelines entwickeln, bietet diese Entwicklung einen direkten Weg zur Senkung der Infrastrukturkosten. Agentische Workloads sind inhärent bursty; sie spitzen während der Initialisierung und Codeausführung zu und bleiben dann im Leerlauf. Ohne Swap müssen Betreiber genug RAM bereitstellen, um die Spitze zu bewältigen, wobei der Großteil dieses Speichers während der Leerlaufphasen verschwendet wird. Node-Swap ermöglicht es Teams, die Speicheranforderungen für die aktive Nutzung optimal zu dimensionieren und gleichzeitig den Festplattenspeicher als Versicherung gegen Spitzenlasten zu nutzen.

Dies wirkt sich auch auf Sicherheitsarchitekturen aus. Sichere Ausführungsumgebungen wie gVisor oder Kata Containers fügen aufgrund von Isolationsanforderungen Speicheroverhead hinzu. Zuvor schränkte dieser Overhead die Pod-Dichte streng ein. Mit Node-Swap kann der zusätzliche Speicherkosten dieser sicheren Runtimes ausgelagert werden, wenn sie nicht aktiv genutzt werden. Dies bedeutet, dass Teams strenge Sicherheitsgrenzen für nicht vertrauenswürdigen Code beibehalten können, ohne die wirtschaftlichen Vorteile einer hochdichten Scheduling zu opfern.

Was Sie tun können

  • Aktualisieren Sie Ihre Kubernetes-Cluster auf Version 1.34 oder neuer, um auf GA-Node-Swap-Funktionen zuzugreifen.
  • Konfigurieren Sie kubelet mit failSwapOn: false und memorySwap.swapBehavior: LimitedSwap.
  • Stellen Sie sicher, dass Ihre Nodes mit schnellen NVMe Local SSDs ausgestattet sind, um die Swap-Latenz zu minimieren.
  • Setzen Sie Container-Speichergrenzen höher als die Anforderungen, um das Verhalten der Burstable QoS-Klasse zu aktivieren.
  • Führen Sie Benchmarks Ihrer spezifischen Workloads durch, um das optimale Verhältnis von RAM zu Swap-Speicher zu bestimmen.
  • Überwachen Sie die CPU-Konkurrenz bei hohen Dichten, da diese vor dem Swap-I/O zum primären Engpass wird.

Tools aus dem Bytechap-Shop

Weiterlesen

Alle Artikel