Direkt zum Inhalt

So skalieren Sie Ihre Private Cloud-Infrastruktur: Strategien für den Umgang mit Wachstum

So skalieren Sie Ihre Private Cloud-Infrastruktur: Strategien für den Umgang mit Wachstum

Zwischen der Übergabe Ihres Codes an die Quellcodeverwaltung und seiner Bereitstellung in Ihrer Cloud-Umgebung passiert viel. Selbst wenn Sie mit einer einfachen Anwendung beginnen, kann der Aufbau einer Infrastrukturarchitektur ohne Berücksichtigung zukünftiger Skalierbarkeit zu allen möglichen Problemen führen, wenn die Anwendung zu wachsen beginnt.

Nach der Bereitstellung Ihrer Mendix Wenn Sie eine Anwendung auf Kubernetes übertragen, kann sich der empfangene Datenverkehr auf unvorhersehbare Weise ändern. Wie sorgen Sie dafür, dass Ihre App jederzeit reaktionsfähig bleibt?

Hier kommt die Skalierung ins Spiel. Sie möchten, dass Ihr Cluster die Last problemlos bewältigt, egal ob es sich um eine Verkehrsspitze oder nur um normale Nutzung handelt. Mendix für Private Cloud erleichtert dies, indem die Anzahl der Pods dynamisch an die Nachfrage angepasst wird. In unserem Connected-Angebot können Sie dies manuell über das Entwicklerportal tun oder indem Sie Horizontal Pod Autoscaler direkt im Kubernetes-Cluster aktivieren. Ziemlich cool, oder?

In diesem Blog erfahren Sie, wie Sie Autoscaling für ein Mendix Anwendung basierend auf einer anwendungsspezifischen benutzerdefinierten Metrik. Wir werden eine Kombination aus Horizontal Pod Autoscaler und Cluster Autoscaler verwenden. Aber warten Sie, es gibt noch mehr? Ja, ein schönes Grafana-Dashboard maßgeschneidert für Mendix für die Private Cloud, um alles in Echtzeit zu visualisieren!

Autoscaling in Kubernetes – was beinhaltet das?

Schauen wir uns zunächst die Verwendung des Begriffs „Autoscaling“ in Kubernetes genauer an. In Kubernetes werden mehrere Dinge als „Autoscaling“ bezeichnet, darunter:

Mendix denn Private Cloud unterstützt alle oben genannten Optionen, sie zielen jedoch alle auf sehr unterschiedliche Anwendungsfälle ab und verwenden unterschiedliche Konzepte und Mechanismen.

Lassen Sie uns Strategien für eine effektive Skalierung erkunden.

Eine Skalierungsstrategie

Wie erhalten Sie eine optimale Anzahl von Replikaten für eine bestimmte Nachfrage? Wäre es nicht großartig, einen numerischen Indikator für die Nachfrage zu haben, die Ihre App derzeit erfährt?

Für die Skalierung eignet sich als Metrik eine Messung, welche die aktuelle Auslastung der App darstellt.
Einige Beispiele für geeignete Skalierungsmetriken sind:

  • Die Anzahl der von jeder Replik pro Sekunde empfangenen Anfragen.
  • Die CPU- und/oder Speichernutzung der App-Prozesse.

(HINWEIS: Da die Mendix Die Runtime basiert auf Java, das Speicher vorab zuweist und ihn normalerweise nie freigibt. Speicherbasierte Metriken sollten nicht für die automatische Skalierung verwendet werden.)

Der Schlüssel liegt hier darin, einen optimalen Metrikwert zu finden (nennen wir ihn den Zielwert), bei der die Anwendung weder über- noch unterausgelastet ist. Leider ist das leichter gesagt als getan, da sich jede Anwendung anders verhält.

Wenn Sie beispielsweise eine maximale CPU-Auslastung von 80 % angeben, fügt der HPA-Controller einen Pod hinzu, sobald die durchschnittliche Auslastung aller Pods innerhalb dieses Replikatsatzes 80 % oder mehr erreicht. Ein wichtiger Faktor hierbei ist, ob Sie richtig konfiguriert die Ressourcenanforderungen und -grenzen für den Pod. Unsere Skalierungsstrategie sollte dann folgendermaßen aussehen:

  • Wenn der beobachtete Wert unter dem Zielwert liegt (d. h. die App ist nicht ausgelastet), sollte die Replikatanzahl verringert werden, damit jedes Replikat eine höhere Auslastung erhält. Dadurch steigt der Metrikwert und nähert sich dem Zielwert.
  • Wenn der beobachtete Wert über dem Zielwert liegt (d. h. die App überlastet ist), sollte die Anzahl der Replikate erhöht werden, sodass jedes Replikat einen kleineren Anteil der Gesamtlast erhält, wodurch der Metrikwert sinkt und sich dem Zielwert annähert.

Grundlagen zu Ressourcenanforderungen und -limits

Mit Kubernetes können Sie angeben, wie viel CPU/RAM ein einzelner Pod benötigt und wie Sie die Nutzung dieser Ressourcen für einen bestimmten Pod einschränken. In Mendix für Private Cloud, dies ist einfach konfiguriert über unsere Entwicklerportal oder für Kunden, die unser Standalone-Angebot nutzen, durch Bearbeiten der MendixCR Objekt.

Grundlagen zu Ressourcenanforderungen und -limits
Mendix für Private Cloud – Ressourcenanforderung und -limits bearbeiten

Speichereinheiten

  • Speichereinheiten werden normalerweise in Bytes dargestellt, der Einfachheit halber ermöglicht Kubernetes jedoch die Verwendung besser menschenlesbarer Formate wie Megabyte (MB) oder Gigabyte (GB).
  • Zur Darstellung von Speichereinheiten können Sie die folgenden Suffixe verwenden:
    • „Mi“ für Mebibyte (2^20 Byte)
    • „Gi“ für Gibibyte (2^30 Byte)
    • „M“ für Megabyte
    • „G“ für Gigabyte

CPU-Einheiten

  • CPU-Einheiten in Kubernetes werden in „Millicores“ gemessen, was Bruchteile eines CPU-Kerns sind.
  • 1 CPU-Kern entspricht 1000 Millicores.
  • Sie können CPU-Anfragen und -Grenzwerte mit dem Suffix „m“ angeben, um Millicores anzuzeigen.

Beispiele

  • 100 m stehen für 100 Millicores, also 0.1 eines CPU-Kerns.
  • 500 m stehen für 500 Millicores, also 0.5 eines CPU-Kerns.

Eine CPU ist eine absolute Einheit, d. h. eine CPU ist immer gleich, egal wie viele Kerne ein Knoten hat.

Unsere Mendix Die Anwendungsbereitstellung wird mit den folgenden kleinen Vorlagenwerten konfiguriert:

  • CPU-Anforderung von 100 m
  • Speicheranforderung von 512Mi

Kubernetes-Rechenressourcen

Simulieren der automatischen Skalierung

Mit diesem Beitrag möchten wir Folgendes erreichen:

  • Simulieren Sie das Wachstum des Datenverkehrs eines Mendix Anwendung, die in einem Kubernetes-Cluster gehostet wird.
  • Konfigurieren Sie Horizontal Pod Autoscaler zur Skalierung der Anzahl Mendix Anwendungsreplikate in einem Live Mendix Kubernetes-Umgebung läuft in Mendix für den Private Cloud Connected-Modus.
  • Konfigurieren Sie Cluster Autoscaler, um die Anzahl der Clusterknoten zu skalieren und die neuen Replikate des Mendix Anwendung.

In dieser Beispielumgebung hoste ich meine Mendix Cluster in Azure AKS. Befolgen Sie für andere unterstützte Mx4PC-Clustertypen die von Ihrem Anbieter empfohlene Vorgehensweise zum Konfigurieren der CA-Funktion.

Ausführliche Informationen zur Bereitstellung eines Mendix Anwendung können Sie sich diesen Leitfaden ansehen: https://docs.mendix.com/developerportal/deploy

Bevor wir beginnen, sollten Sie einige Voraussetzungen noch einmal durchgehen. Haben Sie:

Horizontal Pod Autoscaler konfigurieren

Lassen Sie uns HPA aktivieren und die Metrik auf den Schwellenwert für die CPU-Auslastung von 80 % festlegen:

# kubectl -n mendix-app autoscale mendixapp blogapp1-master --cpu-percent=80 --min=1 --max=3
horizontalpodautoscaler.autoscaling/blogapp1 autoscaled

Konfigurieren von Cluster Autoscaler (CA)

Sie können CA aktivieren von der Kommandozeile oder Azure-Portal. Für dieses Beispiel werde ich die maximale Knotenanzahl auf 3 setzen:

Skalieren des Knotenpools

Verkehr generieren!

Im folgenden Video können Sie oben links sehen, dass ich Verkehr direkt in die Mendix Anwendung, indem 1000 gleichzeitige Verbindungen für zwei Minuten gesendet werden. Ich benutze dieses Tool in einer temporären Kapsel, aber es gibt viele andere, die das Gleiche können!

Horizontale Pod Autoscaler-Ansicht vom Kubernetes-Cluster

Sehen wir uns an, wie dieselbe Sequenz in unserem Grafana-Dashboard aussieht:

Horizontale Pod Autoscaler-Ansicht vom Grafana Dashboard

Sobald wir 1000 gleichzeitige Anfragen an die Mendix Bei der Anwendung beachten wir Folgendes:

  1. CPU-Auslastung für die blogapp1-master Die Anwendung reicht von 8 m bis über 100 m (Bildschirm oben rechts).
  2. Der Horizontaler Pod-Autoscaler beginnt mit der Skalierung der Pods.
  3. Es werden zwei weitere Pods erstellt.
  4. Einer der Pods steht jetzt aus und kann nicht bereitgestellt werden. In keinem der vorhandenen Knoten ist genügend Speicherplatz vorhanden, um einen weiteren Pod zuzuweisen.
  5. Nach ein paar Minuten ist die Cluster-Autoscaler löst einen Trigger aus und erstellt einen neuen Knoten im Cluster (Bildschirm rechts unten)
  6. Der Zu überprüfen Pod ist jetzt bereitgestellt.

Untersuchen der Vorlaufzeit für die automatische Skalierung

Lassen Sie uns zum Abschluss verstehen, wie alles zusammenhängt:

  1. Reaktionszeit des horizontalen Pod-Autoscalers.
  2. Reaktionszeit des Cluster-Autoscalers.
  3. Bereitstellungszeit des Knotens.
    • Dann gibt es noch die Bereitstellungszeit des Knotens, die hauptsächlich vom Cloud-Anbieter abhängt.
    • Es ist ziemlich normal, dass eine neue Computerressource innerhalb von 3 bis 5 Minuten bereitgestellt wird.
  4. Mendix Pod-Erstellungszeit.
    • Beginnen Sie Mendix Die Laufzeit sollte normalerweise nicht länger als 30 Sekunden betragen.
Vorlaufzeit
Automatische Skalierung der Vorlaufzeit

Im schlimmsten Fall könnte die Gesamtverzögerung bis zu 7 Minuten betragen. Nicht schlecht, oder? Allerdings können Sie einen plötzlichen Verkehrsanstieg 7 Minuten lang bewältigen, bevor Sie weitere Pods bekommen?

Gibt es Möglichkeiten, die automatische Skalierung anzupassen, um die Skalierungszeit um Minuten zu verkürzen?

Versuchen Sie, einige dieser Standardwerte anzupassen:

  • Die Standardaktualisierungszeit für HPA wird gesteuert durch horizontal-pod-autoscaler-sync-periode (Standard: 15 Sekunden).
  • Das Intervall für das Scraping von Metriken im Metrics Server, das gesteuert wird durch Metrik-Auflösungsflagge (Standard: 60 Sekunden).
  • Die Reaktionszeit des Cluster-Autoscalers auf nicht zugewiesene Pods, die gesteuert wird durch Scan-Intervall-Flag (Standard: 10 Sekunden).

Schlussworte

Die Skalierung und Bewältigung des Wachstums in Kubernetes-Clustern mag zunächst wie eine gewaltige Aufgabe erscheinen, aber mit den richtigen Strategien und der Nutzung der Funktionen von Mendix für Private Cloud sind Sie für diese spannende Reise bestens gerüstet. Der Schlüssel liegt darin, den Sweet Spot zwischen dem Hinzufügen weiterer Knoten und der Optimierung der vorhandenen Knoten zu finden.

Ein letzter Ratschlag:  Mendix Apps sind im Vergleich zu App-Containern tendenziell relativ datenbankintensiv. Achten Sie daher darauf, auch Ihre Datenbank (automatisch) zu skalieren.

Viel Spaß beim Skalieren!

Wählen Sie Ihre Sprache