Ressourcen-Management in Kubernetes: Eine VPA Success Story

Ressourcenmanagement in Kubernetes: Eine VPA Success Story

Kubernetes hat die Art und Weise, wie Unternehmen Container-Orchestrierung betreiben, revolutioniert. Es ermöglicht die einfache Bereitstellung und Verwaltung von Applikationen in Containern. Einer der Schlüsselaspekte bei der Verwendung von Kubernetes ist jedoch das Ressourcenmanagement, insbesondere von Pods, den kleinsten Bereitstellungseinheiten.

 

Ressourcenverwaltung mit «Limits und Requests»

Limits und Requests in Kubernetes und OpenShift werden verwendet, um die Ressourcenverwaltung für Container in einem Cluster zu steuern und zu optimieren. Diese beiden Konzepte stellen sicher, dass Container die benötigten Ressourcen erhalten und gleichzeitig die Clusterressourcen effizient genutzt werden. Dieses Feature ist gleichzeitig auch eine der grössten Herausforderungen beim Betreiben von Kubernetes und OpenShift. Dies aus mehreren Gründen:

1. Um die Ressourcennutzung effizient zu gestalten, müssen Limits und Requests sorgfältig abgestimmt werden. Dies erfordert ein tiefes Verständnis der Anwendung und deren Ressourcenbedarf unter verschiedenen Lastbedingungen.

2. Moderne Anwendungen bestehen oft aus vielen Containern, die miteinander interagieren. Das Festlegen von Limits und Requests für jede Komponente kann daher komplex werden.

3. Die Ressourcennutzung in Kubernetes kann sich im Laufe der Zeit ändern. Es ist notwendig, die Ressourcenverwendung regelmässig zu überwachen und die Limits und Requests entsprechend anzupassen.

4. Es gibt oft keine Standardrichtlinien oder bewährten Methoden für die Festlegung von Limits und Requests. Dies bedeutet, dass Administratoren und Entwickler oft ihre eigenen Vorgehensweisen entwickeln müssen, was zu inkonsistenten Konfigurationen führen kann.

5. Das Festlegen von Limits und Requests in YAML-Dateien kann fehleranfällig sein. Ein Tippfehler oder eineungenaue Schätzung der Ressourcenanforderungen kann zu unerwartetem Verhalten führen.

6. In grossen Kubernetes-Clustern mit vielen Knoten und sich ändernden Lastbedingungen kann die Ressourcenverwaltung eine grosse Herausforderung darstellen, da die Verwendung von Ressourcen über den gesamten Cluster hinweg optimiert werden muss.

7. Es kann schwierig sein, eine klare Übersicht über die Ressourcennutzung in einem Kubernetes-Cluster zuerhalten, insbesondere in verteilten Umgebungen. Dies kann die Identifizierung von Engpässen und Leistungsproblemen erschweren.

Erster Schritt: Mehr Transparenz

Für uns war es naheliegend, die Transparenz für den Ressourcenverbrauch zu erhöhen. Da Prometheus für Kubernetes und OpenShift fürs Monitoring de-facto Standard ist, haben wir auf diesem aufgebaut. In Zusammenarbeit mit einem Kunden konnten wir mittels selbst entwickelten Grafana Dashboards die Transparenz für Softwareentwickler und Applikationsowner erhöhen. Diese Dashboards sind Open Source und stellen wir kostenlos auf GitHub zur Verfügung.

 

Vertical Pod Autoscaler (VPA) als Lösung

Oft werden Ressourcen bei Engpässen manuell, basierend auf den Werten aus dem Monitoring angepasst. Speziell bei neuen Applikationen, wo der Bedarf noch unbekannt ist, oder bei Applikationen, bei welchen die Last stark fluktuiert, kann dies mühsam und ineffizient sein. Um die Ressourcen dynamisch und automatisiert zu setzen haben wir den Vertical Pod Autoscaler (VPA) unter die Lupe genommen. Der VPA analysiert kontinuierlich die Leistung von Pods und passt ihre Ressourcenbedarf entsprechend an. Wir wollten den VPA bereits in der Vergangenheit für die Ressourcenoptimierung verwenden, dieser eignete sich aber aufgrund der fehlenden Möglichkeit, Einfluss auf die Berechnung der Empfehlungen zu nehmen, sehr schlecht. In anderen Worten: Die Empfehlungen für die Requests waren immer viel zu hoch, was oftmals mehr Ressourcen verschwendete als eingespart hätte.

Mit der Version 0.13 änderte sich dies. Es ist nun möglich, das Perzentil für die Berechnung zu konfigurieren und somit den VPA für das dynamische Setzen der Limits und Requests zu verwenden. Durch den Einsatz des VPA’s, konnte beispielsweise unser Kunde Kosten in der Höhe von mehreren 100’000 CHF einsparen. Nebst den finanziellen Vorteilen konnte durch die effizientere Nutzung der Hardware ebenfalls der ökologische Fussabdruck reduziert werden. Was schwer messbar ist, aber dennoch eine erhebliche Einsparung mit sich bringt, sind die wegfallenden Arbeitsaufwände, die für die Ressourcenverwaltung ohne VPA erforderlich wären. Der Einsatz des VPAs war derart erfolgreich, dass der Kunde inzwischen erwägt, diesen in allen Clustern zu implementieren.

Das Ressourcenmanagement von Pods in Kubernetes ist eine komplexe Aufgabe, die eine sorgfältige Planung und Überwachung erfordert. Der Vertical Pod Autoscaler ist ein leistungsstarkes Werkzeug, um diese Herausforderungen zu bewältigen und sicherzustellen, dass Anwendungen reibungslos laufen und die Ressourcen effizient genutzt werden. Wer Kubernetes verwendet, sollten definitiv den VPA in Betracht ziehen, um das Ressourcenmanagement zu optimieren und die Leistung der Anwendungen zu verbessern. Wir unterstützen dich und dein Unternehmen gerne dabei.