Kubernetes

Kubernetes Horizontal Pod Autoscaler

Kubernetes Horizontal Pod Autoscaler
Pods können als eigenständige Objekte oder als Teil eines skalierbaren Replikatsatzes oder einer Bereitstellung erstellt werden. Jedes der beiden letztgenannten Objekte wird verwendet, um nicht nur einen, sondern eine Vielzahl von Pods bereitzustellen. Das Ziel hier ist, dass die Schoten fungibel sein können, wenn einer zu viel Verkehr hat, können zwei weitere auftauchen und die zusätzliche Belastung aufnehmen. Hier ist jedoch wichtig zu beachten, dass sowohl Replikatsätze als auch Bereitstellungsobjekte über eine fest codierte Anzahl von Pod-Replikaten verfügen, die ausgeführt werden sollen.

Wenn die Anzahl der Replikate auf 100 gesetzt ist und die Nachfrage zu gering ist, sind die 100 Pods auch dann betriebsbereit. Dies führt zu einer Verschwendung von CPU- und Speicherressourcen. Ja, es bietet Zuverlässigkeit in dem Sinne, dass der Replikatset-Controller, wenn ein Knoten abstürzt und Pods darin sterben, versuchen würde, die Anzahl der Pods auf 100 zurückzusetzen, indem er Pods in anderen Knoten spawnt. Die Bewerbung bleibt online.

In einem abstrakteren Sinne würde das Replikat-Set versuchen, ein Wunschzustand des Clusters und würde sich die aktuellen Zustand und finden Sie heraus, wie es den gewünschten Zustand erreichen kann.

Wir hätten jedoch gerne etwas Sensibleres für die reale Nachfrage. Eingeben Horizontaler Pod-Autoscaler. Es ist die Aufgabe von Horizontal Pod Autoscaler, die Anwendung bei Bedarf hochzuskalieren und sie dann wieder herunterzuskalieren, wenn die Arbeitslast sinkt.

Warum einen horizontalen Pod-Autoscaler verwenden??

Wie der Name schon sagt, würde diese Komponente Ihre Anwendung automatisch skalieren. In der Cloud kann Ihnen dies wirklich helfen, die Rechen- und Speicherressourcen zu reduzieren, die Ihnen in Rechnung gestellt werden. Da der Autoscaler empfindlich auf die Ressourcenauslastung reagiert, skaliert er die Anwendung herunter, wenn er sieht, dass viele Pods einfach untätig sind, und wenn die Nachfrage für diese Pods steigt, skaliert er die Anwendung hoch, indem er neue Pods erstellt und die Last auf jene.

Es kann Ihnen sowohl wertvolle Zeit als auch Rechenressourcen sparen. Sie müssen sich beim Schreiben einer Bereitstellung keine Gedanken darüber machen, wie hoch die Anzahl der Replikate für Ihre Pods sein sollte. Autoscaling würde das für Sie übernehmen.

Ersteinrichtung

Die erste und wichtigste Voraussetzung wäre, dass Sie einen laufenden Kubernetes-Cluster haben. Verwenden Sie Katacoda Playground, das sich perfekt zum Experimentieren und Erlernen von Kubernetes eignet. Als nächstes benötigen Sie einen Metrikserver.

Dieses Add-on für Ihr Kubernetes-System (kube-system-Namespace) erfasst Metriken wie CPU- und Speichernutzung aus zwei verschiedenen Perspektiven:

  1. Von jedem Pod verwendete Ressource
  2. Ressourcenverbrauch an jedem Knoten Resource

Metriken aus beiden Perspektiven sind entscheidend, um Autoscaler bei der Entscheidung zu helfen, was der nächste Schritt sein sollte. Um Ihrem Kubernetes-Cluster einen Metrikserver hinzuzufügen, folgen Sie dieser Anleitung. Jetzt können wir den Horizontal Pod Autoscaler in Aktion sehen.

Verwenden des Autoscalers

Damit der Autoscaler funktioniert, benötigen wir eine Testanwendung. Lassen Sie uns einen einfachen PHP-Apache-Server erstellen und als Dienst bereitstellen.

$ kubectl run php-apache --image=k8s.gcr.io/hpa-beispiel --requests=cpu=200m --expose
--Port=80

Das hier verwendete Bild ist eines der Beispielbilder des Kubernetes-Projekts. Es führt einige CPU-intensive Aufgaben aus und macht den Prozess dadurch deutlicher.

Um diese Bereitstellung automatisch zu skalieren, müssen wir dem Autoscaling die minimale und maximale Anzahl von Pods, die wir zulassen, und den CPU-Prozentsatz, den sie verwenden dürfen, mitteilen. Es gibt noch viele weitere Faktoren, die Sie berücksichtigen können, wie Arbeitsspeicher, Speicher und Netzwerk.

$ kubectl autoscale deploys/php-apache --cpu-percent=50 --min=1 --max=10

Da im aktuellen Zustand niemand diesen Service in Anspruch nimmt, wird er am liebsten beim Mindestwert bleiben. Sie können den Status aller automatisch skalierten Bereitstellungen im Standard-Namespace überprüfen, indem Sie Folgendes ausführen:

$ kubectl hol hpa
NAME         REFERENZ               ZIELE   MINPODS   MAXPODS   REPLIKAS   ALTER
php-apache   Bereitstellung/php-apache   0 %/50 %    1         10        1          2 m

Generieren von Lasten und Testen der Autoscale-Funktion

Sie können sehen, dass die Anzahl der Replikate immer noch nur eins ist und die CPU-Auslastung unbedeutend gering ist. Wir können zusätzliche Last erzeugen und sehen, wie der Autoscaling darauf reagiert. Der Dienst, der unsere PHP-Apache-Pods verfügbar macht, ist nicht der Außenwelt ausgesetzt, daher erstellen wir einen temporären Pod und öffnen eine interaktive Shell-Sitzung in diesem Pod.

Auf diese Weise können wir mit allen im Cluster verfügbaren Diensten kommunizieren, einschließlich des php-apache-Dienstes.

$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
/ #

Sie werden feststellen, dass sich die Eingabeaufforderung ändert und anzeigt, dass wir uns in diesem Container befinden. Versuchen wir nun, unseren Service etwas zu belasten, indem wir wiederholt Anfragen stellen. Lassen Sie uns in der neuen Eingabeaufforderung die folgende while-Schleife ausführen:

/ # while true; do wget -q -O- http://php-apache.Standard.svc.Cluster.lokal; getan

Öffnen Sie ein neues Terminal, da wir diese Schleife noch nicht beenden lassen können. Bei der Überprüfung des Autoscalings sehen Sie die CPU-Auslastung und beim Auflisten der Pods sehen Sie, dass es jetzt mehrere Instanzen des PHP-Apache-Servers gibt,

$ kubectl hol hpa
NAME         REFERENZ               ZIELE    MINPODS   MAXPODS   REPLIKAS   ALTER
php-apache   Bereitstellung/php-apache   121 %/50 %   1         10        4          1h
 
$ kubectl Pods erhalten
NAME                          BEREIT     STATUS    NEUSTARTEN   ALTER
busybox                       1/1       Laufen   0          6m
php-apache-8699449574-7qwxd   1/1       Wird ausgeführt   0          28 s
php-apache-8699449574-c9v54   1/1       Laufen   0          10h
php-apache-8699449574-h9s5f   1/1       Laufen   0          28s
php-apache-8699449574-sg4hz   1/1       Laufen   0          28 s

Beende die while-Schleife und die Anzahl der Pods wird in wenigen Minuten auf eins reduziert.

Fazit

Das ist eine einfache Demonstration von Horizontal Pod Autoscaler. Denken Sie daran, einen funktionierenden Metrik-Server für Ihren Cluster zu haben, und halten Sie beim Erstellen einer Bereitstellung die Anzahl der Replikate auf 1. Den Rest erledigt der horizontale Pod-Autoscaler.

Mittlere Maustaste funktioniert nicht unter Windows 10
Das mittlere Maustaste hilft Ihnen beim Scrollen durch lange Webseiten und Bildschirme mit vielen Daten. Wenn das aufhört, werden Sie am Ende die Tast...
So ändern Sie die linke und rechte Maustaste auf einem Windows 10-PC
Es ist ganz normal, dass alle Computer-Maus-Geräte ergonomisch für Rechtshänder gestaltet sind. Es gibt aber auch Mausgeräte, die speziell für Linkshä...
Emulieren Sie Mausklicks, indem Sie den Mauszeiger mit der klicklosen Maus in Windows 10 bewegen
Die Verwendung einer Maus oder Tastatur in der falschen Haltung bei übermäßiger Nutzung kann zu vielen gesundheitlichen Problemen führen, einschließli...