Nota

Ridimensiona automaticamente un pool di istanze di Oracle Cloud Infrastructure in base alle richieste HTTP del load balancer OCI

Introduzione

In questa esercitazione verrà descritto come ridimensionare automaticamente un pool di istanze Oracle Cloud Infrastructure (OCI) in base al numero di richieste HTTP ricevute dal load balancer OCI. Ci occuperemo di tre argomenti principali.

Monitoraggio OCI: utilizzare il servizio di monitoraggio OCI per monitorare attivamente e passivamente le risorse cloud utilizzando le funzioni di metriche e allarmi. Il servizio di monitoraggio OCI utilizza le metriche per monitorare le risorse e gli allarmi e ricevere una notifica quando queste metriche soddisfano i trigger specificati dall'allarme.

Notifiche OCI: quando accade qualcosa con le tue risorse in OCI, puoi ottenere messaggi leggibili dall'utente tramite gli endpoint supportati, inclusi i messaggi di posta elettronica e di testo (SMS) utilizzando allarmi, regole di evento e connettori. Puoi anche automatizzare le attività tramite endpoint HTTPS personalizzati e OCI Functions.

OCI Functions: OCI Functions è una piattaforma completamente gestita, multi-tenant, altamente scalabile, on-demand e Functions-as-a-Service. Si basa su OCI di livello aziendale e si basa sul motore open source Fn Project. Utilizza OCI Functions (a volte abbreviato in Functions e precedentemente noto come Oracle Functions) quando vuoi concentrarti sulla scrittura di codice per soddisfare le esigenze aziendali.

Architettura di alto livello

T3_1

Nota:

Obiettivi

Prerequisiti

Task 1: Impostazione dei gruppi dinamici

Andare al dominio, fare clic su Gruppi dinamici e creare i gruppi riportati di seguito.

Nome gruppo dinamico: MyFunctions.

ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}

Task 2: Creare criteri

Andare a Criteri e creare i criteri riportati di seguito.

Nome criterio: 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

Task 3: Crea OCI Container Registry

  1. Andare a Servizi sviluppatore, fare clic su Container di registro e creare un repository privato per l'immagine Fn.

    Nome repository: lab/fn-autoscale-instance-pool.

    T3_1

  2. Controllare i repository e prendere nota dello spazio di nomi.

    T3_1

  3. Aprire la shell del terminale in cui sono installate l'interfaccia CLI OCI e Docker e procedere con il login al registro. Controllare l'URL corretto per la propria area. In questa esercitazione viene utilizzata l'area Brasile orientale (San Paolo) in cui l'URL del registro è gru.ocir.io.

    docker login gru.ocir.io
    Username: <your container namespace>/youruser
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    T3_3

Task 4: creare le funzioni OCI Python per ridimensionare automaticamente il pool di istanze

Nota: assicurarsi di aver selezionato la subnet privata, la stessa subnet del pool di flussi.

  1. Andare a OCI Console e fare clic su Servizi per sviluppatori. In Funzioni, fare clic su Applicazioni e su Crea applicazione.

    T9_1

  2. Creare alcune configurazioni per impostare le dimensioni di scala.

    Nota: queste variabili di configurazione vengono utilizzate per determinare i valori che la funzione utilizzerà per eseguire lo scale-in e lo scale-out del pool di istanze.

    Nome segreto Valore
    INSTANCE_POOL_TARGET_SIZE Impostare il valore per la nuova dimensione del pool di istanze
    INSTANCE_POOL_DESIRED_SIZE Impostare la dimensione normale del pool di istanze

    Per questa esercitazione viene utilizzato un pool di istanze di 1 istanza e lo scale-out viene eseguito in 2.

    T4_2

  3. Andare alla shell del terminale in cui sono installati Docker, CLI OCI, CLI Fn Project ed eseguire i comandi riportati di seguito per inizializzare la funzione.

    Nota: se sono stati eseguiti i task, il comando di login Docker è già stato eseguito, in caso contrario, procedere con il task 3.3 di login Docker.

    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
    

    Nota: in questa esercitazione viene utilizzata l'area Est del Brasile (San Paolo). Se si utilizza un'area diversa, è necessario modificare le posizioni api-url e registry.

    T4_3

    Il comando init creerà una funzione Hello World su func.py. Questo codice verrà sovrascritto.

  4. Ottenere il codice di esempio della funzione Python da qui: func.py e sovrascrivere il valore func.py locale creato durante il comando della funzione init.

    # 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. Creare il nuovo codice e distribuire la funzione.

    ls -lrt
    fn deploy --app MyApp
    

    T4_1

Task 5: Creare le notifiche OCI

  1. Andare a OCI Console e fare clic su Servizi per sviluppatori. In Integrazione applicazioni selezionare Notifiche e fare clic su Crea argomento.

    Nome: AutoScaleTopic.

    T5_1

  2. Fare clic su Sottoscrizioni per creare una nuova sottoscrizione e selezionare la funzione creata nel task 4.

    T5_2

Task 6: creare la definizione di allarme per lo scale-out (adeguare la dimensione del pool di istanze al valore di destinazione)

  1. Andare alla console OCI e fare clic su Osservabilità e gestione. In Monitoraggio, selezionare Definizioni allarme e fare clic su Crea allarme.

    Nota: le soglie e l'intervallo di questo allarme sono definiti per l'esercitazione e possono essere personalizzati in base alle proprie esigenze a seconda dell'applicazione.

    Nome allarme: instance_pool_scale_OUT.

  2. Immettere le seguenti informazioni per definire l'allarme.

    1. Nella sezione Descrizione metrica, inserire le seguenti informazioni.

      • Spazio di nomi metrica: oci_lbaas.
      • Nome metrica: HttpRequests.
      • Intervallo: 1 minute.
      • Statistica: Max.
    2. Nella sezione Dimensioni metrica, immettere le informazioni riportate di seguito.

      • Prima dimensione metrica:

        • Nome dimensione: resourceID.
        • Valore dimensione: selezionare l'OCID del load balancer.
      • Seconda dimensione metrica:

        • Nome dimensione: backendSetName.
        • Valore dimensione: selezionare il nome backendSet.

      T6_1

    3. Nella sezione Regola trigger 1 immettere le informazioni riportate di seguito.

      • Operatore: greater than.
      • Valore: 30.
      • Corpo di allarme: il numero di connessioni è superiore al previsto. Avviare il processo di ridimensionamento.

      T6_1

  3. Immettere le informazioni riportate di seguito per definire le notifiche di allarme.

    1. Nella sezione Destinazione, immettere le informazioni riportate di seguito.

      • Servizio di destinazione: selezionare Notifiche.
      • Compartimento: selezionare il compartimento.
      • Argomento: selezionare l'argomento.
    2. Nella sezione Formato messaggio selezionare Invia messaggi Pretty JSON (testo raw con interruzioni di riga) e, a scopo di test, selezionare Ripeti notifica? con 1 minuto di frequenza di notifica.

    T6_1

  4. Fare clic su Opzioni avanzate e aggiungere una nuova tag.

    Nota: si tratta di un'applicazione di tag obbligatoria per definire il tipo di scala, entrata o uscita.

    Spazio di nomi tag: selezionare Nessuno (applicazione di una tag in formato libero).
    Chiave tag: autoscaling_type. Valore: out.

    T6_1

Task 7: Creare la definizione di allarme per lo scale-in (Rettificare la dimensione del pool di istanze alla dimensione desiderata)

  1. Andare alla console OCI e fare clic su Osservabilità e gestione. In Monitoraggio, selezionare Definizioni allarme e fare clic su Crea allarme.

    Nota: le soglie e l'intervallo di questo allarme sono definiti per l'esercitazione e possono essere personalizzati in base alle proprie esigenze a seconda dell'applicazione.

    Nome allarme: instance_pool_scale_IN.

  2. Immettere le seguenti informazioni per definire l'allarme.

    1. Nella sezione Descrizione metrica, inserire le seguenti informazioni.

      • Spazio di nomi metrica: oci_lbaas.
      • Nome metrica: HttpRequests.
      • Intervallo: 1 minute.
      • Statistica: Max.
    2. Nella sezione Dimensioni metrica, immettere le informazioni riportate di seguito.

      • Prima dimensione metrica:

        • Nome dimensione: resourceID.
        • Valore dimensione: selezionare l'OCID del load balancer.
      • Seconda dimensione metrica:

        • Nome dimensione: backendSetName.
        • Valore dimensione: selezionare il nome backendSet.
    3. Nella sezione Regola trigger 1 immettere le informazioni riportate di seguito.

      • Operatore: less than.
      • Valore: 30.
      • Corpo di allarme: il conteggio delle connessioni torna al valore accettabile, richiamando lo scale-in per ridurre il numero di istanze al valore desiderato.

      T7_1

  3. Immettere le informazioni riportate di seguito per definire le notifiche di allarme.

    1. Nella sezione Destinazione, immettere le informazioni riportate di seguito.

      • Servizio di destinazione: selezionare Notifiche.
      • Compartimento: selezionare il compartimento.
      • Argomento: selezionare l'argomento.
    2. Nella sezione Formato messaggio selezionare Invia messaggi Pretty JSON (testo RAW con interruzioni di riga).

  4. Fare clic su Opzioni avanzate e aggiungere una nuova tag.

    Nota: si tratta di un'applicazione di tag obbligatoria per definire il tipo di scala, entrata o uscita.

    Spazio di nomi tag: selezionare Nessuno (applicazione di una tag in formato libero).
    Chiave tag: autoscaling_type. Valore: in.

    T7_1

Task 8: Crea carico e controlla il funzionamento dell'allarme

  1. Ottieni il tuo IP LoadBalancer ed esegui diverse chiamate alla tua applicazione sulla porta 80. Aprire la console della shell ed eseguire il codice seguente per chiamare il load balancer.

    i=1
    while true
    do
    echo "Request $i"
       curl http://your-ip-here
       ((i++))
       echo ""  # Prints a newline for better readability between requests
    done
    

    Output del semplice caricamento dell'applicazione.

    T8_1

    Nota: questo è un semplice server Web HTTP Apache per dimostrare lo scenario.

  2. Controllare la dimensione e lo stato effettivi del pool di istanze. Per questa esercitazione è disponibile un pool di istanze con dimensione 1.

    T8_1

  3. Aprire la definizione dell'allarme per visualizzare le metriche e verificare se l'allarme verrà attivato.

    T8_1

    T8_1

  4. Dopo alcuni minuti a seconda dell'intervallo di metriche, la funzione di scale-out verrà attivata.

    Aprire i pool di istanze e selezionare Stato, ovvero Scalatura e Conteggio istanze di destinazione 2.

    T8_1

    Dopo il processo di ridimensionamento, è possibile vedere che la dimensione del pool di istanze è 2.

    T8_1

  5. Arrestare lo script della shell e attendere che l'allarme dalla transizione di scale-out torni a OK, quindi osservare l'allarme per lo scale-in. Attendere alcuni minuti fino a quando entrambi gli allarmi sono aggiornati e osservare quando l'allarme per scale-in si accenderà.

    T8_1

    Ora, l'allarme scale-in è in stato di incendio.

    T8_1

    Si noti che HttpRequests è stato eliminato a un numero inferiore alla soglia di 30.

    T8_1

    Scale-in del pool di istanze avviato.

    T8_1

    Si noti che la dimensione del pool di istanze torna al valore desiderato di 1.

    T8_1

Riconoscimenti

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione del prodotto, visitare Oracle Help Center.