Skalierungsoptionen für Anwendungen in Azure Kubernetes Service (AKS)
Wenn Sie Anwendungen in Azure Kubernetes Service (AKS) ausführen, müssen Sie vielleicht die Anzahl der Computeressourcen herauf- oder herabsetzen. Wenn Sie die Anzahl der vorhandenen Anwendungsinstanzen ändern, müssen Sie möglicherweise die Anzahl der zugrunde liegenden Kubernetes-Knoten ändern. Vielleicht müssen Sie außerdem eine große Anzahl anderer Anwendungsinstanzen bereitstellen.
In diesem Artikel werden die Kernkonzepte der AKS-Anwendungsskalierung eingeführt, einschließlich der manuellen Skalierung von Pods oder Knoten, der Verwendung der horizontalen automatischen Podskalierung, der automatischen Clusterskalierung und der Integration in Azure Container Instances (ACI).
Manuelles Skalieren von Pods oder Knoten
Sie können Replikate, oder Pods, und Knoten manuell skalieren, um zu testen, wie Ihre Anwendung auf eine Änderung bei den verfügbaren Ressourcen und Zuständen reagiert. Durch manuelles Skalieren von Ressourcen können Sie eine festgelegte Anzahl zu verwendender Ressourcen definieren, wie z. B. die Anzahl der Knoten, um feste Kosten einzuhalten. Zum manuellen Skalieren definieren Sie die Replikat- oder Knotenanzahl. Die Kubernetes-API plant dann das Erstellen weiterer Pods oder Entfernen von Knoten auf Basis dieser Replikat- oder Knotenanzahl.
Beim horizontalen Herunterskalieren von Knoten ruft die Kubernetes-API die relevante Azure-Compute-API auf, die an den von Ihrem Cluster verwendeten Computetyp gebunden ist. Beispielsweise bestimmt für Cluster, die auf VM-Skalierungsgruppen basieren, die API der VM-Skalierungsgruppen, welche Knoten entfernt werden. Weitere Informationen dazu, wie Knoten beim Herunterskalieren für die Entfernung ausgewählt werden, finden Sie in den Häufig gestellten Fragen zu VM-Skalierungsgruppen.
Informationen zu den ersten Schritten mit der manuellen Skalierung von Knoten finden Sie unter Manuelles Skalieren von Knoten in einem AKS-Cluster. Informationen zum manuellen Skalieren der Anzahl von Pods finden Sie unter Kubectl-Skalierungsbefehl.
Horizontale automatische Podskalierung
Kubernetes verwendet die horizontale automatische Podskalierung (HPA) zum Überwachen des Ressourcenbedarfs und automatischen Skalieren der Anzahl der Pods. Standardmäßig prüft die HPA (horizontale automatische Podskalierung) die Metrik-API alle 15 Sekunden auf erforderliche Änderungen der Replikatanzahl, und die Metrik-API ruft die Daten alle 60 Sekunden vom Kubelet ab. Auf diese Weise wird die HPA alle 60 Sekunden aktualisiert. Wenn Änderungen erforderlich sind, wird die Anzahl von Replikaten entsprechend herauf- oder herabgesetzt. HPA funktioniert mit AKS-Clustern, die den Metrikserver für Kubernetes 1.8 und höher bereitgestellt haben.
Wenn Sie die HPA für eine bestimmte Bereitstellung konfigurieren, definieren Sie die minimale und maximale Anzahl an Replikaten, die ausgeführt werden können. Außerdem definieren Sie die Metrik zum Überwachen und als Grundlage aller Skalierungsentscheidungen, wie z.B. zur CPU-Auslastung.
Informationen zu den ersten Schritten mit der horizontalen automatischen Podskalierung in AKS finden Sie unter Automatische Podskalierung in AKS.
Abkühlung der Skalierung von Ereignissen
Da die HPA effektiv alle 60 Sekunden aktualisiert wird, kann es sein, dass frühere Skalierungsereignisse noch nicht erfolgreich abgeschlossen sind, bevor eine weitere Überprüfung durchgeführt wird. Dieses Verhalten kann dazu führen, dass die HPA die Anzahl der Replikate ändert, bevor das vorherige Skalierungsereignis die Anwendungsworkload empfangen und die Ressourcenanforderungen entsprechend anpassen konnte.
Um Raceereignisse zu minimieren, wird ein Verzögerungswert festgelegt. Dieser Wert definiert, wie lange die HPA nach einem Skalierungsereignis warten muss, bevor ein anderes Skalierungsereignis ausgelöst werden kann. Dieses Verhalten ermöglicht, dass die neue Replikatanzahl wirksam werden und die Metriken-API die verteilte Workload widerspiegeln kann. Es gibt keine Verzögerung für Hochskalierungsereignisse ab Kubernetes 1.12, jedoch beträgt die Standardverzögerung bei Herunterskalierungsereignissen 5 Minuten.
Automatische Clusterskalierung
Um auf veränderte Podanforderungen zu reagieren, passt die automatische Kubernetes-Clusterskalierung die Anzahl von Knoten basierend auf den angeforderten Computeressourcen im Knotenpool an. Standardmäßig überprüft die automatische Clusterskalierung den Metrik-API-Server alle 10 Sekunden auf erforderliche Änderungen der Knotenanzahl. Wenn die automatische Clusterskalierung ermittelt, dass eine Änderung erforderlich ist, wird die Anzahl von Knoten im AKS-Cluster entsprechend herauf- oder herabgesetzt. Die automatische Clusterskalierung funktioniert mit Kubernetes RBAC-fähigen AKS-Clustern, die Kubernetes 1.10.x oder höher ausführen.
Die automatische Clusterskalierung wird normalerweise zusammen mit der horizontalen automatischen Podskalierung verwendet. Im kombinierten Einsatz setzt die horizontale Podautoskalierung die Anzahl von Pods je nach Bedarf der Anwendung herauf oder herab, und die Clusterautoskalierung passt die Anzahl von Knoten für die Ausführung weiterer Pods an.
Informationen zu den ersten Schritten mit der automatischen Clusterskalierung in AKS finden Sie unter Automatische Clusterskalierung in AKS.
Aufskalieren von Ereignissen
Wenn ein Knoten nicht über ausreichende Computeressourcen zum Ausführen eines angeforderten Pods verfügt, kann dieser Pod den Planungsprozess nicht erfüllen. Der Pod kann erst gestartet werden, wenn weitere Computeressourcen im Knotenpool verfügbar sind.
Wenn die automatische Clusterskalierung Pods erkennt, die aufgrund von Einschränkungen von Knotenpoolressourcen nicht eingeplant werden können, wird die Anzahl von Knoten innerhalb des Knotenpools heraufgesetzt, um die zusätzlichen Computeressourcen bereitzustellen. Wenn diese Knoten erfolgreich bereitgestellt werden und für die Verwendung innerhalb des Knotenpools verfügbar sind, werden die Pods zur Ausführung darauf eingeplant.
Wenn Ihre Anwendung schnell skalieren muss, bleiben einige Pods möglicherweise in einem Zustand des Wartens darauf, eingeplant zu werden, bis die weiteren, von der automatischen Clusterskalierung bereitgestellten Knoten die eingeplanten Pods annehmen können. Für Anwendungen mit hohen Burstanforderungen können Sie mit virtuellen Knoten und Azure Container Instances skalieren.
Abskalieren von Ereignissen
Die automatische Clusterskalierung überwacht auch den Status der Podplanung für Knoten, die nicht vor kurzem neue Planungsanforderungen empfangen haben. Dieses Szenario zeigt, dass der Knotenpool mehr Computeressourcen als erforderlich besitzt, und dass die Anzahl der Knoten verringert werden kann. Standardmäßig wird ein Knoten, der 10 Minuten lang einen Schwellenwert nicht einhält, demzufolge er nicht mehr benötigt wird, zum Löschen eingeplant. Wenn diese Situation eintritt, werden Pods zur Ausführung auf anderen Knoten innerhalb des Knotenpools eingeplant, und die automatische Clusterskalierung setzt die Anzahl der Knoten herab.
Bei Ihren Anwendungen kann eine Unterbrechung auftreten, da Pods auf anderen Knoten eingeplant werden, wenn die automatische Clusterskalierung die Anzahl der Knoten herabsetzt. Um Unterbrechungen zu minimieren, vermeiden Sie Anwendungen, die eine einzelne Podinstanz verwenden.
Ereignisgesteuerte automatische Kubernetes-Skalierung (KEDA)
Ereignisgesteuerte automatische Kubernetes-Skalierung (Kubernetes Event-Driven Autoscaling, KEDA) ist eine Open Source-Komponente für die ereignisgesteuerte automatische Skalierung von Workloads. Sie skaliert Workloads dynamisch basierend auf der Anzahl der empfangenen Ereignisse. KEDA erweitert Kubernetes um eine als ScaledObject bezeichnete benutzerdefinierte Ressourcendefinition (Custom Resource Definition, CRD), um zu beschreiben, wie Anwendungen als Reaktion auf bestimmten Datenverkehr skaliert werden sollen.
Die KEDA-Skalierung ist in Szenarien hilfreich, in denen Workloads Datenverkehrsbursts empfangen oder hohe Datenmengen verarbeiten. Sie unterscheidet sich von der horizontalen automatischen Podskalierung, da KEDA ereignisgesteuert ist und basierend auf der Anzahl der Ereignisse skaliert wird, während HPA metrikgesteuert ist und auf der Ressourcenauslastung (z. B. CPU und Arbeitsspeicher) basiert.
Erste Schritte mit dem KEDA-Add-On in AKS finden Sie unter Übersicht über KEDA.
Burst zu Azure Container Instances (ACI)
Um Ihren AKS-Cluster schnell zu skalieren, können Sie ihn in Azure Container Instances (ACI) integrieren. Kubernetes verfügt über integrierte Komponenten zum Skalieren der Replikat- und Knotenanzahl. Wenn Ihre Anwendung jedoch schnell skalieren muss, kann die horizontale automatische Podskalierung weitere Pods einplanen, die durch die vorhandenen Computeressourcen im Knotenpool bereitgestellt werden können. Sofern konfiguriert, würde dieses Szenario dann die automatische Clusterskalierung zum Bereitstellen weiterer Knoten im Knotenpool auslösen, aber es kann einige Minuten dauern, bis diese Knoten erfolgreich bereitgestellt sind, sodass der Kubernetes-Planer Pods auf ihnen ausführen kann.
Mit ACI können Sie schnell Containerinstanzen ohne zusätzlichen Infrastrukturaufwand bereitstellen. Beim Herstellen der Verbindung mit AKS wird ACI eine sichere logische Erweiterung Ihres AKS-Clusters. Die virtuelle Knoten-Komponente, die unter Virtual Kubelet zu finden ist, wird in Ihrem AKS-Cluster installiert, der ACI als virtuellen Kubernetes-Knoten darstellt. Kubernetes kann dann Pods einplanen, die als ACI-Instanzen über virtuelle Knoten ausgeführt werden, nicht direkt in Ihrem AKS-Cluster als Pods auf VM-Knoten.
Die Anwendung erfordert keine Änderung, um virtuelle Knoten verwenden zu können. Ihre Bereitstellungen können AKS und ACI übergreifend und ohne Verzögerung skalieren, da die automatische Clusterskalierung neue Knoten im AKS-Cluster bereitstellt.
Virtuelle Knoten werden in einem anderen Subnetz im selben virtuellen Netzwerk wie Ihr AKS-Cluster bereitgestellt. Diese Konfiguration des virtuellen Netzwerks schützt den Datenverkehr zwischen ACI und AKS. Wie ein AKS-Cluster ist eine ACI-Instanz eine sichere, logische Computeressource, die von anderen Benutzern isoliert ist.
Nächste Schritte
Informationen zu den ersten Schritten mit der Skalierung von Anwendungen finden Sie in den folgenden Ressourcen:
- Manuelles Skalieren von Pods oder Knoten
- Verwenden der horizontalen automatischen Podskalierung
- Verwenden der automatischen Clusterskalierung
- Verwenden des [KEDA-Add-Ons (Kubernetes Event-Driven Autoscaling, ereignisgesteuerte automatische Kubernetes-Skalierung)][keda-addon]
Weitere Informationen zu den wesentlichen Konzepten von Kubernetes und AKS finden Sie in den folgenden Artikeln:
Azure Kubernetes Service