Freigeben über


Tutorial: Skalieren einer Container-App

Azure Container Apps verwaltet die automatische horizontale Skalierung mithilfe einer Reihe deklarativer Skalierungsregeln. Wenn eine Container-App horizontal hochskaliert wird, werden bei Bedarf neue Instanzen der Container-App erstellt. Diese Instanzen werden als Replikate bezeichnet.

In diesem Tutorial fügen Sie Ihrer Container-App eine HTTP-Skalierungsregel hinzu, und beobachten, wie Ihre Anwendung skaliert wird.

Voraussetzungen

Anforderung Instructions
Azure-Konto Falls Sie kein Azure-Konto besitzen, können Sie kostenlos eines erstellen.

Sie benötigen die Berechtigung Mitwirkender für das Azure-Abonnement, um den Vorgang fortzusetzen. Weitere Einzelheiten finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.
GitHub-Konto Kostenlos erhalten.
Azure CLI Installieren Sie die Azure CLI.

Einrichten

Um sich ausgehend von der CLI bei Azure anzumelden, führen Sie den folgenden Befehl aus und befolgen Sie die Anweisungen, um den Authentifizierungsprozess abzuschließen.

az login

Verwenden Sie den Upgradebefehl, um sicherzustellen, dass Sie die neueste Version der CLI ausführen.

az upgrade

Installieren oder aktualisieren Sie als Nächstes die Azure Container Apps-Erweiterung für die CLI.

Falls Fehler zu fehlenden Parametern auftreten, wenn Sie az containerapp-Befehle in der Azure CLI oder in Cmdlets aus dem Az.App-Modul in PowerShell ausführen, stellen Sie sicher, dass die aktuelle Version der Azure Container Apps-Erweiterung installiert ist.

az extension add --name containerapp --upgrade

Hinweis

Ab Mai 2024 aktivieren Azure CLI-Erweiterungen standardmäßig keine Previewfunktionen mehr. Um auf Previewfunktionen von Container Apps zuzugreifen, installieren Sie die Container Apps-Erweiterung mit --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Nachdem die aktuelle Erweiterung oder das aktuelle Modul installiert ist, registrieren Sie nun die Namespaces Microsoft.App und Microsoft.OperationalInsights.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Erstellen und Bereitstellen der Container-App

Verwenden Sie den Befehl containerapp up, um Ihre Container-App zu erstellen und bereitzustellen. Dieser Befehl erstellt Folgendes:

  • Ressourcengruppe
  • Container Apps-Umgebung
  • Log Analytics-Arbeitsbereich

Wenn eine dieser Ressourcen bereits vorhanden ist, verwendet der Befehl die vorhandenen Ressource, anstatt eine neue zu erstellen.

Schließlich erstellt und stellt der Befehl die Container-App mithilfe eines öffentlichen Containerimages bereit. mcr.microsoft.com/dotnet/samples:aspnetapp Dieses Bild wird verwendet, um die skalierungsregeln auszulösen, die Sie in diesem Artikel erstellen. Sie müssen .NET nicht kennen oder verwenden, um dieses Verfahren abzuschließen.

az containerapp up \
  --name my-container-app \
  --resource-group my-container-apps \
  --location centralus \
  --environment 'my-container-apps' \
  --image mcr.microsoft.com/dotnet/samples:aspnetapp \
  --target-port 8080 \
  --ingress external \
  --query properties.configuration.ingress.fqdn \

Hinweis

Stellen Sie sicher, dass der Wert für den --image-Parameter in Kleinbuchstaben geschrieben ist.

Wenn Sie --ingress auf external festlegen, stellen Sie die Container-App für öffentliche Anforderungen zur Verfügung.

Der Befehl up gibt den vollqualifizierten Domänennamen der Container-App zurück. Kopieren Sie diesen FQDN in eine Textdatei. Sie verwenden sie im Abschnitt "Anforderungen senden ". Ihr FQDN sieht ungefähr wie das folgende Beispiel aus:

https://my-container-app.icydune-96848328.centralus.azurecontainerapps.io

Skalierungsregel hinzufügen

Fügen Sie Ihrer Container-App eine HTTP-Skalierungsregel hinzu, indem Sie den Befehl az containerapp update ausführen.

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-http-scale-rule \
    --scale-rule-http-concurrency 1

Mit diesem Befehl wird Ihrer Container-App eine HTTP-Skalierungsregel mit dem Namen my-http-scale-rule und der Parallelitätseinstellung 1 hinzugefügt. Wenn Ihre App gleichzeitig mehr als eine HTTP-Anforderung empfängt, erstellt die Runtime Replikate Ihrer App, um die Anforderungen zu verarbeiten.

Der Befehl update gibt die neue Konfiguration als JSON-Antwort zurück, um zu überprüfen, ob Ihre Anforderung erfolgreich war.

Ausgabe des Startprotokolls

Sie können die Auswirkungen der Anwendungsskalierung beobachten, indem Sie die von der Container Apps-Runtime generierten Protokolle anzeigen. Verwenden Sie den Befehl az containerapp logs show, um mit dem Lauschen nach Protokolleinträgen zu beginnen.

az containerapp logs show \
    --name my-container-app \
    --resource-group my-container-apps \
    --type=system \
    --follow=true

Der Befehl show gibt Einträge aus den Systemprotokollen für Ihre Container-App in Echtzeit zurück. Sie können eine Antwort erwarten, die dem folgenden Beispiel ähnelt:

{
    "TimeStamp":"2023-08-01T16:49:03.02752",
    "Log":"Connecting to the container 'my-container-app'..."
}
{
    "TimeStamp":"2023-08-01T16:49:03.04437",
    "Log":"Successfully Connected to container:
    'my-container-app' [Revision: 'my-container-app--9uj51l6',
    Replica: 'my-container-app--9uj51l6-5f96557ffb-5khg9']"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9480811+00:00",
    "Log":"Microsoft.Hosting.Lifetime[14]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9481264+00:00",
    "Log":"Now listening on: http://[::]:80"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9490917+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9491036+00:00",
    "Log":"Application started. Press Ctrl+C to shut down."
}
{
    "TimeStamp":"2023-08-01T16:47:31.949723+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497292+00:00",
    "Log":"Hosting environment: Production"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497325+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497367+00:00",
    "Log":"Content root path: /app/"
}

Weitere Informationen finden Sie unter az containerapp logs.

Senden von Anforderungen

Öffnen Sie eine neue Bash-Shell. Führen Sie den folgenden Befehl aus, und ersetzen Sie dabei <YOUR_CONTAINER_APP_FQDN> durch den vollqualifizierten Domänennamen für Ihre Container-App, den Sie im Abschnitt Erstellen und Bereitstellen der Container-App gespeichert haben.

seq 1 50 | xargs -Iname -P10 curl "<YOUR_CONTAINER_APP_FQDN>"

Diese Befehle senden 50 Anforderungen in gleichzeitigen Batches mit jeweils 10 Anforderungen an Ihre Container-App.

Befehl oder Argument BESCHREIBUNG
seq 1 50 Generiert eine Sequenz von Zahlen von 1 bis 50.
| Der Pipeoperator sendet die Sequenz an den Befehl xargs.
xargs Führt curl mit der angegebenen URL aus.
-Iname Fungiert als Platzhalter für die Ausgabe von seq. Dieses Argument verhindert, dass der Rückgabewert an den Befehl curl gesendet wird.
curl Ruft die angegebene URL auf.
-P10 Weist xargs an, bis zu 10 Prozesse gleichzeitig auszuführen.

Weitere Informationen finden Sie in der Dokumentation für:

In der ersten Shell, in der Sie den Befehl az containerapp logs show ausgeführt haben, enthält die Ausgabe nun einen oder mehrere Protokolleinträge wie den folgenden.

{
    "TimeStamp":"2023-08-01 18:09:52 +0000 UTC",
    "Type":"Normal",
    "ContainerAppName":"my-container-app",
    "RevisionName":"my-container-app--00001111",
    "ReplicaName":"my-container-app--00001111-aaaaa22222-bbbb",
    "Msg":"Replica 'my-container-app--00001111-aaaaa22222-bbbb' has been scheduled to run on a node.",
    "Reason":"AssigningReplica",
    "EventSource":"ContainerAppController",
    "Count":0
}

Anzeigen der Skalierung im Azure-Portal (optional)

  1. Melden Sie sich beim Azure-Portal an.

  2. Geben Sie in der Suchleiste oben my-container-app ein.

  3. Wählen Sie in den Suchergebnissen unter Ressourcen den Eintrag my-container-app aus.

  4. Erweitern Sie in der Navigationsleiste auf der linken Seite Anwendung, und wählen Sie Skalierung und Replikate aus.

  5. Wählen Sie auf der Seite Skalierung und Replikate die Option Replikate aus.

  6. Ihre Container-App verfügt jetzt über mehrere Replikate, die ausgeführt werden.

    Screenshot: Container-App-Replikate

    Möglicherweise müssen Sie "Aktualisieren" auswählen, um die neuen Replikate anzuzeigen.

  7. Erweitern Sie in der Navigationsleiste auf der linken Seite Überwachung, und wählen Sie Metriken aus.

  8. Legen Sie auf der Seite MetrikenMetrik auf Anforderungen fest.

  9. Wählen Sie Trennung anwenden aus.

  10. Erweitern Sie die Dropdownliste Werte, und überprüfen Sie die Option Replikat.

  11. Wählen Sie das blaue Häkchensymbol aus, um die Bearbeitung der Aufteilung abzuschließen.

  12. Der Graph zeigt die von Ihrer Container-App empfangenen Anforderungen, aufgeteilt nach Replikaten.

    Metrikengraph der Container-App, das die Anforderungen aufgeteilt nach Replikaten zeigt.

  13. Standardmäßig ist die Graphskalierung auf 24 Stunden Dauer festgelegt, wobei die Zeitgranularität 15 Minuten beträgt. Wählen Sie die Skalierung aus, und ändern Sie sie in die letzten 30 Minuten und eine Zeitgranularität von einer Minute. Klicken Sie anschließend auf die Schaltfläche Anwenden.

  14. Wählen Sie den Graph aus, und ziehen Sie ihn, um den kürzlichen Anstieg der von Ihrer Container-App empfangenen Anforderungen hervorzuheben.

    Screenshot: Metrikengraph der Container-App, der die Anforderungen aufgeteilt nach Replikaten zeigt. Die Skala ist auf 30 Minuten und eine Zeitgranularität von einer Minute festgelegt.

    Der folgende Screenshot zeigt eine vergrößerte Ansicht, wie die von Ihrer Container-App empfangenen Anforderungen auf Replikate aufgeteilt sind.

    Screenshot: Metrikengraph der Container-App, der die Anforderungen aufgeteilt nach Replikaten in vergrößerter Ansicht zeigt

CPU- und Arbeitsspeicherskalierung

Wenn möglich, sollten Sie HTTP-Skalierungsregeln für CPU- oder Arbeitsspeicherskalierungsregeln bevorzugen. Die CPU- und Arbeitsspeicherskalierung erlauben es Ihrer Container-App nicht, auf Null zu skalieren.

Nachdem Sie eine CPU- oder Arbeitsspeicherskalierungsregel hinzugefügt haben, können Sie sie testen, indem Sie Anforderungen an Ihre Container-App senden und die Skalierung im Azure-Portal anzeigen.

Nachdem Sie Anforderungen an Ihre Skalierungs-App gesendet haben, kann es eine Minute dauern, bis die Skalierungsregel ausgelöst wird und die neuen Replikate erstellt werden.

CPU-Skalierung

Das CPU-Scaling ermöglicht es Ihrer App, je nach CPU-Auslastung automatisch hoch- oder herunterzuskalieren.

Wenn Sie beispielsweise eine CPU-Skalierungsregel mit einem Auslastungswert 50erstellen, erstellt Azure Container-Apps mehr Replikate Ihrer Container-App, wenn die durchschnittliche CPU-Auslastung für alle Replikate 50%erreicht.

Die CPU-Skalierung lässt es Ihrer Container-App nicht zu, auf Null zu skalieren. Weitere Informationen zu diesem Trigger finden Sie unter KEDA CPU-Skalierungstrigger.

Fügen Sie Ihrer Container-App eine CPU-Skalierungsregel hinzu, indem Sie den az containerapp update Befehl ausführen.

Hinweis

Wenn Sie die Azure CLI verwenden, um einer Container-App, die bereits über eine Skalierungsregel verfügt, eine Skalierungsregel hinzuzufügen, ersetzt die neue Skalierungsregel die alte Skalierungsregel. Informationen zum Hinzufügen mehrerer Skalierungsregeln finden Sie unter "Regeln mit mehreren Skalierungen".

Ersetzen Sie vor dem Ausführen des folgenden Befehls den <PLACEHOLDERS>-Wert durch Ihren eigenen Wert. Ersetzen Sie in diesem Lernprogramm <UTILIZATION> durch 1. Dies führt dazu, dass Ihre Container-App skaliert wird, wenn die durchschnittliche CPU-Auslastung für alle Replikate 1%erreicht. Dieser Wert dient nur zur Demonstration. Die Anzahl der Replikate ist durch den Wert --max-replicas 10, den Sie beim Ausführen von az containerapp update angegeben haben, auf 10 beschränkt.

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-cpu-scale-rule \
    --scale-rule-type cpu \
    --scale-rule-metadata type=Utilization value=<UTILIZATION>

Speicherskalierung

Die Speicherskalierung ermöglicht es Ihrer App, abhängig davon, wie viel Arbeitsspeicher verwendet wird, in oder außerhalb des Speichers zu skalieren.

Wenn Sie beispielsweise eine Speicherskalaregel mit einem Auslastungswert 50erstellen, erstellt Azure Container-Apps mehr Replikate Ihrer Container-App, wenn die durchschnittliche Speicherauslastung für alle Replikate 50%erreicht.

Durch die Speicherskalierung kann Ihre Container-App nicht auf Null skaliert werden. Weitere Informationen zu diesem Trigger finden Sie unter KEDA-Speicherskalierungstrigger.

Fügen Sie Ihrer Container-App eine Speicherskalierungsregel hinzu, indem Sie den az containerapp update Befehl ausführen.

Hinweis

Wenn Sie die Azure CLI verwenden, um einer Container-App, die bereits über eine Skalierungsregel verfügt, eine Skalierungsregel hinzuzufügen, ersetzt die neue Skalierungsregel die alte Skalierungsregel. Informationen zum Hinzufügen mehrerer Skalierungsregeln finden Sie unter "Regeln mit mehreren Skalierungen".

Ersetzen Sie vor dem Ausführen des folgenden Befehls den <PLACEHOLDERS>-Wert durch Ihren eigenen Wert. Ersetzen Sie in diesem Lernprogramm <UTILIZATION> durch 1. Dadurch wird die Container-App skaliert, wenn die durchschnittliche Speicherauslastung für alle Replikate 1%erreicht. Dieser Wert dient nur zur Demonstration. Die Anzahl der Replikate ist durch den Wert --max-replicas 10, den Sie beim Ausführen von az containerapp update angegeben haben, auf 10 beschränkt.

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-memory-scale-rule \
    --scale-rule-type memory \
    --scale-rule-metadata type=Utilization value=<UTILIZATION>

Regeln für mehrere Skalierungen

Um Ihrer Container-App mithilfe der Azure CLI mehrere Skalierungsregeln hinzuzufügen, müssen Sie YAML verwenden.

  1. Exportieren Sie ihre Container-App-Konfiguration mit dem az containerapp show Befehl in YAML.

    az containerapp show \
        --name my-container-app \
        --resource-group my-container-apps \
        --output yaml > app.yaml
    
  2. Fügen Sie im properties>template>scale>rules Abschnitt des Abschnitts app.yamldie folgenden Eigenschaften hinzu. Ersetzen Sie <PLACEHOLDERS> durch Ihre eigenen Werte.

    ...
    properties:
    ...
      template:
    ...
        scale:
    ...
          rules:
            - name: cpu-scaling-rule
              custom:
                type: cpu
                metadata:
                  type: "Utilization"
                  value: "<CPU_UTILIZATION>"
            - name: memory-scaling-rule
              custom:
                type: memory
                metadata:
                  type: "Utilization"
                  value: "<MEMORY_UTILIZATION>"
    ...
    
  3. Importieren Sie Ihre Container-App-Konfiguration von app.yaml mit dem az containerapp update Befehl.

    az containerapp update \
      --name my-container-app \
      --resource-group my-container-apps \
      --yaml app.yaml
    

Bereinigen von Ressourcen

Wenn Sie diese Anwendung nicht weiter verwenden möchten, führen Sie den folgenden Befehl aus, um die Ressourcengruppe zusammen mit allen in diesem Tutorial erstellten Ressourcen zu löschen.

Vorsicht

Mit dem folgenden Befehl werden die angegebene Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht. Wenn Ressourcen außerhalb des Gültigkeitsbereichs dieses Lernprogramms in der angegebenen Ressourcengruppe vorhanden sind, werden sie ebenfalls gelöscht.

az group delete --name my-container-apps

Tipp

Treten Probleme auf? Informieren Sie uns über GitHub, indem Sie ein Problem im Azure Container Apps-Repository öffnen.

Nächste Schritte