Dela via


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.

För att stödja det här skalningsbeteendet drivs Azure Container Apps av KEDA (Kubernetes Händelsedriven autoskalning). KEDA stöder skalning mot en mängd olika mått som HTTP-begäranden, kömeddelanden, CPU och minnesbelastning samt 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 skapas 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 är det viktigt att 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.

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-tjänstbuss)
      • Azure Event Hubs
      • Apache Kafka
      • Redis

Om du definierar mer än en skalningsregel, börjar containerappen skalas så snart det första villkoret för någon av reglerna 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 bidra till poolen upp till maxReplicas-mängden. 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

Ändra egenskapen properties.configuration.activeRevisionsMode för containerappen till single, när du använder skalningsregler för händelser som inte är HTTP.

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 bidra till poolen upp till maxReplicas-mängden. 10 1 saknas
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "http-rule",
            "http": {
              "metadata": {
                "concurrentRequests": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Anteckning

Ändra egenskapen properties.configuration.activeRevisionsMode för containerappen till single, när du använder skalningsregler för händelser som inte är HTTP.

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 bidra till poolen upp till max-replicas-mängden. 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 containerappen 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 skjutreglaget för skalningsintervall i Azure Container Apps.

  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 kan revisionen av containerappen skalas ut till upp till fem repliker och 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 i takt med att antalet samtidiga anslutningar ökar, upp till maxReplicas-mängden. 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äggs en annan replik till. Repliker fortsätter att läggas till upp till det specificerade antalet 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 \
  --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

Stöds inte i Azure Portal. Använd Azure CLI, Azure Resource Manager eller Bicep 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:

Standardinställningar 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 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 kontext om hur exemplen nedan passar i Bicep-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 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 måste du skapa en hemlighet i containerappens secrets matris. Det hemliga värdet används i auth skalningsregelns matris.

KEDA-skalare kan använda hemligheter i en TriggerAuthentication som refereras av egenskapen authenticationRef . 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 använder systembaserad hanterad identitet för att autentisera för en Azure Queue-skaleringsenhet.

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 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

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 måste du skapa en hemlighet i containerappens secrets matris. Det hemliga värdet används i auth skalningsregelns matris.

KEDA-skalare kan använda hemligheter i en TriggerAuthentication som refereras av egenskapen authenticationRef . 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 en systemhanterad identitet för att autentisera en Azure Queue-skalerare.

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.

    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

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-skalning.

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 containerappen 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 skjutreglaget för skalningsintervall i Azure Container Apps.

  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-portalen. 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 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
Skalningssteg 1, 4, 100% av strömmen
Nedskalningssteg 100 % av strömmen
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 det tar efter att den senaste händelsen observerades innan programmet skalar ner till sitt minsta replikantal.
  • 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.

  • Det går inte att ändra KEDA-proxyservrar via proxyinställningarna . Överväg att använda arbetsbelastningsprofiler med en NAT Gateway eller användardefinierad väg (UDR) för att skicka trafik till en nätverksinstallation, där trafiken kan inspekteras eller tas fram därifrån.

Nästa steg