Ange skalningsregler i Azure Container Apps

Azure Container Apps hanterar automatisk horisontell skalning via en uppsättning deklarativa skalningsregler. När en containerappsrevision skalas ut skapas nya instanser av revisionen på begäran. Dessa instanser kallas repliker.

När du lägger till eller redigerar skalningsregler skapas en ny revision av containerappen. En revision är en oföränderlig ögonblicksbild av containerappen. Information om vilka typer av ändringar som utlöser en ny revision finns i revisionsändringstyper.

Händelsedrivna Container Apps-jobb använder skalningsregler för att utlösa körningar baserat på händelser.

Skalningsdefinition

Skalning är en kombination av gränser, regler och beteende.

  • Gränser definierar det minsta och högsta möjliga antalet repliker per revision när containerappen skalar.

    Skalningsgräns Standardvärde Minvärde Maxvärde
    Minsta antal repliker per revision 0 0 Maximalt antal konfigurerbara repliker är 300 i Azure-portalen och 1 000 i Azure CLI.
    Maximalt antal repliker per revision 10 1 Maximalt antal konfigurerbara repliker är 300 i Azure-portalen och 1 000 i Azure CLI.
  • Regler är de kriterier som används av Container Apps för att bestämma när repliker ska läggas till eller tas bort.

    Skalningsregler implementeras som HTTP, TCP (Transmission Control Protocol) eller anpassade.

  • Beteende är en kombination av regler och gränser för att fastställa skalningsbeslut över tid.

    Skalningsbeteende förklarar hur skalningsbeslut fattas.

När du definierar dina skalningsregler är det viktigt att tänka på följande:

  • Du debiteras inte användningsavgifter om containerappen skalas till noll.
  • Repliker som inte bearbetas, men som finns kvar i minnet, kan faktureras med en lägre "inaktiv" hastighet. Mer information finns i Fakturering.
  • Om du vill se till att en instans av revisionen alltid körs anger du det minsta antalet repliker till 1 eller högre.

Skalningsregler

Skalning drivs av tre olika kategorier av utlösare:

  • HTTP: Baserat på antalet samtidiga HTTP-begäranden till din revision.
  • TCP: Baserat på antalet samtidiga TCP-anslutningar till revisionen.
  • Anpassad: Baserat på PROCESSOR, minne eller händelsedrivna datakällor som stöds, till exempel:
    • Azure Service Bus
    • Azure Event Hubs
    • Apache Kafka
    • Redis

Om du definierar mer än en skalningsregel börjar containerappen skalas när det första villkoret för regler uppfylls.

HTTP

Med en HTTP-skalningsregel har du kontroll över tröskelvärdet för samtidiga HTTP-begäranden som avgör hur containerappens revision skalar. Var 15:e sekund beräknas antalet samtidiga begäranden som antalet begäranden under de senaste 15 sekunderna dividerat med 15. Container Apps-jobb stöder inte HTTP-skalningsregler.

I följande exempel skalar revisionen ut upp till fem repliker och kan skalas in till noll. Skalningsegenskapen är inställd på 100 samtidiga begäranden per sekund.

Exempel

Avsnittet http definierar en HTTP-skalningsregel.

Skalningsegenskap beskrivning Standardvärde Minvärde Maxvärde
concurrentRequests När antalet HTTP-begäranden överskrider det här värdet läggs en annan replik till. Repliker fortsätter att lägga till i poolen upp till mängden maxReplicas . 10 1 saknas
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "http-rule",
            "http": {
              "metadata": {
                "concurrentRequests": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Kommentar

properties.configuration.activeRevisionsMode Ange egenskapen för containerappen till single, när du använder icke-HTTP-händelseskalningsregler.

Definiera en HTTP-skalningsregel med parametern --scale-rule-http-concurrency i create kommandona eller update .

CLI-parameter beskrivning Standardvärde Minvärde Maxvärde
--scale-rule-http-concurrency När antalet samtidiga HTTP-begäranden överskrider det här värdet läggs en annan replik till. Repliker fortsätter att lägga till i poolen upp till mängden max-replicas . 10 1 saknas
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. Gå till din containerapp i Azure-portalen

  2. Välj Skala.

  3. Välj Redigera och distribuera.

  4. Välj fliken Skala .

  5. Välj det minsta och högsta replikintervallet.

    Skärmbild av skjutreglaget för Azure Container Apps-skalningsintervall.

  6. Markera Lägga till.

  7. I rutan Regelnamn anger du ett regelnamn.

  8. I listrutan Typ väljer du HTTP-skalning.

  9. I rutan Samtidiga begäranden anger du önskat antal samtidiga begäranden för containerappen.

TCP

Med en TCP-skalningsregel har du kontroll över tröskelvärdet för samtidiga TCP-anslutningar som avgör hur appen skalar. Var 15:e sekund beräknas antalet samtidiga anslutningar som antalet anslutningar under de senaste 15 sekunderna dividerat med 15. Container Apps-jobb stöder inte TCP-skalningsregler.

I följande exempel skalar containerappens revision ut upp till fem repliker och kan skalas in till noll. Skalningströskelvärdet är inställt på 100 samtidiga anslutningar per sekund.

Exempel

Avsnittet tcp definierar en TCP-skalningsregel.

Skalningsegenskap beskrivning Standardvärde Minvärde Maxvärde
concurrentConnections När antalet samtidiga TCP-anslutningar överskrider det här värdet läggs en annan replik till. Repliker fortsätter att läggas till upp till mängden maxReplicas när antalet samtidiga anslutningar ökar. 10 1 saknas
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "tcp-rule",
            "tcp": {
              "metadata": {
                "concurrentConnections": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Definiera en TCP-skalningsregel med hjälp av parametern --scale-rule-tcp-concurrency i create kommandona eller update .

CLI-parameter beskrivning Standardvärde Minvärde Maxvärde
--scale-rule-tcp-concurrency När antalet samtidiga TCP-anslutningar överskrider det här värdet läggs en annan replik till. Repliker fortsätter att läggas till upp till mängden max-replicas när antalet samtidiga anslutningar ökar. 10 1 saknas
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

Stöds inte i Azure-portalen. Använd Azure CLI eller Azure Resource Manager för att konfigurera en TCP-skalningsregel.

Anpassat

Du kan skapa en anpassad skalningsregel för Container Apps baserat på valfri ScaledObject-baserad KEDA-skalning med följande standardvärden:

Defaults Sekunder
Avsökningsintervall 30
Nedkylningsperiod 300

För händelsedrivna Container Apps-jobb kan du skapa en anpassad skalningsregel baserat på alla ScaledJob-baserade KEDA-skalare.

I följande exempel visas hur du skapar en anpassad skalningsregel.

Exempel

Det här exemplet visar hur du konverterar en Azure Service Bus-skalningsregel till en skalningsregel för Container Apps, men du använder samma process för alla andra ScaledObject-baserade KEDA-skalningsspecifikationer.

För autentisering konverteras PARAMETRAR för KEDA-skalningsautentisering till Container Apps-hemligheter.

Följande procedur visar hur du konverterar en KEDA-skalningsregel till en skalningsregel för Container App. Det här kodfragmentet är ett utdrag av en ARM-mall som visar var varje avsnitt passar i kontexten för den övergripande mallen.

{
  ...
  "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>"
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

Se det här utdraget för kontext om hur exemplen nedan passar i ARM-mallen.

Först definierar du skalningsregelns typ och metadata.

  1. Från KEDA-skalningsspecifikationen hittar du type värdet.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. I ARM-mallen anger du skalningsvärdet type i custom.type egenskapen för skalningsregeln.

    ...
    "rules": [
      {
        "name": "azure-servicebus-queue-rule",
        "custom": {
          "type": "azure-servicebus",
          "metadata": {
            "queueName": "my-queue",
            "namespace": "service-bus-namespace",
            "messageCount": "5"
          }
        }
      }
    ]
    ...
    
  3. Från KEDA-skalningsspecifikationen hittar du metadata värdena.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  4. I ARM-mallen lägger du till alla metadatavärden i custom.metadata avsnittet i skalningsregeln.

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

Autentisering

En KEDA-skalning stöder användning av hemligheter i en TriggerAuthentication som refereras av authenticationRef egenskapen. Du kan mappa objektet TriggerAuthentication till skalningsregeln containerappar.

Kommentar

Skalningsregler för Container Apps stöder endast hemliga referenser. Andra autentiseringstyper som poddidentitet stöds inte.

  1. Hitta objektet som TriggerAuthentication refereras till av KEDA-specifikationen ScaledObject .

  2. Från KEDA-specifikationen TriggerAuthentication hittar du varje secretTargetRef objekt och dess associerade hemlighet.

    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. I ARM-mallen lägger du till alla poster i auth skalningsregelns matris.

    1. Lägg till en hemlighet i containerappens secrets matris som innehåller det hemliga värdet.

    2. Ange värdet för triggerParameter egenskapen till värdet för TriggerAuthenticationegenskapen 's key .

    3. Ange värdet för secretRef egenskapen till namnet på Container Apps-hemligheten.

    {
      ...
      "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"
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    }
    

    Vissa skalare stöder metadata med suffixet FromEnv för att referera till ett värde i en miljövariabel. Container Apps tittar på den första containern som anges i ARM-mallen för miljövariabeln.

    Mer säkerhetsrelaterad information finns i avsnittet överväganden.

  1. Från KEDA-skalningsspecifikationen hittar du type värdet.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. I CLI-kommandot anger du parametern --scale-rule-type till specifikationsvärdet type .

    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. Från KEDA-skalningsspecifikationen hittar du metadata värdena.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  4. I CLI-kommandot anger du parametern --scale-rule-metadata till metadatavärdena.

    Du måste transformera värdena från ett YAML-format till ett nyckel/värde-par för användning på kommandoraden. Avgränsa varje nyckel/värde-par med ett blanksteg.

    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"
    

Autentisering

En KEDA-skalning stöder användning av hemligheter i en TriggerAuthentication som refereras av egenskapen authenticationRef. Du kan mappa objektet TriggerAuthentication till skalningsregeln containerappar.

Kommentar

Skalningsregler för Container Apps stöder endast hemliga referenser. Andra autentiseringstyper som poddidentitet stöds inte.

  1. Hitta objektet som TriggerAuthentication refereras till av KEDA-specifikationen ScaledObject . Identifiera vart och secretTargetRef ett av objekten TriggerAuthentication .

    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. Skapa de hemligheter som matchar egenskaperna i containerappen.secretTargetRef

  3. I CLI-kommandot anger du parametrar för varje secretTargetRef post.

    1. Skapa en hemlig post med parametern --secrets . Om det finns flera hemligheter separerar du dem med ett blanksteg.

    2. Skapa en autentiseringspost med parametern --scale-rule-auth . Om det finns flera poster separerar du dem med ett blanksteg.

    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. Gå till containerappen i Azure-portalen.

  2. Välj Skala.

  3. Välj Redigera och distribuera.

  4. Välj fliken Skala och repliker .

  5. Välj det minsta och högsta replikintervallet.

    Skärmbild av skjutreglaget för Azure Container Apps-skalningsintervall.

  6. Markera Lägga till.

  7. I rutan Regelnamn anger du ett regelnamn.

  8. I listrutan Typ väljer du Anpassad.

  9. Från KEDA-skalningsspecifikationen hittar du type värdet.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  10. I rutan Anpassad regeltyp anger du skalningsvärdet type .

  11. Från KEDA-skalningsspecifikationen hittar du metadata värdena.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  12. I portalen letar du upp avsnittet Metadata och väljer Lägg till. Ange namn och värde för varje objekt i avsnittet KEDA-specifikationsmetadata ScaledObject .

Autentisering

En KEDA-skalning stöder användning av hemligheter i en TriggerAuthentication som refereras av egenskapen authenticationRef. Du kan mappa objektet TriggerAuthentication till skalningsregeln containerappar.

Kommentar

Skalningsregler för Container Apps stöder endast hemliga referenser. Andra autentiseringstyper som poddidentitet stöds inte.

  1. Skapa de hemligheter som du vill referera till i containerappen.

  2. Hitta objektet som TriggerAuthentication refereras till av KEDA-specifikationen ScaledObject . Identifiera vart och secretTargetRef ett av objekten TriggerAuthentication .

    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. I avsnittet Autentisering väljer du Lägg till för att skapa en post för varje KEDA-parameter secretTargetRef .

Standardskalningsregel

Om du inte skapar en skalningsregel tillämpas standardskalningsregeln på containerappen.

Utlösare Minsta repliker Maximalt antal repliker
HTTP 0 10

Viktigt!

Se till att du skapar en skalningsregel eller anger minReplicas till 1 eller mer om du inte aktiverar ingress. Om ingress är inaktiverad och du inte definierar en minReplicas eller en anpassad skalningsregel skalas containerappen till noll och har inget sätt att börja säkerhetskopiera.

Skalningsbeteende

Skalningsbeteendet har följande standardvärden:

Parameter Värde
Avsökningsintervall 30 sekunder
Nedkylningsperiod 300 sekunder
Skala upp stabiliseringsfönstret 0 sekunder
Skala ned stabiliseringsfönstret 300 sekunder
Uppskalningssteg 1, 4, 100% av strömmen
Nedskalningssteg 100 % av den aktuella
Skalningsalgoritm desiredReplicas = ceil(currentMetricValue / targetMetricValue)
  • Avsökningsintervall är hur ofta händelsekällor efterfrågas av KEDA. Det här värdet gäller inte för HTTP- och TCP-skalningsregler.
  • Nedkylningsperioden är hur lång tid efter att den senaste händelsen observerades innan programmet skalar ned till det minsta antalet repliker.
  • Skala upp stabiliseringsfönstret är hur lång tid det är att vänta innan du utför ett uppskalningsbeslut när uppskalningsvillkoren har uppfyllts.
  • Skala ned stabiliseringsfönstret är hur länge du ska vänta innan du utför ett nedskalningsbeslut när nedskalningsvillkoren har uppfyllts.
  • Uppskalningssteget är den hastighet som nya instanser läggs till i. Det börjar med 1, 4, 8, 16, 32, ... upp till det konfigurerade maximala antalet repliker.
  • Nedskalningssteget är den hastighet med vilken repliker tas bort. Som standard tas 100 % av replikerna som behöver stängas av bort.
  • Skalningsalgoritmen är den formel som används för att beräkna det aktuella önskade antalet repliker.

Exempel

För följande skalningsregel:

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

När appen skalar ut börjar KEDA med en tom kö och utför följande steg:

  1. Kontrollera my-queue var 30:e sekund.
  2. Om kölängden är lika med 0 går du tillbaka till (1).
  3. Om kölängden är > 0 skalar du appen till 1.
  4. Om kölängden är 50 beräknar du desiredReplicas = ceil(50/5) = 10.
  5. Skala appen till min(maxReplicaCount, desiredReplicas, max(4, 2*currentReplicaCount))
  6. Gå tillbaka till (1).

Om appen skalades till det maximala antalet repliker på 20 går skalningen igenom samma föregående steg. Nedskalning sker endast om villkoret var uppfyllt i 300 sekunder (skala ned stabiliseringsfönstret). När kölängden är 0 väntar KEDA i 300 sekunder (nedkylningsperiod) innan appen skalas till 0.

Att tänka på

Kända begränsningar

  • Lodrät skalning stöds inte.

  • Replikkvantiteter är ett målbelopp, inte en garanti.

  • Om du använder Dapr-aktörer för att hantera tillstånd bör du tänka på att skalning till noll inte stöds. Dapr använder virtuella aktörer för att hantera asynkrona anrop, vilket innebär att deras minnesinterna representation inte är kopplad till deras identitet eller livslängd.

Nästa steg