Festlegen von Skalierungsregeln in Azure Container Apps

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

Wenn Sie Skalierungsregeln hinzufügen oder bearbeiten, wird eine neue Version Ihrer Container App erstellt. Eine Überarbeitung ist eine unveränderliche Momentaufnahme Ihrer Container App. Unter Änderungstypen für Revisionen erfahren Sie, welche Arten von Änderungen eine neue Revision auslösen.

Ereignisgesteuerte Container Apps-Aufträge verwenden Skalierungsregeln, um die Ausführung auf der Grundlage von Ereignissen auszulösen.

Skalierungsdefinition

Die Skalierung wird durch die Kombination von Grenzwerten, Regeln und Verhalten definiert.

  • Grenzwerte sind die minimale und maximale Anzahl von Replikaten pro Revision, wenn Ihre Container-Anwendung skaliert wird.

    Skalierungslimit Standardwert Mindestwert Höchstwert
    Mindestanzahl von Replikaten pro Überarbeitung 0 0 Im Azure-Portal sind maximal 300 und in der Azure CLI sind maximal 1.000 Replikate konfigurierbar.
    Maximale Anzahl von Replikaten pro Überarbeitung 10 1 Im Azure-Portal sind maximal 300 und in der Azure CLI sind maximal 1.000 Replikate konfigurierbar.

    Weitere Informationen finden Sie unter Kontingente für Azure Container Apps.

  • Regeln sind die Kriterien, die von Container-Apps verwendet werden, um zu entscheiden, wann Replikate hinzugefügt oder entfernt werden sollen.

    Skalierungsregeln werden als HTTP, TCP oder benutzerdefiniert implementiert.

  • Verhalten ist, wie die Regeln und Grenzwerte kombiniert werden, um Skalierungsentscheidungen im Laufe der Zeit zu bestimmen.

    Das Skalierungsverhalten erklärt, wie Skalierungsentscheidungen berechnet werden.

Wenn Sie Ihre Skalierungsregeln festlegen, sollten Sie die folgenden Punkte beachten:

  • Ihnen werden keine Nutzungsgebühren in Rechnung gestellt, wenn Ihre Container App auf Null skaliert.
  • Replikate, die nicht verarbeitet werden, aber im Arbeitsspeicher verbleiben, können mit einer niedrigeren „Leerlaufrate“ abgerechnet werden. Weitere Informationen finden Sie unter Abrechnung.
  • Wenn Sie sicherstellen möchten, dass immer eine Instanz Ihrer Überarbeitung ausgeführt wird, setzen Sie die Mindestanzahl der Replikate auf 1 oder höher.

Skalierungsregeln

Die Skalierung wird durch drei verschiedene Kategorien von Triggern gesteuert:

  • HTTP: Basierend auf der Anzahl gleichzeitiger HTTP-Anforderungen an Ihre Revision.
  • TCP: Basierend auf der Anzahl gleichzeitiger TCP-Verbindungen mit Ihrer Revision.
  • Benutzerdefiniert: Basierend auf CPU, Arbeitsspeicher oder unterstützten ereignisgesteuerten Datenquellen wie z. B.:
    • Azure Service Bus
    • Azure Event Hubs
    • Apache Kafka
    • Redis

Wenn Sie mehrere Skalierungsregeln definieren, beginnt die Container App zu skalieren, sobald die erste Bedingung einer Regel erfüllt ist.

HTTP

Mit einer HTTP-Skalierungsregel haben Sie die Kontrolle über den Schwellenwert der gleichzeitigen HTTP-Anforderungen, der bestimmt, wie Ihre Container App-Überarbeitung skaliert wird. Alle 15 Sekunden wird die Anzahl der gleichzeitigen Anforderungen berechnet, indem die Anzahl der Anforderungen der letzten 15 Sekunden durch 15 geteilt wird. Container Apps-Aufträge unterstützen keine HTTP-Skalierungsregeln.

Im folgenden Beispiel skaliert die Überarbeitung auf bis zu fünf Replikate und kann bis auf Null skaliert werden. Die Skalierungseigenschaft ist auf 100 gleichzeitige Anforderungen pro Sekunde eingestellt.

Beispiel

Der http-Abschnitt definiert eine HTTP-Skalierungsregel.

Skalierungseigenschaft Beschreibung Standardwert Mindestwert Höchstwert
concurrentRequests Wenn die Anzahl der HTTP-Anforderungen diesen Wert überschreitet, wird ein weiteres Replikat hinzugefügt. Replikate werden dem Pool weiterhin bis zu einer Anzahl von maxReplicas hinzugefügt. 10 1
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "http-rule",
            "http": {
              "metadata": {
                "concurrentRequests": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Hinweis

Legen Sie die Eigenschaft properties.configuration.activeRevisionsMode der Container-App auf single fest, wenn Sie Nicht-HTTP-Ereignisskalierungsregeln verwenden.

Definieren Sie eine HTTP-Skalierungsregel mithilfe des Parameters --scale-rule-http-concurrency in den Befehlen create oder update.

CLI-Parameter Beschreibung Standardwert Mindestwert Höchstwert
--scale-rule-http-concurrency Wenn die Anzahl der gleichzeitigen HTTP-Anforderungen diesen Wert überschreitet, wird ein weiteres Replikat hinzugefügt. Replikate werden dem Pool weiterhin bis zu einer Anzahl von max-replicas hinzugefügt. 10 1
az containerapp create \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --environment <ENVIRONMENT_NAME> \
  --image <CONTAINER_IMAGE_LOCATION>
  --min-replicas 0 \
  --max-replicas 5 \
  --scale-rule-name azure-http-rule \
  --scale-rule-type http \
  --scale-rule-http-concurrency 100
  1. Navigieren Sie im Azure-Portal zu Ihrer Container-App

  2. Wählen Sie Skalieren aus.

  3. Wählen Sie Bearbeiten und bereitstellen aus.

  4. Klicken Sie auf die Registerkarte Skalieren.

  5. Wählen Sie den minimalen und maximalen Replikatbereich aus.

    Screenshot: Skalierungsbereich-Schieberegler für Azure Container Apps

  6. Wählen Sie Hinzufügen aus.

  7. Geben Sie im Feld Regelname einen Namen für die Regel ein.

  8. Wählen Sie in der Dropdownliste Typ die Option HTTP-Skalierung aus.

  9. Geben Sie im Feld Gleichzeitige Anforderungen die gewünschte Anzahl gleichzeitiger Anforderungen für Ihre Container-App ein.

TCP

Mit einer TCP-Skalierungsregel haben Sie die Kontrolle über den Schwellenwert gleichzeitiger TCP-Verbindungen, die bestimmen, wie Ihre App skaliert wird. Alle 15 Sekunden wird die Anzahl der gleichzeitigen Verbindungen berechnet, indem die Anzahl der Verbindungen der letzten 15 Sekunden durch 15 geteilt wird. Container Apps-Aufträge unterstützen keine TCP-Skalierungsregeln.

Im folgenden Beispiel skaliert die Container App-Überarbeitung auf bis zu fünf Replikate und kann bis auf Null skaliert werden. Der Skalierungsschwellenwert wurde auf 100 gleichzeitige Verbindungen pro Sekunde festgelegt.

Beispiel

Der Abschnitt tcp definiert eine TCP-Skalierungsregel.

Skalierungseigenschaft Beschreibung Standardwert Mindestwert Höchstwert
concurrentConnections Wenn die Anzahl gleichzeitiger TCP-Verbindungen diesen Wert überschreitet, wird ein weiteres Replikat hinzugefügt. Replikate werden bei steigender Anzahl gleichzeitiger Verbindungen solange hinzugefügt, bis die Anzahl von maxReplicas erreicht ist. 10 1
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "tcp-rule",
            "tcp": {
              "metadata": {
                "concurrentConnections": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Definieren Sie eine TCP-Skalierungsregel mithilfe des Parameters --scale-rule-tcp-concurrency in den Befehlen create oder update.

CLI-Parameter Beschreibung Standardwert Mindestwert Höchstwert
--scale-rule-tcp-concurrency Wenn die Anzahl gleichzeitiger TCP-Verbindungen diesen Wert überschreitet, wird ein weiteres Replikat hinzugefügt. Replikate werden bei steigender Anzahl gleichzeitiger Verbindungen solange hinzugefügt, bis die Anzahl von max-replicas erreicht ist. 10 1
az containerapp create \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --environment <ENVIRONMENT_NAME> \
  --image <CONTAINER_IMAGE_LOCATION>
  --min-replicas 0 \
  --max-replicas 5 \
  --scale-rule-name azure-tcp-rule \
  --scale-rule-type tcp \
  --scale-rule-tcp-concurrency 100

Im Azure-Portal nicht unterstützt. Verwenden Sie Azure CLI oder Azure Resource Manager, um eine TCP-Skalierungsregel zu konfigurieren.

Benutzerdefiniert

Sie können eine benutzerdefinierte Skalierungsregel für Container Apps basierend auf jedem scaledObject-basierten KEDA-Scaler mit den folgenden Standardwerten erstellen:

Defaults Sekunden
Abrufintervall 30
Abkühlphase 300

Für ereignisgesteuerte Container Apps-Aufträge können Sie eine benutzerdefinierte Skalierungsregel basierend auf allen scaledJob-basierten KEDA-Scalers erstellen.

Das folgende Beispiel veranschaulicht das Erstellen einer benutzerdefinierten Skalierungsregel.

Beispiel

In diesem Beispiel wird gezeigt, wie Sie einen Azure Service Bus-Scaler in eine Skalierungsregel für Container Apps konvertieren, aber Sie verwenden denselben Prozess für jede andere ScaledObject-basierte KEDA-Scalerspezifikation.

Bei der Authentifizierung konvertieren KEDA-Scalerparameter in Geheimnisse für Container Apps.

Das folgende Verfahren zeigt, wie Sie einen KEDA-Scaler in eine Container App-Skalierungsregel konvertieren. Dieser Ausschnitt ist ein Auszug aus einer ARM-Vorlage, der Ihnen zeigt, wo die einzelnen Abschnitte im Kontext der Gesamtvorlage stehen.

{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "configuration": {
        ...
        "secrets": [
          {
            "name": "<NAME>",
            "value": "<VALUE>"
          }
        ]
      },
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [
            {
              "name": "<RULE_NAME>",
              "custom": {
                "metadata": {
                  ...
                },
                "auth": [
                  {
                    "secretRef": "<NAME>",
                    "triggerParameter": "<PARAMETER>"
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

In diesem Auszug finden Sie kontextbezogene Informationen dazu, wie die folgenden Beispiele in die ARM-Vorlage passen.

Zunächst definieren Sie den Typ und die Metadaten der Skalierungsregel.

  1. Suchen Sie aus der KEDA-Scalerspezifikation den type-Wert.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. Geben Sie in der ARM-Vorlage den Skalierungswert type in die Eigenschaft custom.type der Skalierungsregel ein.

    ...
    "rules": [
      {
        "name": "azure-servicebus-queue-rule",
        "custom": {
          "type": "azure-servicebus",
          "metadata": {
            "queueName": "my-queue",
            "namespace": "service-bus-namespace",
            "messageCount": "5"
          }
        }
      }
    ]
    ...
    
  3. Suchen Sie aus der KEDA-Scalerspezifikation die metadata-Werte.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  4. Fügen Sie in der ARM-Vorlage alle Metadatenwerte zum Abschnitt custom.metadata der Skalierungsregel hinzu.

    ...
    "rules": [
      {
        "name": "azure-servicebus-queue-rule",
        "custom": {
          "type": "azure-servicebus",
          "metadata": {
            "queueName": "my-queue",
            "namespace": "service-bus-namespace",
            "messageCount": "5"
          }
        }
      }
    ]
    ...
    

Authentifizierung

Ein KEDA-Scaler kann die Verwendung von geheimen Schlüsseln in einer TriggerAuthentication unterstützen, auf die von der Eigenschaft authenticationRef verwiesen wird. Sie können das TriggerAuthentication-Objekt der Skalierungsregel für Container Apps zuordnen.

Hinweis

Container Apps-Skalierungsregeln unterstützen nur geheime Verweise. Andere Authentifizierungstypen wie Podidentität werden nicht unterstützt.

  1. Finden Sie das TriggerAuthentication-Objekt, auf das die KEDA-ScaledObject-Spezifikation verweist.

  2. Suchen Sie anhand der KEDA-Spezifikation jedes secretTargetRef des TriggerAuthentication-Objekts und das zugehörige Geheimnis.

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secrets
      namespace: my-project
    type: Opaque
    data:
      connection-string-secret: <SERVICE_BUS_CONNECTION_STRING>
    ---
    apiVersion: keda.sh/v1alpha1
    kind: TriggerAuthentication
    metadata:
      name: azure-servicebus-auth
    spec:
      secretTargetRef:
      - parameter: connection
        name: my-secrets
        key: connection-string-secret
    ---
    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: azure-servicebus-queue-rule
      namespace: default
    spec:
      scaleTargetRef:
        name: my-scale-target
      triggers:
      - type: azure-servicebus
        metadata:
          queueName: my-queue
          namespace: service-bus-namespace
          messageCount: "5"
        authenticationRef:
            name: azure-servicebus-auth
    
  3. Fügen Sie in der ARM-Vorlage alle Einträge zum auth-Array der Skalierungsregel hinzu.

    1. Fügen Sie ein Geheimnis zum secrets-Array der Container App hinzu, das den geheimen Wert enthält.

    2. Setzen Sie den Wert der Eigenschaft triggerParameter auf den Wert der Eigenschaft key von TriggerAuthentication.

    3. Legen Sie den Wert der secretRef-Eigenschaft auf den Namen des Container Apps-Geheimnisses fest.

    {
      ...
      "resources": {
        ...
        "properties": {
          ...
          "configuration": {
            ...
            "secrets": [
              {
                "name": "connection-string-secret",
                "value": "<SERVICE_BUS_CONNECTION_STRING>"
              }
            ]
          },
          "template": {
            ...
            "scale": {
              "minReplicas": 0,
              "maxReplicas": 5,
              "rules": [
                {
                  "name": "azure-servicebus-queue-rule",
                  "custom": {
                    "type": "azure-servicebus",
                    "metadata": {
                      "queueName": "my-queue",
                      "namespace": "service-bus-namespace",
                      "messageCount": "5"
                    },
                    "auth": [
                      {
                        "secretRef": "connection-string-secret",
                        "triggerParameter": "connection"
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    Einige Scaler unterstützen Metadaten mit dem FromEnv-Suffix, um auf einen Wert in einer Umgebungsvariable zu verweisen. Container Apps untersucht den ersten Container, der in der ARM-Vorlage für die Umgebungsvariable aufgeführt ist.

    Weitere sicherheitsbezogene Informationen finden Sie im Abschnitt Überlegungen.

  1. Suchen Sie aus der KEDA-Scalerspezifikation den type-Wert.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. Legen Sie im CLI-Befehl den --scale-rule-type-Parameter auf den Spezifikationswert type fest.

    az containerapp create \
      --name <CONTAINER_APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --environment <ENVIRONMENT_NAME> \
      --image <CONTAINER_IMAGE_LOCATION>
      --min-replicas 0 \
      --max-replicas 5 \
      --secrets "connection-string-secret=<SERVICE_BUS_CONNECTION_STRING>" \
      --scale-rule-name azure-servicebus-queue-rule \
      --scale-rule-type azure-servicebus \
      --scale-rule-metadata "queueName=my-queue" \
                            "namespace=service-bus-namespace" \
                            "messageCount=5" \
      --scale-rule-auth "connection=connection-string-secret"
    
  3. Suchen Sie aus der KEDA-Scalerspezifikation die metadata-Werte.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  4. Legen Sie im CLI-Befehl den --scale-rule-metadata-Parameter auf die Metadatenwerte fest.

    Sie müssen die Werte aus einem YAML-Format in ein Schlüsselwertpaar umwandeln, um sie in der Befehlszeile zu verwenden. Trennen Sie jedes Schlüsselwertpaar durch ein Leerzeichen.

    az containerapp create \
      --name <CONTAINER_APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --environment <ENVIRONMENT_NAME> \
      --image <CONTAINER_IMAGE_LOCATION>
      --min-replicas 0 \
      --max-replicas 5 \
      --secrets "connection-string-secret=<SERVICE_BUS_CONNECTION_STRING>" \
      --scale-rule-name azure-servicebus-queue-rule \
      --scale-rule-type azure-servicebus \
      --scale-rule-metadata "queueName=my-queue" \
                            "namespace=service-bus-namespace" \
                            "messageCount=5" \
      --scale-rule-auth "connection=connection-string-secret"
    

Authentifizierung

Ein KEDA-Scaler kann die Verwendung von geheimen Schlüsseln in einer TriggerAuthentication unterstützen, auf die von der authenticationRef-Eigenschaft verwiesen wird. Sie können das TriggerAuthentication-Objekt der Skalierungsregel für Container Apps zuordnen.

Hinweis

Container Apps-Skalierungsregeln unterstützen nur geheime Verweise. Andere Authentifizierungstypen wie Podidentität werden nicht unterstützt.

  1. Finden Sie das TriggerAuthentication-Objekt, auf das die KEDA-ScaledObject-Spezifikation verweist. Identifizieren Sie jedes secretTargetRef des TriggerAuthentication-Objekts.

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secrets
      namespace: my-project
    type: Opaque
    data:
      connection-string-secret: <SERVICE_BUS_CONNECTION_STRING>
    ---
    apiVersion: keda.sh/v1alpha1
    kind: TriggerAuthentication
    metadata:
      name: azure-servicebus-auth
    spec:
      secretTargetRef:
      - parameter: connection
        name: my-secrets
        key: connection-string-secret
    ---
    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: azure-servicebus-queue-rule
      namespace: default
    spec:
      scaleTargetRef:
        name: my-scale-target
      triggers:
      - type: azure-servicebus
        metadata:
          queueName: my-queue
          namespace: service-bus-namespace
          messageCount: "5"
        authenticationRef:
            name: azure-servicebus-auth
    
  2. Erstellen Sie in Ihrer Container App die Geheimnisse, die den secretTargetRef-Eigenschaften entsprechen.

  3. Legen Sie im CLI-Befehl Parameter für jeden secretTargetRef-Eintrag fest.

    1. Erstellen Sie einen geheimen Eintrag mit dem --secrets-Parameter. Wenn mehrere Geheimnisse vorhanden sind, trennen Sie sie durch ein Leerzeichen.

    2. Erstellen Sie einen Authentifizierungseintrag mit dem --scale-rule-auth-Parameter. Wenn mehrere Einträge vorhanden sind, trennen Sie sie durch ein Leerzeichen.

    az containerapp create \
      --name <CONTAINER_APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --environment <ENVIRONMENT_NAME> \
      --image <CONTAINER_IMAGE_LOCATION>
      --min-replicas 0 \
      --max-replicas 5 \
      --secrets "connection-string-secret=<SERVICE_BUS_CONNECTION_STRING>" \
      --scale-rule-name azure-servicebus-queue-rule \
      --scale-rule-type azure-servicebus \
      --scale-rule-metadata "queueName=my-queue" \
                            "namespace=service-bus-namespace" \
                            "messageCount=5" \
      --scale-rule-auth "connection=connection-string-secret"
    
  1. Navigieren Sie im Azure-Portal zu Ihrer Container App.

  2. Wählen Sie Skalieren aus.

  3. Wählen Sie Bearbeiten und bereitstellen aus.

  4. Wählen Sie die Registerkarte Skalieren und Replikate aus.

  5. Wählen Sie den minimalen und maximalen Replikatbereich aus.

    Screenshot: Skalierungsbereich-Schieberegler für Azure Container Apps

  6. Wählen Sie Hinzufügen aus.

  7. Geben Sie im Feld Regelname einen Namen für die Regel ein.

  8. Wählen Sie in der Dropdownliste Typ die Option Benutzerdefiniert aus.

  9. Suchen Sie aus der KEDA-Scalerspezifikation den type-Wert.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  10. Geben Sie im Feld Benutzerdefinierter Regeltyp den Skalierungswert type ein.

  11. Suchen Sie aus der KEDA-Scalerspezifikation die metadata-Werte.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  12. Suchen Sie im Portal den Abschnitt Metadaten, und wählen Sie Hinzufügen aus. Geben Sie den Namen und Wert für jedes Element im Metadatenabschnitt der KEDA-Spezifikation ScaledObject ein.

Authentifizierung

Ein KEDA-Scaler kann die Verwendung von geheimen Schlüsseln in einer TriggerAuthentication unterstützen, auf die von der authenticationRef-Eigenschaft verwiesen wird. Sie können das TriggerAuthentication-Objekt der Skalierungsregel für Container Apps zuordnen.

Hinweis

Container Apps-Skalierungsregeln unterstützen nur geheime Verweise. Andere Authentifizierungstypen wie Podidentität werden nicht unterstützt.

  1. Erstellen Sie in Ihrer Container App die Geheimnisse, auf die Sie verweisen möchten.

  2. Finden Sie das TriggerAuthentication-Objekt, auf das die KEDA-ScaledObject-Spezifikation verweist. Identifizieren Sie jedes secretTargetRef des TriggerAuthentication-Objekts.

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secrets
      namespace: my-project
    type: Opaque
    data:
      connection-string-secret: <SERVICE_BUS_CONNECTION_STRING>
    ---
    apiVersion: keda.sh/v1alpha1
    kind: TriggerAuthentication
    metadata:
      name: azure-servicebus-auth
    spec:
      secretTargetRef:
      - parameter: connection
        name: my-secrets
        key: connection-string-secret
    ---
    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: azure-servicebus-queue-rule
      namespace: default
    spec:
      scaleTargetRef:
        name: my-scale-target
      triggers:
      - type: azure-servicebus
        metadata:
          queueName: my-queue
          namespace: service-bus-namespace
          messageCount: "5"
        authenticationRef:
            name: azure-servicebus-auth
    
  3. Wählen Sie im Abschnitt Authentifizierung die Option Hinzufügen aus, um einen Eintrag für jeden KEDA-Parameter secretTargetRef zu erstellen.

Standard-Skalierungsregel

Wenn Sie keine Skalierungsregel erstellen, wird die Standard-Skalierungsregel auf Ihre Container App angewendet.

Trigger Mindestanzahl Replikate Maximale Anzahl Replikate
HTTP 0 10

Wichtig

Stellen Sie sicher, dass Sie eine Skalierungsregel erstellen oder minReplicas auf 1 oder mehr setzen, wenn Sie den Eingang nicht aktivieren. Wenn der Eingang deaktiviert ist und Sie keine minReplicas- oder benutzerdefinierte Skalierungsregel definieren, wird Ihre Container App auf Null skaliert und hat keine Möglichkeit, wieder zu starten.

Skalierungsverhalten

Das Skalierungsverhalten weist die folgenden Standardwerte auf:

Parameter Wert
Abrufintervall 30 Sekunden
Abkühlphase 300 Sekunden
Hochskalierungsfenster 0 Sekunden
Herunterskalierungsfenster 300 Sekunden
Hochskalierungsschritt 1, 4, 100 % des aktuellen Werts
Herunterskalierungsschritt 100 % des aktuellen Werts
Skalierungsalgorithmus desiredReplicas = ceil(currentMetricValue / targetMetricValue)
  • Abfrageintervall ist, wie häufig Ereignisquellen von KEDA abgefragt werden. Dieser Wert gilt nicht für HTTP- und TCP-Skalierungsregeln.
  • Abkühlzeitraum ist, wie lange nach dem letzten Ereignis beobachtet wurde, bevor die Anwendung auf die Mindestreplikatanzahl skaliert wird.
  • Skalierungsstabilisierungsfenster ist, wie lange gewartet werden muss, bevor eine Skalierungsentscheidung durchgeführt wird, nachdem die Skalierungsbedingungen erfüllt wurden.
  • Verkleinerstabilisierungsfenster ist, wie lange gewartet werden muss, bevor eine Scale down-Entscheidung durchgeführt wird, nachdem die Bedingungen für die Skalierung nach unten erfüllt wurden.
  • Skalierungsschritt ist die Häufigkeit, mit der neue Instanzen hinzugefügt werden. Er beginnt mit 1, 4, 8, 16, 32, … bis zur konfigurierten maximalen Anzahl der Replikate.
  • Herunterskalierungsschritt ist die Rate, mit der Replikate entfernt werden. Standardmäßig werden 100 % der Replikate entfernt, die heruntergefahren werden müssen.
  • Skalierungsalgorithmus ist die Formel, die zum Berechnen der aktuellen gewünschten Anzahl von Replikaten verwendet wird.

Beispiel

Für die folgende Skalierungsregel:

"minReplicas": 0,
"maxReplicas": 20,
"rules": [
  {
    "name": "azure-servicebus-queue-rule",
    "custom": {
      "type": "azure-servicebus",
      "metadata": {
        "queueName": "my-queue",
        "namespace": "service-bus-namespace",
        "messageCount": "5"
      }
    }
  }
]

Beginnend mit einer leeren Warteschlange führt KEDA die folgenden Schritte in einem Skalierungsszenario aus:

  1. Überprüfen Sie my-queue alle 30 Sekunden.
  2. Wenn die Warteschlangenlänge gleich 0 ist, wechseln Sie zurück zu (1).
  3. Wenn die Länge der Warteschlange > 0 ist, skalieren Sie die Anwendung auf 1.
  4. Wenn die Warteschlangenlänge 50 ist, berechnen Sie desiredReplicas = ceil(50/5) = 10.
  5. App skalieren auf min(maxReplicaCount, desiredReplicas, max(4, 2*currentReplicaCount))
  6. Zurück zu (1).

Wenn die App auf die maximale Replikatanzahl von 20 skaliert wurde, durchläuft die Skalierung dieselben vorherigen Schritte. Eine Herunterskalierung erfolgt nur, wenn die Bedingung für 300 Sekunden erfüllt wurde (Stabilisierungsfenster für Herunterskalierung). Sobald die Warteschlangenlänge 0 ist, wartet KEDA 300 Sekunden (Abkühlzeitraum), bevor die App auf 0 skaliert wird.

Überlegungen

  • Im Mehrfachrevisionsmodus wird durch das Hinzufügen eines neuen Skalierungsgtriggers eine neue Revision Ihrer Anwendung erstellt, aber Ihre alte Revision bleibt mit den alten Skalierungsregeln verfügbar. Verwenden Sie die Seite Revisionsverwaltung, um Datenverkehrszuordnungen zu verwalten.

  • Es entstehen keine Nutzungsgebühren, wenn eine Anwendung auf Null skaliert wird. Weitere Preisinformationen finden Sie unter Abrechnung in Azure Container Apps.

  • Sie müssen den Schutz von Daten für alle .NET-Apps in Azure Container Apps aktivieren. Weitere Informationen finden Sie unter Bereitstellen und Skalieren einer ASP.NET Core-App in Azure Container Apps.

Bekannte Einschränkungen

  • Vertikale Skalierung wird nicht unterstützt.

  • Replikatmengen sind eine Zielmenge, keine Garantie.

  • Wenn Sie Dapr-Akteure zum Verwalten von Zuständen verwenden, sollten Sie bedenken, dass die Skalierung auf Null nicht unterstützt wird. Dapr verwendet virtuelle Akteure, um asynchrone Aufrufe zu verwalten, was bedeutet, dass deren In-Memory-Darstellung nicht an ihre Identität oder Lebensdauer gebunden ist.

Nächste Schritte