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 skapar plattformen nya instanser av revisionen på begäran. Dessa instanser kallas repliker.

För att stödja det här skalningsbeteendet använder Azure Container Apps KEDA (Kubernetes Event-driven Autoscaling). KEDA stöder skalning mot en mängd olika mått som HTTP-begäranden, kömeddelanden, PROCESSOR- och minnesbelastning och händelsekällor som Azure Service Bus, Azure Event Hubs, Apache Kafka och Redis. Mer information finns i Scalers i KEDA-dokumentationen.

När du lägger till eller redigerar skalningsregler skapar du en ny revision av containerappen. En revision är en oföränderlig ögonblicksbild av din containerapp. 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 starta 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 1 000.
    Maximalt antal repliker per revision 10 1 Maximalt antal konfigurerbara repliker är 1 000.
  • 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.

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

  • 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 bör du tänka på följande:

  • Du debiteras inte användningsavgifter om containerappen skalas ner 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.
  • Under plattformsuppgraderingar eller underhåll kan du tillfälligt se fler repliker än förväntat. Container Apps säkerställer att din produktionsarbetsbelastning inte påverkas av förvärmning av nya repliker innan trafik flyttas, ungefär som standardbeteendet för Kubernetes. De extra replikerna tas bort automatiskt när åtgärden är avslutad.

Skalningsregler

Tre kategorier av utlösare avgör hur skalning sker:

  • HTTP: Baserat på antalet samtidiga HTTP-begäranden till din revision.
  • TCP: Baserat på antalet samtidiga TCP-anslutningar till revisionen.
  • Anpassad: Baserat på anpassade mått som:
    • CPU (centralenhet)
    • Minne
    • Händelsedrivna datakällor som stöds:
      • 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 en regel uppfylls.

Anteckning

Om du använder Functions i Container Apps konfigurerar standardupplevelsen automatiskt skalningsregler baserat på funktionsutlösare och bindningar. Azure-portalen inaktiverar knappen Lägg till skalningsregler för dessa appar. Om du behöver kunddefinierade regler använder du allowScalingRuleOverride enligt beskrivningen i Override automatiskt genererade KEDA-skalningsregler för Azure Functions i Container Apps.

HTTP

När du använder en HTTP-skalningsregel styr du 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ägger appen till en annan replik. Appen fortsätter att lägga till repliker upp till mängden maxReplicas . 10 1 saknas
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
  ...
  properties: {
    ...
    template: {
      ...
      scale: {
        maxReplicas: 0
        minReplicas: 5
        rules: [
          {
            name: 'http-rule'
            http: {
              metadata: {
                concurrentRequests: '100'
              }
            }
          }
        ]
      }
    }
  }
}

Anteckning

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

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ägger appen till en annan replik. Appen fortsätter att lägga till replikor upp till antalet maxReplicas. 10 1 saknas
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "http-rule",
            "http": {
              "metadata": {
                "concurrentRequests": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Anteckning

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

Definiera en HTTP-skalningsregel med hjälp av 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ägger appen till en annan replik. Appen fortsätter att lägga till repliker 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 portal.

  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 Azure Container Apps skjutreglage för 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 det antal samtidiga begäranden som du vill ha för containerappen.

TCP

När du använder en TCP-skalningsregel styr du tröskelvärdet för samtidiga TCP-anslutningar som avgör hur appen skalar. Var 15:e sekund beräknar systemet 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 skalas containerappens revision ut till upp till fem repliker och kan skalas ned 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ägger systemet till en annan replik. Systemet lägger hela tiden till repliker upp till mängden maxReplicas när antalet samtidiga anslutningar ökar. 10 1 saknas
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
  ...
  properties: {
    ...
    template: {
      ...
      scale: {
        maxReplicas: 0
        minReplicas: 5
        rules: [
          {
            name: 'tcp-rule'
            http: {
              metadata: {
                concurrentConnections: '100'
              }
            }
          }
        ]
      }
    }
  }
}

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ägger systemet till en annan replik. Systemet lägger hela tiden till repliker 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ägger systemet till en annan replik. Systemet lägger hela tiden till repliker 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 \
  --transport tcp \
  --ingress <external/internal> \
  --target-port <CONTAINER_TARGET_PORT> \
  --scale-rule-name azure-tcp-rule \
  --scale-rule-type tcp \
  --scale-rule-tcp-concurrency 100

Azure-portalen stöder inte den här funktionen. Använd Azure CLI, Azure Resource Manager eller Bicep för att konfigurera en TCP-skalningsregel.

Anpassat

Skapa en anpassad skalningsregel för Container Apps baserat på valfri ScaledObject-baseradKEDA-skalning med hjälp av följande standardvärden:

Standardvärde Sekunder
Avsökningsintervall 30
Nedkylningsperiod 300

Anteckning

Kylperioden gäller endast när man skalar in från den sista repliken till 0. Nedkylningsperioden påverkar inte skalningen eftersom andra repliker tas bort.

För händelsedrivna Container Apps-jobb skapar du 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 scaler till en skalningsregel för Container Apps, men du använder samma process för andra ScaledObject-baserad KEDA-skalningspecifikation.

För autentisering tar autentiseringsparametrar för KEDA-skalare hemligheter från Container Apps eller hanterad identitet.

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 Bicep-mall som visar var varje avsnitt passar i kontexten för den övergripande mallen.

resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
  ...
  properties: {
    ...
    configuration: {
      ...
      secrets: [
        {
          name: '<NAME>'
          value: '<VALUE>'
        }
      ]
    }
    template: {
      ...
      scale: {
        maxReplicas: 0
        minReplicas: 5
        rules: [
          {
            name: '<RULE_NAME>'
            custom: {
              metadata: {
                ...
              }
              auth: [
                {
                  secretRef: '<NAME>'
                  triggerParameter: '<PARAMETER>'
                }
              ]
            }
          }
        ]
      }
    }
  }
}

Se det här utdraget för sammanhang om hur följande exempel får plats i mallen Bicep.

Definiera först 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 Bicep-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 Bicep-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

Skalningsregler för Container Apps stöder hemligheterbaserad autentisering. Skalningsregler för Azure resurser, inklusive Azure Queue Storage, Azure Service Bus och Azure Event Hubs, stöder även hanterad identitet. Använd där det är möjligt hanterad identitetsautentisering för att undvika att lagra hemligheter i appen.

Använda hemligheter

Om du vill använda hemligheter för autentisering skapar du en hemlighet i containerappens secrets matris. Använd det hemliga värdet i matrisen auth för skalningsregeln.

KEDA-skalare kan använda hemligheter i en TriggerAuthentication som authenticationRef egenskapen refererar till. Du kan mappa TriggerAuthentication-objektet till skalningsregeln för Container Apps.

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

  2. Hitta varje TriggerAuthentication och dess associerade hemlighet i secretTargetRef-objektet.

    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 Bicep-mallen för varje hemlig kod:

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

    2. Lägg till en post i matrisen auth för skalningsregeln.

      1. Ange värdet för triggerParameter-egenskapen till värdet för secretTargetRef:s parameter-egenskap.

      2. Ange värdet för egenskapen secretRef till namnet på secretTargetRefs key-egenskap.

        resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
          ...
          properties: {
            ...
            configuration: {
              ...
              secrets: [
                {                                          ⬅️
                  name: 'connection-string-secret'         ⬅️
                  value: '<SERVICE_BUS_CONNECTION_STRING>' ⬅️
                }                                          ⬅️
              ]
            }
            template: {
              ...
              scale: {
                maxReplicas: 0
                minReplicas: 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.

Använda hanterad identitet

Skalningsregler för Container Apps kan använda hanterad identitet för att autentisera med Azure tjänster. Följande Bicep-mall skickar in systembaserad hanterad identitet för att autentisera för en Azure Queue Scaler.

Innan du använder följande kod ersätter du platshållarna som omges av <> med dina värden.

scale: {
  minReplicas: 0
  maxReplicas: 4
  rules: [
    {
      name: 'azure-queue'
      custom: {
        type: 'azure-queue'
        metadata: {
          accountName: '<ACCOUNT_NAME>'
          queueName: '<QUEUE_NAME>'
          queueLength: '1'
        },
        identity: 'system'
      }
    }
  ]
}

Mer information om hur du använder hanterad identitet med skalningsregler finns i Hanterad identitet.

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 följande exempel passar i ARM-mallen.

Definiera först 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

Skalningsregler för Container Apps stöder hemligheterbaserad autentisering. Skalningsregler för Azure resurser, inklusive Azure Queue Storage, Azure Service Bus och Azure Event Hubs, stöder även hanterad identitet. Använd där det är möjligt hanterad identitetsautentisering för att undvika att lagra hemligheter i appen.

Använda hemligheter

Om du vill använda hemligheter för autentisering skapar du en hemlighet i containerappens secrets matris. Använd det hemliga värdet i matrisen auth för skalningsregeln.

KEDA-skalare kan använda hemligheter i en TriggerAuthentication som authenticationRef egenskapen refererar till. Du kan mappa TriggerAuthentication-objektet till skalningsregeln för Container Apps.

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

  2. Hitta varje TriggerAuthentication och dess associerade hemlighet i secretTargetRef-objektet.

    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 för varje hemlighet:

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

    2. Lägg till en post i matrisen auth för skalningsregeln.

      1. Ange värdet för triggerParameter-egenskapen till värdet för secretTargetRef:s parameter-egenskap.

      2. Ange värdet för egenskapen secretRef till namnet på secretTargetRefs key-egenskap.

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

Använda hanterad identitet

Skalningsregler för Container Apps kan använda hanterad identitet för att autentisera med Azure tjänster. Följande ARM-mall skickar in systemtilldelad hanterad identitet för att autentisera för en Azure queue scaler.

Innan du använder följande kod ersätter du platshållarna som omges av <> med dina värden.

"scale": {
  "minReplicas": 0,
  "maxReplicas": 4,
  "rules": [
    {
      "name": "azure-queue",
      "custom": {
        "type": "azure-queue",
        "metadata": {
          "accountName": "<ACCOUNT_NAME>",
          "queueName": "<QUEUE_NAME>",
          "queueLength": "1"
        },
        "identity": "system"
      }
    }
  ]
}

Mer information om hur du använder hanterad identitet med skalningsregler finns i Hanterad identitet.

  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.

    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

Skalningsregler för Container Apps stöder hemligheterbaserad autentisering. Skalningsregler för Azure resurser, inklusive Azure Queue Storage, Azure Service Bus och Azure Event Hubs, stöder även hanterad identitet. Använd där det är möjligt hanterad identitetsautentisering för att undvika att lagra hemligheter i appen.

Använda hemligheter

Om du vill konfigurera hemligheterbaserad autentisering för en skalningsregel för Container Apps konfigurerar du hemligheterna i containerappen och refererar till dem i skalningsregeln.

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

  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 hemligheter i din containerapp som matcharsecretTargetRef egenskaperna.

  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, separera 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"                ⬅️
    

Använda hanterad identitet

Skalningsregler för Container Apps kan använda hanterad identitet för att autentisera med Azure tjänster. Följande kommando skapar en containerapp med en användartilldelad hanterad identitet och använder den för att autentisera för en Azure Queue Scaler.

Innan du använder följande kod ersätter du platshållarna som omges av <> med dina värden.

az containerapp create \
  --resource-group <RESOURCE_GROUP> \
  --name <APP_NAME> \
  --environment <ENVIRONMENT_ID> \
  --user-assigned <USER_ASSIGNED_IDENTITY_ID> \
  --scale-rule-name azure-queue \
  --scale-rule-type azure-queue \
  --scale-rule-metadata "accountName=<AZURE_STORAGE_ACCOUNT_NAME>" "queueName=queue1" "queueLength=1" \
  --scale-rule-identity <USER_ASSIGNED_IDENTITY_ID>
  1. Gå till din containerapp i Azure portal.

  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 Azure Container Apps skjutreglage för 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

Skalningsregler för Container Apps stöder hemligheterbaserad autentisering. Skalningsregler för Azure resurser, inklusive Azure Queue Storage, Azure Service Bus och Azure Event Hubs, stöder även hanterad identitet. Använd där det är möjligt hanterad identitetsautentisering för att undvika att lagra hemligheter i appen.

Använda hemligheter

  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 .

Använda hanterad identitet

Hanterad identitetsautentisering stöds inte i Azure portal. Använd Azure CLI eller Azure Resource Manager för att autentisera med hjälp av hanterad identitet.

Standardskalningsregel

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

Utlösare Minsta antal 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 ned till noll och kan inte starta igen.

Skalningsbeteende

Skalning har följande beteenden:

Beteende Värde
Avsökningsintervall 30 sekunder
Nedkylningsperiod 300 sekunder
Skala upp stabiliseringsfönstret 0 sekunder
Skala ned stabiliseringsfönstret 300 sekunder
Skalningssteg 1, 4, 8, 16, 32, ... upp till konfigurerat maximalt antal repliker
Nedskalningssteg 100% repliker som måste stängas av
Skalningsalgoritm desiredReplicas = ceil(currentMetricValue / targetMetricValue)
  • Avsökningsintervall är hur ofta KEDA frågar händelsekällor. Det här värdet gäller inte för HTTP- och TCP-skalningsregler.
  • Nedskalningsfördröjning anger hur lång tid efter den senaste händelsen som KEDA väntar innan applikationen skalas ned till sitt minsta antal repliker.
  • Skala upp stabiliseringsfönstret är hur länge KEDA väntar innan det utför ett uppskalningsbeslut när uppskalningsvillkoren är uppfyllda.
  • Stabiliseringsfönster för nedskalning anger hur länge KEDA väntar innan det fattar ett beslut om nedskalning när villkoren för nedskalning är uppfyllda.
  • Uppskalningssteget är hur många repliker som läggs till när containerappen skalar ut. Den börjar vid 1 och ökar sedan till 4, 8, 16, 32 och så vidare, upp till det konfigurerade maximala antalet repliker.
  • Nedskalningssteget är hur många repliker som tas bort när containerappen skalar in. KEDA tar bort 100% repliker som måste stängas av.
  • 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 steg 1.
  3. Om kölängden är större än 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 steg 1.

Om appen skalar till maximalt antal repliker på 20 går skalningen igenom samma föregående steg. Nedskalning sker endast om villkoret är uppfyllt i 300 sekunder (nedskalningsstabiliseringsfönstret). När kölängden är 0 väntar KEDA i 300 sekunder (nedkylningsperiod) innan appen skalas till 0.

Att tänka på

  • Om du lägger till en ny skalningsutlösare i läget "flera revisioner" skapas en ny revision av ditt program, men den gamla revisionen är fortfarande tillgänglig med de gamla skalningsreglerna. Använd sidan Revisionshantering för att hantera trafikallokeringar.

  • Du debiteras inga användningsavgifter när ett program skalar till noll. Mer prisinformation finns i Fakturering i Azure Container Apps.

  • Du måste aktivera dataskydd för alla .NET appar på Azure Container Apps. Mer information finns i Distribuera och skala en ASP.NET Core app på Azure Container Apps.

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.

  • Det går inte att ändra KEDA-proxyservrar via proxyinställningarna . Överväg att använda arbetsbelastningsprofiler med en NAT Gateway eller användardefinierad routning (UDR) för att skicka trafik till en nätverksenhet, där du kan inspektera trafiken eller agera proxy för den.

Nästa steg