Wie Sie aufhören, für die Cloud zu viel zu bezahlen, und mit dem Kubernetes Autoscaler leben lernen
Stellen Sie sich vor: Sie haben eine Werbekampagne gestartet, der Verkehr schießt in die Höhe, und Ihre Pods in Kubernetes beginnen unter der Last zu „ersticken". Oder das Gegenteil: Die Nacht bricht herein, die Benutzer schlafen, aber Dutzende teurer Instanzen drehen sich weiter in der Cloud und verbrennen Ihr Unternehmensbudget. Klingt bekannt?
Normalerweise erinnert man sich in solchen Momenten an Autoskalierung. Im Kubernetes-Ökosystem wird dies vom kubernetes/autoscaler-Repository verwaltet. Es ist nicht nur ein einzelnes Werkzeug, sondern eine ganze Suite von Tools, die dem Cluster helfen, mit der Last zu „atmen". Ich habe mich entschieden herauszufinden, was darin steckt und warum es für jede Produktionsumgebung unverzichtbar ist.
Was steckt unter der Haube
Das Repository enthält drei Hauptkomponenten. Jede löst ihre eigene spezifische Aufgabe, und sie werden oft miteinander verwechselt.
Cluster Autoscaler: Wenn nicht genug „Eisen" vorhanden ist
Dies ist wahrscheinlich das beliebteste Tool im Set. Seine Aufgabe ist einfach: Wenn Pods im Cluster erscheinen, die aufgrund fehlender Ressourcen nicht starten können (Pending-Status), geht der Cluster Autoscaler zum Cloud-Anbieter und bittet um einen neuen Node.
Es funktioniert auch andersherum. Wenn ein Node lange Zeit halb leer sitzt und seine Pods sicher auf andere Nodes verschoben werden können, entfernt der Autoscaler die überschüssige Hardware. Das sind direkte Kosteneinsparungen, besonders wenn Sie bei AWS, GCP oder Azure sind.
Vertical Pod Autoscaler (VPA): Die Magie der Ressourcenoptimierung
Wenn der Cluster Autoscaler die Anzahl der Nodes ändert, ändert VPA die „Größe" der Pods selbst. Oft setzen Entwickler requests und limits nach Augenmaß. Das Ergebnis ist entweder, dass die Anwendung mit OutOfMemory abstürzt, oder wir reservieren 2 GB RAM, wo nur 200 MB benötigt werden.
VPA überwacht den tatsächlichen Ressourcenverbrauch und passt die Limits automatisch an. Das Projekt befindet sich derzeit im Beta-Status, aber es macht bereits etwas wirklich Cooles – den Recommendation-Modus. Sie können einfach beobachten, welche Ressourcen es vorschlägt, ohne ihm zu vertrauen, dass es automatisch Pods neu startet.
Addon Resizer: Mikro-Management für Systemdienste
Dies ist eine vereinfachte Version des vertikalen Autoscalers. Sie wird für Dienste benötigt, deren Ressourcenverbrauch linear mit der Clustergröße skaliert. Zum Beispiel braucht der Metrics-Server mehr Speicher, wenn Sie 100 Nodes statt 10 haben. Addon Resizer überwacht die Anzahl der Nodes und skaliert solche Hilfskomponenten entsprechend.
Wie es in der Praxis funktioniert
Angenommen, Sie verwenden Go. Um mit dem Projektcode lokal zu arbeiten, müssen Sie der Pfadstruktur folgen, an die Kubernetes gewöhnt ist. Der Code sollte in k8s.io leben, nicht in github.com.
Interessanter Punkt: Cluster Autoscaler unterstützt Dutzende von Anbietern. Es gibt nicht nur Giganten wie AWS, sondern auch spezifische Lösungen für Bare-Metal- oder lokale Cluster. Wenn Sie Ihren eigenen Cloud-Dienst aufbauen, müssen Sie das CloudProvider-Interface implementieren, und Ihr Cluster lernt auch zu skalieren.
Warum das für Entwickler wichtig ist
Viele denken, Autoskalierung ist die Aufgabe des DevOps-Ingenieurs. In Wirklichkeit macht das Verständnis, wie vertical-pod-autoscaler funktioniert, das Leben für Backend-Entwickler viel einfacher.
- Sie können aufhören, beim Konfigurieren von Ressourcen zu raten.
- Anwendungen werden widerstandsfähiger gegen plötzliche Verkehrsspitzen.
- Sie sehen das echte Speicher- und CPU-Verbrauchsprofil Ihres Codes.
Übrigens enthält das Repository offizielle Helm-Charts für die schnelle Installation. Das ist viel bequemer, als zu versuchen, Manifeste manuell bereitzustellen.
Sollten Sie es gleich einführen?
Wenn Sie in der Cloud arbeiten und Ihre Infrastrukturkosten steigen, dann ist der Cluster Autoscaler die Grundlage. Er amortisiert die Einrichtungszeit innerhalb des ersten Betriebsmonats.
Bei Vertical Pod Autoscaler ist die Situation komplizierter. Da es Pods neu startet, um Ressourcen zu ändern (bis K8s echte In-Place-Ressourcen-Updates bekommt), muss es vorsichtig eingesetzt werden. Ich würde empfehlen, mit dem Recommender-Modus zu beginnen. Sie erhalten eine Liste von Ressourcenoptimierungstipps, aber VPA wird nichts anfassen.
Das Projekt ist lebendig und wird von einer großen Community unterstützt (fast 9.000 Stars und Tausende von Forks). Wenn Sie Fragen haben, sind die Leute im Kubernetes-Slack-Kanal #sig-autoscaling aktiv.
Wenn Ihr Cluster also noch statisch ist – werfen Sie einen Blick auf dieses Repository. Es wird Zeit, die Cloud für sich arbeiten zu lassen, nicht gegen sich.
Ähnliche Projekte