Condividi tramite


Esercitazione: Ridimensionare un'app contenitore con le metriche Java

App contenitore di Azure gestisce la scalabilità orizzontale automatica tramite un set di regole di ridimensionamento dichiarative. È possibile creare regole di scalabilità personalizzate con origini evento personalizzate.

In questa esercitazione si aggiunge una regola di scalabilità personalizzata per ridimensionare l'app contenitore con le metriche Java e osservare la scalabilità dell'applicazione.

Prerequisiti

Configurare l'ambiente

Usare la procedura seguente per definire le variabili di ambiente e configurare l'ambiente.

  1. Creare variabili per supportare la configurazione della scalabilità.

    export LOCATION=eastus
    export TENANT_ID={tenant-id}
    export SUBSCRIPTION_ID={subscription-id}
    export RESOURCE_GROUP=my-resource-group
    export APP_NAME=my-aca-app
    export IDENTITY_NAME=my-identity
    
    Variabile Descrizione
    LOCATION Posizione dell'area di Azure in cui si creano le app di Azure Container.
    TENANT_ID ID del tenant.
    SUBSCRIPTION_ID ID sottoscrizione usato per creare le app contenitore di Azure.
    RESOURCE_GROUP Nome del gruppo di risorse di Azure per le app contenitore di Azure.
    APP_NAME Nome dell'app per le app contenitore di Azure.
    IDENTITY_NAME Nome dell'identità gestita, assegnato alle app contenitore di Azure.
  2. Accedere ad Azure con l'interfaccia della riga di comando di Azure.

    az login
    

Configurare un'identità gestita per le app di Azure Container

Per ridimensionare le metriche della piattaforma App Azure Container, è necessaria un'identità gestita per accedere alle metriche da Monitoraggio di Azure.

  1. Creare un'identità assegnata dall'utente e assegnarla alle app di Azure Container. È possibile seguire il documento per aggiungere un'identità assegnata dall'utente. Dopo aver creato l'identità, eseguire il comando dell'interfaccia della riga di comando per impostare l'ID identità.

    USER_ASSIGNED_IDENTITY_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME --query "id" --output tsv)
    
  2. Concedere il ruolo per l'identità Monitoring Reader gestita per leggere i dati da Monitoraggio di Azure. È possibile trovare altri dettagli sui ruoli per Monitoraggio di Azure nei ruoli predefiniti di Azure per Monitoraggio.

    # Get the principal ID for your managed identity
    PRINCIPAL_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME --query "principalId" --output tsv)
    
    az role assignment create --assignee $PRINCIPAL_ID --role "Monitoring Reader" --scope /subscriptions/$SUBSCRIPTION_ID
    

Aggiungere una regola di scalabilità con le metriche di Monitoraggio di Azure

Per la scalabilità con le metriche di Monitoraggio di Azure, è possibile fare riferimento al ridimensionatore KEDA di Monitoraggio di Azure per definire la regola di scalabilità di App contenitore.

Ecco un elenco di metadati di base per configurare la regola di scalabilità.

Chiave dei metadati Descrizione
tenantId ID del tenant che contiene la risorsa di Azure.
subscriptionId ID della sottoscrizione di Azure che contiene la risorsa di Azure.
resourceGroupName Nome del gruppo di risorse per la risorsa di Azure.
resourceURI URI abbreviato nella risorsa di Azure con formato <resourceProviderNamespace>/<resourceType>/<resourceName>.
metricName Nome della metrica su cui eseguire la query.
metricAggregationType Metodo di aggregazione della metrica di Monitoraggio di Azure. Le opzioni includono Average, Total, Maximum.
metricFilter Nome del filtro da specificare usando le dimensioni elencate nella documentazione ufficiale. (opzionale)
metricAggregationInterval Tempo di raccolta della metrica nel formato "hh:mm:ss" (impostazione predefinita: "0:5:0", facoltativo)
targetValue Valore di destinazione per attivare le azioni di ridimensionamento. (Questo valore può essere un float)

Aggiungere una regola di scalabilità con le metriche di Monitoraggio di Azure per le app contenitore di Azure per l'applicazione.

az containerapp update \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --min-replicas 1 \
        --max-replicas 10 \
        --scale-rule-name scale-with-azure-monitor-metrics \
        --scale-rule-type azure-monitor \
        --scale-rule-metadata "tenantId=${TENANT_ID}" \
                            "subscriptionId=${SUBSCRIPTION_ID}" \
                            "resourceGroupName=${RESOURCE_GROUP}" \
                            "resourceURI=Microsoft.App/containerapps/${APP_NAME}" \
                            "metricName=JvmGcCount" \
                            "metricAggregationType=Total" \
                            "metricAggregationInterval=0:1:0" \
                            "targetValue=30" \
        --scale-rule-identity $USER_ASSIGNED_IDENTITY_ID

Questo comando aggiunge una regola di scalabilità all'app contenitore con il nome scale-with-azure-monitor-metrics

  • Il tipo di scala è impostato su azure-monitor.
  • KEDA usa l'identità gestita con l'ID USER_ASSIGNED_IDENTITY_ID risorsa per eseguire l'autenticazione con Monitoraggio di Azure ed eseguire query sulle metriche per l'app contenitore.
  • KEDA esegue una query sulla metrica JvmGcCounte aggrega i valori delle metriche entro 1 minuto con il tipo di Totalaggregazione .
  • Il valore di destinazione è impostato su 30, il che significa che KEDA calcola l'oggetto desiredReplicas usando ceil(AggregatedMetricValue(JvmGcCount)/30).

Nota

La metrica JvmGcCount viene usata solo come esempio. È possibile usare qualsiasi metrica da Monitoraggio di Azure. Prima di configurare la regola di scalabilità, visualizzare le metriche nel portale di Azure per determinare la metrica, l'intervallo di aggregazione e il valore di destinazione appropriati in base ai requisiti dell'applicazione. È anche consigliabile usare le regole di scalabilità HTTP/TCP predefinite, che possono soddisfare gli scenari di ridimensionamento più comuni, prima di scegliere una metrica personalizzata.

Visualizzare il ridimensionamento nel portale di Azure (facoltativo)

Quando la nuova revisione è pronta, inviare richieste all'app contenitore per attivare la scalabilità automatica con le metriche Java.

  1. Passare al Metrics pannello nel portale di Azure per le app contenitore di Azure.
  2. Aggiungere un grafico, usare la metrica jvm.gc.count, con filtrare Revision=<your-revision>, aggregazione usando Sume dividere per Replica. È possibile visualizzare il JvmGcCount valore della metrica per ogni replica in questa chat.
  3. Aggiungere un grafico, usare la metrica jvm.gc.count, con filtro Revision=<your-revision> e aggregazione usando Sum. È possibile visualizzare il valore della metrica aggregata JvmGcCount totale per la revisione in questa chat.
  4. Aggiungere un grafico, usare la metrica Replica Count, con filtro Revision=<your-revision> e aggregazione usando Max. È possibile visualizzare il numero di repliche per la revisione in questa chat.

Ecco uno snapshot delle metriche di esempio per la regola di scalabilità di esempio.

Screenshot della scalabilità KEDA con le metriche JVM.

  1. Inizialmente, è presente una replica (la minReplicas) per l'app.
  2. Un picco nelle richieste causa l'esperienza frequente di Garbage Collection (GC) dell'app Java.
  3. KEDA osserva il valore della metrica aggregato per jvm.gc.count viene aumentato a 256e calcola il desiredReplicas valore come ceil(256/30)=9.
  4. KEDA aumenta il numero di repliche dell'app contenitore a 9.
  5. Il traffico HTTP viene distribuito tra più repliche, riducendo il conteggio GC medio.
  6. Il conteggio GC diminuisce ulteriormente quando non arrivano richieste.
  7. Dopo un periodo di raffreddamento, KEDA ridimensiona la replica fino a minReplicas=1.

Log di scalabilità

Per visualizzare i log di scalabilità KEDA, è possibile eseguire la query nel Logs pannello.

ContainerAppSystemLogs
| where RevisionName == "<your-revision>"
| where EventSource == "KEDA"
| project TimeGenerated, Type, Reason, ContainerAppName, Log

Screenshot della query di log di scalabilità KEDA.

Pulire le risorse

Le risorse create in questa esercitazione hanno effetto sulla fattura di Azure. Se non si intende usare questi servizi a lungo termine, eseguire il comando seguente per rimuovere tutti gli elementi creati in questa esercitazione.

az group delete --resource-group $RESOURCE_GROUP