Hinweis:

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 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

T3_1

Hinweis:

Ziele

Voraussetzungen

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

  1. 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.

    T3_1

  2. Prüfen Sie die Repositorys, und notieren Sie sich den Namespace.

    T3_1

  3. Ö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
    

    T3_3

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.

  1. Gehen Sie zur OCI-Konsole, und klicken Sie auf Entwicklerservices. Klicken Sie unter Funktionen auf Anwendungen und Anwendung erstellen.

    T9_1

  2. 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.

    T4_2

  3. 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 und registry ändern.

    T4_3

    Der Befehl init erstellt eine Hello World-Funktion auf func.py. Dieser Code wird überschrieben.

  4. Rufen Sie den Beispielcode der Python-Funktion von hier ab: func.py, und überschreiben Sie die lokale func.py, die während des Befehls init 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
    

    T9_1

  5. Erstellen Sie den neuen Code, und stellen Sie die Funktion bereit.

    ls -lrt
    fn deploy --app MyApp
    

    T4_1

Aufgabe 5: OCI-Benachrichtigungen erstellen

  1. 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.

    T5_1

  2. Klicken Sie auf Abonnements, um ein neues Abonnement zu erstellen und die in Aufgabe 4 erstellte Funktion auszuwählen.

    T5_2

Aufgabe 6: Alarmdefinition für horizontale Skalierung erstellen (Instanzpoolgröße an Zielwert anpassen)

  1. 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.

  2. Geben Sie die folgenden Informationen ein, um den Alarm zu definieren.

    1. Geben Sie im Abschnitt Metrikbeschreibung die folgenden Informationen ein.

      • Metrik-Namespace: oci_lbaas.
      • Kennzahlenname: HttpRequests.
      • Intervall: 1 minute.
      • Statistik: Max.
    2. Geben Sie im Abschnitt Metrikdimensionen die folgenden Informationen ein.

      • Erste Metrikdimension:

        • Dimensionsname: resourceID.
        • Dimensionswert: Wählen Sie die Load-Balancer-OCID aus.
      • Zweite Metrikdimension:

        • Dimensionsname: backendSetName.
        • Dimensionswert: Wählen Sie Ihren backendSet-Namen aus.

      T6_1

    3. 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.

      T6_1

  3. Geben Sie die folgenden Informationen ein, um die Alarmbenachrichtigungen zu definieren.

    1. 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.
    2. 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.

    T6_1

  4. 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.

    T6_1

Aufgabe 7: Alarmdefinition für Scale-in erstellen (Instanzpoolgröße wieder auf die gewünschte Größe anpassen)

  1. 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.

  2. Geben Sie die folgenden Informationen ein, um den Alarm zu definieren.

    1. Geben Sie im Abschnitt Metrikbeschreibung die folgenden Informationen ein.

      • Metrik-Namespace: oci_lbaas.
      • Kennzahlenname: HttpRequests.
      • Intervall: 1 minute.
      • Statistik: Max.
    2. Geben Sie im Abschnitt Metrikdimensionen die folgenden Informationen ein.

      • Erste Metrikdimension:

        • Dimensionsname: resourceID.
        • Dimensionswert: Wählen Sie die Load-Balancer-OCID aus.
      • Zweite Metrikdimension:

        • Dimensionsname: backendSetName.
        • Dimensionswert: Wählen Sie Ihren backendSet-Namen aus.
    3. 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.

      T7_1

  3. Geben Sie die folgenden Informationen ein, um die Alarmbenachrichtigungen zu definieren.

    1. 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.
    2. Wählen Sie im Abschnitt Nachrichtenformat die Option Pretty JSON-Nachrichten senden (Raw-Text mit Zeilenumbrüchen) aus.

  4. 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.

    T7_1

Aufgabe 8: Laden erstellen und Alarmfunktion prüfen

  1. 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.

    T8_1

    Hinweis: Dieser einfache HTTP-Apache-Webserver demonstriert das Szenario.

  2. 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.

    T8_1

  3. Öffnen Sie die Alarmdefinition, um die Metriken anzuzeigen und zu prüfen, ob der Alarm ausgelöst wird.

    T8_1

    T8_1

  4. 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.

    T8_1

    Nach dem Skalierungsprozess wird die Instanzpoolgröße 2 angezeigt.

    T8_1

  5. 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.

    T8_1

    Jetzt befindet sich der Scale-in-Alarm im Feuerzustand.

    T8_1

    Beachten Sie, dass HttpRequests auf eine Zahl unter dem Schwellenwert von 30 gefallen ist.

    T8_1

    Das Scale-in des Instanzpools wurde gestartet.

    T8_1

    Beachten Sie, dass die Instanzpoolgröße wieder den gewünschten Wert von 1 aufweist.

    T8_1

Danksagungen

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.