Über den Azure Kubernetes Service, kurz AKS, haben wir in diesem Workshop bereits eine Anwendung per Container Cluster bereitgestellt. Die Skalierung von Kubernetes-Clustern im Allgemeinen und AKS-Clustern im Speziellen schauen wir uns in diesem Teil an.
Knoten und Pods in einem Container Cluster lassen sich mit dem Azure Kubernetes Service recht einfach per Hand skalieren.
(Bild: Drilling / Microsoft)
Der Knoten-Pool ist bereit, unsere Anwendung besteht derzeit aus zwei Pods für Frontend und Backend.
(Bild: Drilling / Microsoft)
Beginnen wir analog zum zweiten Teil dieser Serie erneut damit, dass wir uns zwecks Kontrolle der Konnektivität der seinerzeit erstellten AKS-Cluster die Anzahl und Verteilung der Knoten-Pools und Knoten im Cluster anzeigen lassen. Hierzu setzen wir das kubectl-Kommando „get nodes“ ab:
kubectl get nodes
Nun ermitteln wir mit dem Kommando …
kubectl get pods
…, aus wie vielen Pods unsere Anwendung besteht sowie die IDs der jeweiligen Pods nebst jeweiligem Pod-Status.
Unser Deployment besteht aus einem Frontend und einem Backend.
(Bild: Drilling / Microsoft)
Ferner könnten wir jederzeit den Status unseres Deployments ermitteln, dies gelingt mit dem Kommando:
kubectl get deployment
Nun wollen wir uns mit den Skalierungsoptionen in AKS befassen und exemplarisch einige Arten der manuellen Skalierung ausprobieren. Dazu sollten wir aber noch etwas Hintergrundwissen anhäufen.
Skalierung in Kubernetes und AKS
Da Anwendungen über die Kapazität eines einzelnen Pods hinauswachsen können, verfügt Kubernetes über eine automatische Cluster-Skalierung. Diese basiert auf dem Hinzufügen von Compute-Ressourcen.
Standardmäßig prüft die automatische Cluster-Skalierung den Metrik-API-Server alle zehn Sekunden auf eine potenziell erforderliche Anpassung der Anzahl von Knoten. Sollte eine Skalierung erforderlich sein, wird die Anzahl der Knoten im AKS-Cluster automatisch herauf- oder herabgesetzt. Darüber hinaus gibt es in Kubernetes einen horizontalen Pod-Autoscaler (HPA), der auf Basis von Metriken skaliert und mit dem Cluster-Autoscaler Hand in Hand arbeitet.
Kubernetes nutzt die horizontale automatische Podskalierung zum Überwachen des Ressourcenbedarfs und zum automatischen Skalieren der Anzahl der Replikate. Standardmäßig überprüft die horizontale automatische Podskalierung die Metriken-API alle 30 Sekunden auf erforderliche Änderungen der Replikat-Anzahl.
Die Skalierungsoptionen in AKS.
(Bild: Microsoft)
Allgemein erhöht oder reduziert die horizontale automatische Pod-Skalierung die Anzahl von Pods nach Bedarf der Anwendung. Die automatische Cluster-Skalierung wiederum ändert die Anzahl der Knoten, um den Kapazitätsbedarf für zusätzliche Pods zu decken. Ändert sich also die Anzahl der benötigten Anwendungsinstanzen, muss die Anzahl der zugrunde liegenden Kubernetes-Knoten möglicherweise ebenfalls geändert werden.
AKS-Admins können aber die Anzahl der Replikate (Pods) und Knoten auch jederzeit manuell skalieren, um zu testen, wie die Anwendung auf eine Änderung in verfügbaren Ressourcen und Status reagiert. Beim manuellen Skalieren kann man jederzeit eine feste Anzahl der zu verwendenden Ressourcen wie z. B. die Anzahl der Knoten definieren und somit erzwingen. Für das manuelle Skalieren definiert man die Replika- und/oder Knotenanzahl.
Die Kubernetes-API plant dann das Erstellen zusätzlicher Pods oder Entfernen von Knoten auf Basis dieser Replikat- oder Knotenanzahl. Konkret ruft beim horizontalen Skalieren von Knoten die Kubernetes-API die relevante Azure-Compute-API auf, die an den vom Cluster verwendeten Compute-Typ gebunden ist. So könnte der AKS-Cluster beispielsweise auf VM Scale Sets basieren, welche die Logik für die Auswahl der zu entfernenden Knoten durch die „VM Scale Sets“-API ermittelt.
Abkühlung der Skalierung von Ereignissen
Da die horizontale automatische Pod-Skalierung die Metriken-API alle 30 Sekunden überprüft, werden Skalierungsereignisse möglicherweise nicht erfolgreich abgeschlossen, bevor eine andere Überprüfung erfolgt. Somit könnte die horizontale automatische Pod-Skalierung die Anzahl der Replikate ändern, bevor ein vorangegangenes Skalierungsereignis eine Ressourcenanforderung empfangen und entsprechend anpassen konnte.
Um solche Ereignisse zu minimieren, kann der Admin einen Verzögerungswert festlegen. Dieser Wert definiert, wie lange die horizontale automatische Pod-Skalierung nach einem Skalierungsereignis warten muss, bevor ein anderes Skalierungsereignis ausgelöst werden kann. Dieses Verhalten ermöglicht es, dass die neue Replikat-Anzahl wirksam wird und die Metriken-API die verteilte Workload widerspiegeln kann.
Das manuelle Skalieren von Pods.
(Bild: Drilling / Microsoft)
Schauen wir uns nun das manuelle Skalieren mit kubectl an. Wir erhöhen zunächst die Anzahl der Repliken auf 2. Dazu benötigen wir den oben ermittelten Namen des Deployments:
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
kubectl get pods
Das manuelle Skalieren von Knoten.
(Bild: Drilling / Microsoft)
Nun wollen wir die Anzahl der Knoten im Cluster erhöhen. Hierzu verwenden wir allerdings die AKS-Kommando-Ebene in Form des Befehls „az aks scale“.
az aks scale --resource-group <Name Ressource-Group> --name <Cluster Name> --node-count 2
Das Ergebnis prüfen wir wieder mit dem get-Befehl:
kubectl get nodes
Ein weiteres Mal erhöhen wir die Anzahl der Replikate im Pod-Autoscaler.
(Bild: Drilling / Microsoft)
Schließlich erhöhen wir noch einmal die Anzahl der Replikate auf 5 und prüfen das Ergebnis.