Autoscaling in Kubernetes – 3 Methoden für optimale Leistung

Kubernetes ermöglicht die Automatisierung vieler Aufgaben und Prozesse, einschließlich der Bereitstellung und Skalierung. Anstatt Ressourcen manuell zuzuweisen, können automatisierte Prozesse verwendet werden. Dies spart Zeit und ermöglicht eine schnelle Reaktion auf Spitzenlasten. Kosten können eingespart werden, indem die Skalierung reduziert wird, wenn Ressourcen nicht benötigt werden.

Die Bereitstellung bezieht sich auf den Prozess der Zuweisung und Einrichtung der erforderlichen Ressourcen, wie z.B. Recheninstanzen oder Speicherplatz, für die Ausführung und Unterstützung Deiner Anwendungen in einem Kubernetes-Cluster. Dazu gehört das Erstellen und Konfigurieren der erforderlichen Infrastrukturkomponenten wie Pods oder Container. So wird sichergestellt, dass notwendige Ressourcen für den Betrieb verfügbar sind.

Die Skalierung befasst sich mit der Anpassung der zugewiesenen Ressourcen, basierend auf der Nachfrage und der Arbeitslast der Anwendungen. Kubernetes bietet dynamische Mechanismen sowohl für das Skalieren nach oben (Erhöhung der Ressourcen) als auch für das Skalieren nach unten (Reduzierung der Ressourcen). Dies gewährleistet, dass Deine Anwendungen Schwankungen im Datenverkehr und der Arbeitslast effizient bewältigen können. Die Skalierung kann horizontal (hinzufügen weiterer Instanzen) oder vertikal (Erhöhung der Kapazität vorhandener Instanzen) erfolgen.

Autoscaling in Kubernetes findet auf zwei Ebenen statt:

  1. Skalierung auf Pod-Ebene – unterstützt durch den Horizontal Pod Autoscaler (HPA) und den Vertical Pod Autoscaler (VPA).
  2. Skalierung auf Node-Ebene – unterstützt durch den Cluster Autoscaler.

Methode 1: Horizontal Pod Autoscaler

Der Horizontal Pod Autoscaler (HPA) ist ein Mechanismus in Kubernetes, der automatisch die Anzahl der laufenden Pods, basierend auf der aktuellen Auslastung, anpasst. Durch die Verwendung des Horizontal Pod Autoscalers können Kubernetes-Anwendungen automatisch auf Veränderungen in der Last oder Nachfrage reagieren. Der HPA ist ein leistungsstarkes Werkzeug, um die Skalierbarkeit von Anwendungen in Kubernetes zu verbessern.

So funktioniert der Horizontal Pod Autoscaler im Detail

Der HPA überwacht kontinuierlich die Ressourcenauslastung (CPU- oder Speicherverbrauch) der Ziel-Pods und skaliert diese horizontal, indem er neue Pods hinzufügt oder überflüssige Pods entfernt. Der HPA definiert eine Zielauslastung (Target Utilization) für die Ressourcen. Wenn die Auslastung den definierten Schwellenwert überschreitet, erhöht der HPA die Anzahl der Pods. Wenn die Auslastung unter den Schwellenwert fällt, verringert der HPA entsprechend die Anzahl der Pods. Hier ist eine Schritt-für-Schritt-Erklärung, wie der HPA funktioniert:

Der HPA wird auf Basis eines Labels oder einer Selector-Konfiguration erstellt, die auf die Zielressourcen verweist. Das bedeutet, dass der HPA bestimmte Ressourcen im Cluster identifiziert, auf die er angewendet werden soll. Dies geschieht durch das Festlegen von Labels (Kennzeichnungen) auf den Ressourcen oder durch die Verwendung von Selectors (Auswahloptionen), um die Zielressourcen zu identifizieren. Der HPA wird dann auf diese ausgewählten Ressourcen angewendet, um die Skalierung basierend auf der Auslastung zu steuern. Der Zielwert (Target Utilization) für die Auslastung der Ressourcen wird festgelegt (z.B. 50% CPU-Auslastung).

Der HPA überwacht kontinuierlich die Ressourcenauslastung der Ziel-Pods. Diese Überwachung erfolgt normalerweise mithilfe von Metriken, die von den Kubernetes-Metrikschnittstellen (wie z.B. Heapster oder Metrics Server) bereitgestellt werden.

Der HPA vergleicht die aktuelle Ressourcenauslastung mit dem definierten Zielwert. Wenn die Auslastung über dem Zielwert liegt, wird ein Skalierungsbedarf festgestellt.

Wenn ein Skalierungsbedarf erkannt wird, erhöht der HPA die Anzahl der Ziel-Pods. Dabei wird normalerweise ein vordefinierter Skalierungsalgorithmus verwendet, um die optimale Anzahl der Pods zu berechnen. Neue Pods werden erstellt und das Kubernetes-Cluster skaliert automatisch horizontal.

Nach der Skalierung der Pods überwacht der HPA weiterhin die Ressourcenauslastung. Wenn die Auslastung wieder unter den Zielwert fällt, wird dies erkannt und eine entsprechende Skalierung nach unten vorgenommen. Überflüssige Pods werden entfernt, um die Ressourcennutzung zu optimieren.

Durch diesen kontinuierlichen Zyklus der Überwachung und Anpassung ermöglicht der HPA eine dynamische Skalierung der Pods, basierend auf der aktuellen Auslastung. Dadurch können Kubernetes-Anwendungen effizient auf Spitzenlasten reagieren und die Ressourcen optimal nutzen, um eine optimale Leistung zu gewährleisten.

Methode 2: Vertical Pod Autoscaler

Der Vertical Pod Autoscaler (VPA) ist ein Mechanismus in Kubernetes, der die Ressourcenanforderungen (CPU und Speicher) von laufenden Pods automatisch anpasst. Dadurch wird eine effizientere Ressourcennutzung ermöglicht. Im Gegensatz zum HPA, der wie beschrieben die Anzahl der Pods skaliert, zielt der VPA darauf ab, die Ressourcen innerhalb der einzelnen Pods anzupassen. Der VPA erkennt die tatsächliche Ressourcennutzung jedes Pods und analysiert historische Daten, um zu bestimmen, ob die zugewiesenen Ressourcen angemessen oder überdimensioniert sind. Basierend auf diesen Informationen passt der VPA die Ressourcenanforderungen des Pods dynamisch an, um eine bessere Ressourcenausnutzung zu erreichen.

So funktioniert der Vertical Pod Autoscaler im Detail

Hier ist eine Schritt-für-Schritt-Erklärung, wie der VPA funktioniert:

Der VPA wird in Kubernetes konfiguriert, entweder auf Namespace- oder Cluster-Ebene. Dabei wird angegeben, für welche Pods der VPA angewendet werden soll.

Der VPA überwacht kontinuierlich die tatsächliche Ressourcennutzung der ausgewählten Pods. Dafür greift er auf Metriken und historische Daten zurück, die normalerweise von Kubernetes-Metrikschnittstellen (wie z. B. Heapster oder Metrics Server) bereitgestellt werden.

Basierend auf den überwachten Daten analysiert der VPA die Ressourcenauslastung jedes Pods und vergleicht diese mit den zugewiesenen Ressourcenanforderungen. Der VPA erkennt, ob die aktuellen Ressourcenanforderungen angemessen sind oder ob Anpassungen vorgenommen werden sollten.

Wenn der VPA feststellt, dass die zugewiesenen Ressourcenanforderungen nicht optimal sind, generiert er Empfehlungen für die aktualisierten Ressourcenanforderungen für die betreffenden Pods. Diese Empfehlungen können dann entweder manuell vom Administrator oder automatisch im Auto-Modus angewendet werden.

Im Auto-Modus werden die empfohlenen Ressourcenanforderungen direkt auf die Pods angewendet, ohne dass manuelle Eingriffe erforderlich sind. Der VPA aktualisiert die Ressourcendefinitionen der Pods, und Kubernetes führt die erforderlichen Aktualisierungen durch, um die Ressourcenanforderungen anzupassen.

Methode 3: Cluster Autoscaler

Der Cluster Autoscaler ist ein Mechanismus in Kubernetes, der die Skalierung des Cluster-Node automatisiert. Er überwacht die Ressourcenauslastung im Cluster und passt die Anzahl der Nodes an, um sicherzustellen, dass genügend Ressourcen für die laufenden Pods vorhanden sind. Der Cluster Autoscaler ermöglicht so eine dynamische Skalierung des Kubernetes-Clusters basierend auf der tatsächlichen Ressourcenauslastung. 

So funktioniert der Cluster Autoscaler im Detail

Der Cluster Autoscaler funktioniert auf Basis von Regeln und Metriken zur Ressourcenauslastung. Hier ist eine Schritt-für-Schritt-Erklärung, wie der Cluster Autoscaler funktioniert:

Der Cluster Autoscaler wird entsprechend der Konfiguration in Kubernetes eingerichtet. Dies beinhaltet das Festlegen von Regeln und Schwellenwerten für die Skalierung, wie z.B. minimale und maximale Anzahl von Nodes oder Schwellenwerte für die Auslastung.

Der Cluster Autoscaler überwacht kontinuierlich die Ressourcenauslastung im Cluster. Hierzu werden Metriken wie CPU-Auslastung, Speicherauslastung oder andere benutzerdefinierte Metriken verwendet.

Der Cluster Autoscaler vergleicht die aktuelle Ressourcenauslastung mit den definierten Schwellenwerten. Wenn die Auslastung über dem Schwellenwert liegt oder bestimmte Bedingungen erfüllt sind (z.B. Engpässe bei den Pods), wird ein Skalierungsbedarf festgestellt.

Wenn ein Skalierungsbedarf erkannt wird, skaliert der Cluster Autoscaler die Anzahl der Cluster-Nodes. Dabei werden neue Nodes hinzugefügt oder nicht genutzte Nodes entfernt.

Nach der Skalierung der Cluster-Nodes überwacht der Cluster Autoscaler weiterhin die Ressourcenauslastung und überprüft, ob die Skalierung zu einem stabilen Zustand geführt hat. Wenn die Auslastung wieder unter den Schwellenwert fällt oder bestimmte Bedingungen erfüllt sind, kann der Cluster Autoscaler die Anzahl der Nodes entsprechend anpassen.

Weitere Methoden: Enhanced Autoscaling

Folgende Methoden erweitern die Möglichkeiten des Autoscalings und bieten zusätzliche Flexibilität bei der Skalierung von Kubernetes-Workloads. Sie ermöglichen die Verwendung von benutzerdefinierten Metriken oder spezifischen Ereignissen, um die Skalierung basierend auf spezifischen Anforderungen oder Geschäftslogik anzupassen.

Der CMA verwendet benutzerdefinierte Metriken, die nicht von Kubernetes-Metrikschnittstellen bereitgestellt werden. Dadurch können Anwendungen auf der Grundlage spezifischer Geschäftsmetriken skaliert werden.

Der Prometheus Adapter ermöglicht die Verwendung von Prometheus-Metriken mit dem HPA. Dadurch kann basierend auf Prometheus-basierten Metriken wie Latenz, Durchsatz oder benutzerdefinierten Anwendungsmetriken skaliert werden.

KEDA ermöglicht die Skalierung basierend auf ereignisgesteuerten Metriken und ist ideal für serverlose Workloads oder Anwendungen, die stark auf Ereignisse reagieren.

Fazit

Die Implementierung von Autoscaling in Kubernetes bietet eine effektive Möglichkeit, die Ressourcenauslastung von Anwendungen zu optimieren und die Skalierbarkeit zu verbessern. Der Einsatz von Mechanismen wie HPA, VPA, dem Cluster Autoscaler und anderen Methoden ist ein wichtiger Bestandteil. Um die spezifischen Anforderungen und den Anwendungsfall zu erfüllen, ist ein Verständnis für die verschiedenen Alternativen sowie deren Vor- und Nachteile unumgänglich. Nur durch die richtige Implementierung von Autoscaling in Kubernetes kannst du eine flexible und robuste Infrastruktur schaffen. Wesentlich ist dabei die Definition von Schwellenwerten. Zu beachten ist, dass jeder dieser Autoscaler seine eigenen Limitierungen und Best Practices hat. Beispielsweise können Einschränkungen bei der Skalierungsgeschwindigkeit oder bei der Nutzung bestimmter Ressourcen auftreten. Die Einflussfaktoren und Anforderungen für ein stabiles Setup sind vielfältig und können individuell bestimmt werden.

Du hast Fragen zum Autoscaling in Kubernetes oder benötigst du genauere Informationen?

Nimm dazu gerne unverbindlichen Kontakt zu unseren Kubernetes-Expert:innen auf.

Share: