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
- Un account Azure con una sottoscrizione attiva. Se non ne hai già uno, puoi crearne uno gratuitamente.
- Interfaccia della riga di comando di Azure.
- Un'applicazione Java distribuita in App Contenitore di Azure.
Configurare l'ambiente
Usare la procedura seguente per definire le variabili di ambiente e configurare l'ambiente.
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. 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.
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)
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
JvmGcCount
e aggrega i valori delle metriche entro 1 minuto con il tipo diTotal
aggregazione . - Il valore di destinazione è impostato su
30
, il che significa che KEDA calcola l'oggettodesiredReplicas
usandoceil(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.
- Passare al
Metrics
pannello nel portale di Azure per le app contenitore di Azure. - Aggiungere un grafico, usare la metrica
jvm.gc.count
, con filtrareRevision=<your-revision>
, aggregazione usandoSum
e dividere perReplica
. È possibile visualizzare ilJvmGcCount
valore della metrica per ogni replica in questa chat. - Aggiungere un grafico, usare la metrica
jvm.gc.count
, con filtroRevision=<your-revision>
e aggregazione usandoSum
. È possibile visualizzare il valore della metrica aggregataJvmGcCount
totale per la revisione in questa chat. - Aggiungere un grafico, usare la metrica
Replica Count
, con filtroRevision=<your-revision>
e aggregazione usandoMax
. È 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.
- Inizialmente, è presente una replica (la
minReplicas
) per l'app. - Un picco nelle richieste causa l'esperienza frequente di Garbage Collection (GC) dell'app Java.
- KEDA osserva il valore della metrica aggregato per
jvm.gc.count
viene aumentato a256
e calcola ildesiredReplicas
valore comeceil(256/30)=9
. - KEDA aumenta il numero di repliche dell'app contenitore a 9.
- Il traffico HTTP viene distribuito tra più repliche, riducendo il conteggio GC medio.
- Il conteggio GC diminuisce ulteriormente quando non arrivano richieste.
- 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
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