Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
Oracle Cloud Infrastructure-Instanzpool basierend auf OCI Load Balancer-HTTP-Anforderungen automatisch skalieren
Einführung
In diesem Tutorial wird gezeigt, wie Sie einen Oracle Cloud Infrastructure-(OCI-)Instanzpool automatisch basierend auf der Anzahl der HTTP-Anforderungen skalieren, die vom OCI Load Balancer empfangen werden. Wir werden drei Hauptthemen behandeln.
- OCI-Überwachungsalarmmetriken: Überwachen Sie den Load Balancer, und richten Sie Alarme basierend auf HTTP-Anforderungsmetriken ein.
- OCI-Benachrichtigungsservice: Senden Sie Benachrichtigungen, wenn ein Alarm ausgelöst wird.
- OCI-Funktionen: Erstellen und verwenden Sie Funktionen, um die Größe Ihres Instanzpools basierend auf den empfangenen Benachrichtigungen anzupassen.
OCI Monitoring: Mit dem OCI Monitoring-Service können Sie Cloud-Ressourcen aktiv und passiv mit den Features für Metriken und Alarme überwachen. Der OCI Monitoring-Service verwendet Metriken, um Ressourcen und Alarme zu überwachen und Sie zu benachrichtigen, wenn diese Metriken alarmspezifische Trigger erreichen.
OCI-Benachrichtigungen: Wenn etwas mit Ihren Ressourcen in OCI geschieht, können Sie menschenlesbare Nachrichten über unterstützte Endpunkte abrufen, einschließlich E-Mail- und Textnachrichten (SMS) mit Alarmen, Ereignisregeln und Connectors. Sie können auch Aufgaben über benutzerdefinierte HTTPS-Endpunkte und OCI Functions automatisieren.
OCI-Funktionen: OCI Functions ist eine vollständig verwaltete, mehrmandantenfähige, hochskalierbare und bedarfsgesteuerte Funktionen-as-a-Service-Plattform. Sie basiert auf OCI für Unternehmen und wird von der Fn-Projekt-Open-Source-Engine unterstützt. Verwenden Sie OCI-Funktionen (zuweilen als Funktionen und früher als Oracle Functions bezeichnet), wenn Sie sich auf das Schreiben von Code konzentrieren möchten, um die Geschäftsanforderungen zu erfüllen.
Allgemeine Architektur
Hinweis:
Dieses Tutorial ist ausschließlich für Bildungs- und Studienzwecke konzipiert. Es bietet eine Umgebung, in der Lernende experimentieren und praktische Erfahrungen in einem kontrollierten Umfeld sammeln können. Es ist wichtig zu beachten, dass die in diesem Tutorial verwendeten Sicherheitskonfigurationen und -praktiken möglicherweise nicht für reale Szenarien geeignet sind.
Sicherheitsaspekte für reale Anwendungen sind oft viel komplexer und dynamischer. Daher ist es vor der Implementierung einer der hier in einer Produktionsumgebung demonstrierten Techniken oder Konfigurationen unerlässlich, eine umfassende Sicherheitsbewertung und -prüfung durchzuführen. Diese Überprüfung sollte alle Aspekte der Sicherheit umfassen, einschließlich Zugriffskontrolle, Verschlüsselung, Überwachung und Compliance, um sicherzustellen, dass das System den Sicherheitsrichtlinien und -standards der Organisation entspricht.
Sicherheit sollte beim Übergang von einer Übungsumgebung zu einer realen Bereitstellung immer oberste Priorität haben.
Ziele
-
Richten Sie einen Mechanismus zur automatischen Skalierung für einen OCI-Instanzpool ein. Dieser Autoscaling-Mechanismus basiert auf der Anzahl der HTTP-Anforderungen, die vom OCI Load Balancer empfangen werden. Folgende Themen werden behandelt:
-
HTTP-Anforderungsmetriken überwachen: Richten Sie OCI Monitoring ein, um HTTP-Anforderungsmetriken von Ihrem Load Balancer zu verfolgen.
-
Alarme erstellen und konfigurieren: Definieren und konfigurieren Sie Alarme, die basierend auf bestimmten HTTP-Anforderungsschwellenwerten ausgelöst werden.
-
Ereignisbenachrichtigungen einrichten: Richten Sie Ereignisbenachrichtigungen ein, um Sie zu benachrichtigen, wenn ein Alarm ausgelöst wird.
-
OCI Functions implementieren: Funktionen erstellen und bereitstellen, um die Größe Ihres Instanzpools als Reaktion auf die ausgelösten Alarme automatisch anzupassen.
-
Voraussetzungen
-
OCI-Umgebung
-
Oracle-Account mit Admin-Berechtigungen.
-
Ein Compartment zum Erstellen Ihrer Ressourcen.
Hinweis: Notieren Sie sich den Compartment-Namen und die Compartment-ID.
-
VCN mit einem privaten Subnetz. Weitere Informationen finden Sie unter VM-Netzwerk erstellen.
-
OCI Load Balancer ist an den Instanzpool angehängt, wobei eine backendSet auf die Instanzen im Pool verweist. Weitere Informationen finden Sie unter Load Balancer erstellen.
-
Instanzpool mit mindestens 1 Instanz mit einer einfachen HTTP-Anwendung, die auf Port
80
ausgeführt wird. Weitere Informationen finden Sie unter Instanzkonfigurationen und Instanzpools verwenden.
-
-
Umgebung des lokalen Rechners
-
Eine Oracle Linux-Compute-Instanz im privaten Subnetz. Dies ist wichtig für den Zugriff auf Ressourcen im privaten Subnetz, wie OCI Streaming und OCI Functions, die in diesem Tutorial bereitgestellt werden.
-
Ein OCI Bastion-Host, um eine Verbindung zur Oracle Linux-Compute-Instanz herzustellen und Aufgaben für das Tutorial auszuführen. Weitere Informationen finden Sie unter Bastion - Überblick.
-
Richten Sie die lokale Oracle Cloud Infrastructure-Befehlszeilenschnittstelle (OCI-CLI) ein. Weitere Informationen finden Sie unter CLI installieren.
-
Lokaler Docker zum Erstellen von Images, wenn Sie Oracle Linux verwenden, finden Sie unter Docker: Docker auf Oracle Linux 8 installieren (OL8).
-
Lokale FN-CLI, um Ihre Funktion in OCI bereitstellen zu können. Weitere Informationen finden Sie unter Fn-Projekt-CLI installieren.
-
Aufgabe 1: Dynamische Gruppen einrichten
Gehen Sie zu Ihrer Domain, klicken Sie auf Dynamische Gruppen, und erstellen Sie die folgenden Gruppen.
Dynamischer Gruppenname: MyFunctions
.
ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
Aufgabe 2: Policys erstellen
Gehen Sie zu Policys, und erstellen Sie die folgenden Policys.
Policy-Name: FunctionsPolicies
.
Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME
Aufgabe 3: OCI Container Registry erstellen
-
Gehen Sie zu Entwicklerservices, klicken Sie auf Containerregistrierung, und erstellen Sie ein privates Repository für das Fn-Image.
Repository-Name:
lab/fn-autoscale-instance-pool
. -
Prüfen Sie die Repositorys, und notieren Sie sich den Namespace.
-
Öffnen Sie die Terminal-Shell, in der OCI-CLI und Docker installiert sind, und fahren Sie mit der Anmeldung in der Registry fort. Prüfen Sie die richtige URL für Ihre Region. In diesem Tutorial verwenden wir die Region Brazil East (Sao Paulo), in der die Registry-URL
gru.ocir.io
lautet.docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
Aufgabe 4: Python-OCI-Funktionen zur automatischen Skalierung des Instanzpools erstellen
Hinweis: Stellen Sie sicher, dass Sie Ihr privates Subnetz und dasselbe Subnetz Ihres Streampools ausgewählt haben.
-
Gehen Sie zur OCI-Konsole, und klicken Sie auf Entwicklerservices. Klicken Sie unter Funktionen auf Anwendungen und Anwendung erstellen.
-
Erstellen Sie einige Konfigurationen, um die Skalierungsgrößen einzurichten.
Hinweis: Mit diesen Konfigurationsvariablen werden die Werte bestimmt, mit denen die Funktion den Instanzpool vertikal oder horizontal skalieren kann.
Secret-Name Datum INSTANCE_POOL_TARGET_SIZE Wert für neue Instanzpoolgröße festlegen INSTANCE_POOL_DESIRED_SIZE Reguläre Größe des Instanzpools festlegen Für dieses Tutorial verwenden wir einen Instanzpool mit 1 Instanz und horizontal auf
2
. -
Gehen Sie zur Terminalshell, in der Docker, OCI-CLI und Fn-Projekt-CLI installiert sind, und führen Sie die folgenden Befehle aus, um die Funktion zu initialisieren.
Hinweis: Wenn Sie die Aufgaben ausgeführt haben, wurde Ihr Docker-Anmeldebefehl bereits ausgeführt. Wenn nicht, fahren Sie mit der Docker-Anmeldung in Aufgabe 3.3 fort.
mkdir lab cd lab fn create context oci-cloud --provider oracle fn use context oci-cloud fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab fn init --runtime python fn-autoscale-instance-pool cd fn-autoscale-instance-pool ls -lrt
Hinweis: In diesem Tutorial wird die Region Brazil East(Sao Paulo) verwendet. Wenn Sie eine andere Region verwenden, müssen Sie die Speicherorte
api-url
undregistry
ändern.Der Befehl
init
erstellt eine Hello World-Funktion auffunc.py
. Dieser Code wird überschrieben. -
Rufen Sie den Beispielcode der Python-Funktion von hier ab: func.py, und überschreiben Sie die lokale
func.py
, die während des Befehlsinit
der Funktion erstellt wurde.# Copy the function code from this lab and save it on /tmp/func.py in your shell machine ls -lrt /tmp/func.py # Overwrite the func.py with tha lab's code cp /tmp/func.py func.py # Add the OCI package on the requirements.txt file, this will be needed to work with OCI. echo -e "\noci" >> requirements.txt # Check if requirements.txt has two lines cat requirements.txt
-
Erstellen Sie den neuen Code, und stellen Sie die Funktion bereit.
ls -lrt fn deploy --app MyApp
Aufgabe 5: OCI-Benachrichtigungen erstellen
-
Gehen Sie zur OCI-Konsole, und klicken Sie auf Entwicklerservices. Wählen Sie unter Anwendungsintegration die Option Benachrichtigungen aus, und klicken Sie auf Thema erstellen.
Name:
AutoScaleTopic
. -
Klicken Sie auf Abonnements, um ein neues Abonnement zu erstellen und die in Aufgabe 4 erstellte Funktion auszuwählen.
Aufgabe 6: Alarmdefinition für horizontale Skalierung erstellen (Instanzpoolgröße an Zielwert anpassen)
-
Gehen Sie zur OCI-Konsole, und klicken Sie auf Observability and Management. Wählen Sie unter Monitoring die Option Alarmdefinitionen aus, und klicken Sie auf Alarm erstellen.
Hinweis: Die Schwellenwerte, das Intervall für diesen Alarm, sind für das Tutorial definiert. Je nach Anwendung können Sie sie an Ihre eigenen Anforderungen anpassen.
Alarmname:
instance_pool_scale_OUT
. -
Geben Sie die folgenden Informationen ein, um den Alarm zu definieren.
-
Geben Sie im Abschnitt Metrikbeschreibung die folgenden Informationen ein.
- Metrik-Namespace:
oci_lbaas
. - Kennzahlenname:
HttpRequests
. - Intervall:
1 minute
. - Statistik:
Max
.
- Metrik-Namespace:
-
Geben Sie im Abschnitt Metrikdimensionen die folgenden Informationen ein.
-
Erste Metrikdimension:
- Dimensionsname:
resourceID
. - Dimensionswert: Wählen Sie die Load-Balancer-OCID aus.
- Dimensionsname:
-
Zweite Metrikdimension:
- Dimensionsname:
backendSetName
. - Dimensionswert: Wählen Sie Ihren backendSet-Namen aus.
- Dimensionsname:
-
-
Geben Sie im Abschnitt Triggerregel 1 die folgenden Informationen ein.
- Operator:
greater than
. - Wert:
30
. - Alarmtext: Die Anzahl der Verbindungen ist höher als erwartet. Starten Sie den Skalierungsprozess.
- Operator:
-
-
Geben Sie die folgenden Informationen ein, um die Alarmbenachrichtigungen zu definieren.
-
Geben Sie im Abschnitt Ziel die folgenden Informationen ein.
- Zielservice: Wählen Sie Benachrichtigungen aus.
- Compartment: Wählen Sie Ihr Compartment aus.
- Thema: Wählen Sie Ihr Thema aus.
-
Wählen Sie im Abschnitt Nachrichtenformat die Option Pretty JSON-Nachrichten senden (Raw-Text mit Zeilenumbrüchen) aus, und wählen Sie zu Testzwecken Benachrichtigung wiederholen? mit 1 Minute Benachrichtigungshäufigkeit aus.
-
-
Klicken Sie auf Erweiterte Optionen, und fügen Sie ein neues Tag hinzu.
Hinweis: Dies ist ein obligatorisches Tagging, um den Typ der vertikalen oder horizontalen Skalierung zu definieren.
Tag-Namespace: Wählen Sie Kein Wert (Freiformtag anwenden) aus.
Tagschlüssel:autoscaling_type
. Wert:out
.
Aufgabe 7: Alarmdefinition für Scale-in erstellen (Instanzpoolgröße wieder auf die gewünschte Größe anpassen)
-
Gehen Sie zur OCI-Konsole, und klicken Sie auf Observability and Management. Wählen Sie unter Monitoring die Option Alarmdefinitionen aus, und klicken Sie auf Alarm erstellen.
Hinweis: Die Schwellenwerte, das Intervall für diesen Alarm, sind für das Tutorial definiert. Je nach Anwendung können Sie sie an Ihre eigenen Anforderungen anpassen.
Alarmname:
instance_pool_scale_IN
. -
Geben Sie die folgenden Informationen ein, um den Alarm zu definieren.
-
Geben Sie im Abschnitt Metrikbeschreibung die folgenden Informationen ein.
- Metrik-Namespace:
oci_lbaas
. - Kennzahlenname:
HttpRequests
. - Intervall:
1 minute
. - Statistik:
Max
.
- Metrik-Namespace:
-
Geben Sie im Abschnitt Metrikdimensionen die folgenden Informationen ein.
-
Erste Metrikdimension:
- Dimensionsname:
resourceID
. - Dimensionswert: Wählen Sie die Load-Balancer-OCID aus.
- Dimensionsname:
-
Zweite Metrikdimension:
- Dimensionsname:
backendSetName
. - Dimensionswert: Wählen Sie Ihren backendSet-Namen aus.
- Dimensionsname:
-
-
Geben Sie im Abschnitt Triggerregel 1 die folgenden Informationen ein.
- Operator:
less than
. - Wert:
30
. - Alarmtext: Die Anzahl der Verbindungen wird wieder auf den zulässigen Wert zurückgesetzt und Scale-in aufgerufen, um die Anzahl der Instanzen wieder auf den gewünschten Wert zu reduzieren.
- Operator:
-
-
Geben Sie die folgenden Informationen ein, um die Alarmbenachrichtigungen zu definieren.
-
Geben Sie im Abschnitt Ziel die folgenden Informationen ein.
- Zielservice: Wählen Sie Benachrichtigungen aus.
- Compartment: Wählen Sie Ihr Compartment aus.
- Thema: Wählen Sie Ihr Thema aus.
-
Wählen Sie im Abschnitt Nachrichtenformat die Option Pretty JSON-Nachrichten senden (Raw-Text mit Zeilenumbrüchen) aus.
-
-
Klicken Sie auf Erweiterte Optionen, und fügen Sie ein neues Tag hinzu.
Hinweis: Dies ist ein obligatorisches Tagging, um den Typ der vertikalen oder horizontalen Skalierung zu definieren.
Tag-Namespace: Wählen Sie Kein Wert (Freiformtag anwenden) aus.
Tagschlüssel:autoscaling_type
. Wert:in
.
Aufgabe 8: Laden erstellen und Alarmfunktion prüfen
-
Rufen Sie die IP LoadBalancer ab, und führen Sie mehrere Aufrufe an die Anwendung auf Port
80
aus. Öffnen Sie die Shellkonsole, und führen Sie den folgenden Code aus, um den Load Balancer aufzurufen.i=1 while true do echo "Request $i" curl http://your-ip-here ((i++)) echo "" # Prints a newline for better readability between requests done
Ausgabe der einfachen Anwendungslast.
Hinweis: Dieser einfache HTTP-Apache-Webserver demonstriert das Szenario.
-
Prüfen Sie die tatsächliche Größe und den Status des Instanzpools. Für dieses Tutorial ist ein Instanzpool mit der Größe
1
vorhanden. -
Öffnen Sie die Alarmdefinition, um die Metriken anzuzeigen und zu prüfen, ob der Alarm ausgelöst wird.
-
Nach einigen Minuten wird je nach Metrikintervall die Scale-out-Funktion ausgelöst.
Öffnen Sie die Instanzpools, und prüfen Sie, ob der Status Skalierung und die Anzahl der Zielinstanzen
2
lautet.Nach dem Skalierungsprozess wird die Instanzpoolgröße
2
angezeigt. -
Stoppen Sie das Shellskript, und warten Sie, bis der Alarm beim Scale-out-Übergang wieder auf OK gesetzt ist. Beobachten Sie dann den Alarm beim Scale-in. Warten Sie einige Minuten, bis beide Alarme aktualisiert sind, und beobachten Sie, wann der Alarm für das Einschieben ausgelöst wird.
Jetzt befindet sich der Scale-in-Alarm im Feuerzustand.
Beachten Sie, dass HttpRequests auf eine Zahl unter dem Schwellenwert von
30
gefallen ist.Das Scale-in des Instanzpools wurde gestartet.
Beachten Sie, dass die Instanzpoolgröße wieder den gewünschten Wert von
1
aufweist.
Verwandte Links
Danksagungen
- Autor - Joao Tarla (Oracle LAD A-Team Solution Engineer)
Weitere Lernressourcen
Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Autoscale an Oracle Cloud Infrastructure Instance Pool based on OCI Load Balancer HTTP Requests
F99754-01
May 2024