Поделиться через


Установка правил масштабирования в Контейнерах приложений Azure

Приложения контейнеров Azure управляют автоматическим горизонтальным масштабированием с помощью набора декларативных правил масштабирования. По мере масштабирования редакции приложения-контейнера новые экземпляры редакции создаются по запросу. Эти экземпляры называются репликами.

Для поддержки этого поведения масштабирования приложения контейнеров Azure работают на платформе KEDA (автомасштабирование на основе событий Kubernetes). KEDA поддерживает масштабирование для различных метрик, таких как HTTP-запросы, сообщения очереди, загрузка ЦП и памяти, а также источники событий, такие как служебная шина Azure, Центры событий Azure, Apache Kafka и Redis. Дополнительные сведения см. в разделе "Масштабировщики" в документации ПО KEDA.

Добавление или изменение правил масштабирования создает новую редакцию приложения-контейнера. Ревизия — это неизменяемый снимок контейнерного приложения. Сведения о том, какие типы изменений активируют новую редакцию, см. в разделе "Типы изменений редакции".

Задания контейнерных приложений на основе событий используют правила масштабирования для активации выполнения на основе событий.

Определение масштабирования

Масштабирование — это сочетание ограничений, правил и поведения.

  • Ограничения определяют минимальное и максимально возможное количество реплик на каждую редакцию по мере масштабирования приложения-контейнера.

    Предел масштабирования Значение по умолчанию Минимальное значение Максимальное значение
    Минимальное количество реплик на версию 0 0 Максимально можно настроить 1000 реплик.
    Максимальное число реплик на одну ревизию 10 1 Максимально можно настроить 1000 реплик.
  • Правила — это критерии, используемые приложениями-контейнерами, чтобы решить, когда следует добавлять или удалять реплики.

    Правила масштабирования реализуются как HTTP, TCP (протокол управления передачей) или пользовательские.

  • Поведение — это сочетание правил и ограничений для определения решений масштабирования с течением времени.

    Поведение масштабирования объясняет, как принимаются решения о масштабировании.

При определении правил масштабирования важно учитывать следующие элементы:

  • Плата за использование не взимается, если контейнерное приложение масштабируется до нуля.
  • Реплики, которые не обрабатываются, но остаются в памяти, могут оплачиваться по более низкому тарифу простоя. Дополнительные сведения см. в разделе о выставлении счетов.
  • Если вы хотите убедиться, что экземпляр ревизии всегда запущен, установите значение для минимального количества реплик — 1 или больше.

Правила масштабирования

Три категории триггеров определяют, как выполняется масштабирование:

  • HTTP: на основе количества параллельных HTTP-запросов к вашей версии.
  • TCP: на основе количества одновременных TCP-подключений к ревизии.
  • Custom: на основе пользовательских метрик, таких как:
    • ЦП
    • Память
    • Поддерживаемые источники данных на основе событий:
      • Служебная шина Azure
      • Центры событий Azure
      • Apache Kafka
      • Redis

Если вы определяете несколько правил масштабирования, приложение-контейнер начинает масштабироваться после выполнения первого условия любых правил.

HTTP

С помощью правила масштабирования HTTP у вас есть контроль над пороговым значением одновременных HTTP-запросов, определяющих масштабирование редакции приложения-контейнера. Каждые 15 секунд число одновременных запросов вычисляется как количество запросов за последние 15 секунд, разделенных на 15 секунд. Задания контейнерных приложений не поддерживают правила масштабирования HTTP.

В следующем примере изменение позволяет масштабироваться до пяти реплик и может уменьшаться до нуля. Свойство масштабирования имеет значение 100 одновременных запросов в секунду.

Пример

В http разделе определяется правило масштабирования HTTP.

Свойство масштаба Описание Значение по умолчанию Минимальное значение Максимальное значение
concurrentRequests Когда число HTTP-запросов превышает это значение, добавляется другая реплика. Реплики продолжают добавляться в пул до значения maxReplicas. 10 1 Недоступно
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
  ...
  properties: {
    ...
    template: {
      ...
      scale: {
        maxReplicas: 0
        minReplicas: 5
        rules: [
          {
            name: 'http-rule'
            http: {
              metadata: {
                concurrentRequests: '100'
              }
            }
          }
        ]
      }
    }
  }
}

Примечание.

properties.configuration.activeRevisionsMode Задайте для свойства приложения-контейнера singleзначение , если используется правила масштабирования событий, отличные от HTTP.

В http разделе определяется правило масштабирования HTTP.

Свойство масштаба Описание Значение по умолчанию Минимальное значение Максимальное значение
concurrentRequests Когда число HTTP-запросов превышает это значение, добавляется другая реплика. Реплики продолжают добавляться в пул до значения maxReplicas. 10 1 Недоступно
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "http-rule",
            "http": {
              "metadata": {
                "concurrentRequests": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Примечание.

properties.configuration.activeRevisionsMode Задайте для свойства приложения-контейнера singleзначение , если используется правила масштабирования событий, отличные от HTTP.

Определите правило масштабирования HTTP с помощью --scale-rule-http-concurrency параметра в create командах или update командах.

Параметр CLI Описание Значение по умолчанию Минимальное значение Максимальное значение
--scale-rule-http-concurrency Если число одновременных HTTP-запросов превышает это значение, добавляется другая реплика. Реплики продолжают добавляться в пул до значения max-replicas. 10 1 Недоступно
az containerapp create \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --environment <ENVIRONMENT_NAME> \
  --image <CONTAINER_IMAGE_LOCATION>
  --min-replicas 0 \
  --max-replicas 5 \
  --scale-rule-name azure-http-rule \
  --scale-rule-type http \
  --scale-rule-http-concurrency 100
  1. Перейдите в приложение-контейнер в портал Azure

  2. Выберите "Масштаб".

  3. Выберите Изменить и развернуть.

  4. Выберите вкладку "Масштаб ".

  5. Выберите минимальный и максимальный диапазон копий.

    Снимок экрана: ползунок масштаба диапазона контейнерных приложений Azure.

  6. Выберите Добавить.

  7. В поле "Имя правила" введите имя правила.

  8. В раскрывающемся списке Тип выберите HTTP Масштабирование.

  9. В поле "Одновременные запросы" введите требуемое количество одновременных запросов для приложения контейнера.

Протокол tcp

С помощью правила масштабирования TCP у вас есть контроль над пороговым значением параллельных TCP-подключений, определяющих масштабирование приложения. Каждые 15 секунд число одновременных подключений вычисляется как количество подключений за последние 15 секунд, разделенных на 15 секунд. Задания контейнерных приложений не поддерживают правила масштабирования TCP.

В следующем примере редакция приложения-контейнера масштабируется до пяти реплик и может увеличиваться до нуля. Порог масштабирования имеет значение 100 одновременных подключений в секунду.

Пример

В tcp разделе определяется правило масштабирования TCP.

Свойство масштаба Описание Значение по умолчанию Минимальное значение Максимальное значение
concurrentConnections Если число одновременных TCP-подключений превышает это значение, добавляется другая реплика. Реплики продолжают добавляться по мере увеличения количества одновременных подключений до maxReplicas. 10 1 Недоступно
resource symbolicname 'Microsoft.App/containerApps@2025-02-02-preview' = {
  ...
  properties: {
    ...
    template: {
      ...
      scale: {
        maxReplicas: 0
        minReplicas: 5
        rules: [
          {
            name: 'tcp-rule'
            http: {
              metadata: {
                concurrentConnections: '100'
              }
            }
          }
        ]
      }
    }
  }
}

В tcp разделе определяется правило масштабирования TCP.

Свойство масштаба Описание Значение по умолчанию Минимальное значение Максимальное значение
concurrentConnections Если число одновременных TCP-подключений превышает это значение, добавляется другая реплика. Реплики продолжают добавляться по мере увеличения количества одновременных подключений, пока не достигнут значения maxReplicas. 10 1 Недоступно
{
  ...
  "resources": {
    ...
    "properties": {
      ...
      "template": {
        ...
        "scale": {
          "minReplicas": 0,
          "maxReplicas": 5,
          "rules": [{
            "name": "tcp-rule",
            "tcp": {
              "metadata": {
                "concurrentConnections": "100"
              }
            }
          }]
        }
      }
    }
  }
}

Определите правило масштабирования TCP с помощью --scale-rule-tcp-concurrency параметра в create командах или update командах.

Параметр CLI Описание Значение по умолчанию Минимальное значение Максимальное значение
--scale-rule-tcp-concurrency Если число одновременных TCP-подключений превышает это значение, добавляется другая реплика. Реплики по-прежнему добавляются к max-replicas сумме по мере увеличения числа одновременных подключений. 10 1 Недоступно
az containerapp create \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --environment <ENVIRONMENT_NAME> \
  --image <CONTAINER_IMAGE_LOCATION>
  --min-replicas 0 \
  --max-replicas 5 \
  --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. Используйте Azure CLI, Azure Resource Manager или Bicep для настройки правила масштабирования TCP.

Пользовательское

Вы можете создать пользовательское правило масштабирования контейнерных приложений, основанное на любом масштабировщике KEDA, основанном на ScaledObject, используя следующие значения по умолчанию:

Параметры по умолчанию секунды
Интервал опроса 30
Период охлаждения 300

Для заданий Container Apps, управляемых событиями, можно создать настраиваемое правило масштабирования на основе любого масштабировщика KEDA, использующего ScaledJob.

В следующем примере показано, как создать пользовательское правило масштабирования.

Пример

В этом примере показано, как преобразовать масштабировщик Служебная шина Azure в правило масштабирования контейнерных приложений, но вы используете тот же процесс для любой другой спецификации масштабировщика KEDA на основе ScaledObject.

Для проверки подлинности параметры аутентификации KEDA scaler принимают либо секреты контейнерных приложений, либо управляемое удостоверение.

В следующей процедуре показано, как преобразовать масштабировщик KEDA в правило масштабирования приложения-контейнера. Этот фрагмент является частью шаблона Bicep и показывает, как каждый раздел входит в контекст общего шаблона.

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>'
                }
              ]
            }
          }
        ]
      }
    }
  }
}

Ознакомьтесь с этим фрагментом, чтобы понять контекст о том, как приведенные ниже примеры вписываются в шаблон Bicep.

Сначала необходимо определить тип и метаданные правила масштабирования.

  1. В спецификации масштабировщика KEDA найдите type значение.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. В шаблоне Bicep введите значение type масштабировщика в свойство custom.type правила масштабирования.

    ...
    rules: [
      {
        name: 'azure-servicebus-queue-rule'
        custom: {
          type: 'azure-servicebus'
          metadata: {
            queueName: 'my-queue'
            namespace: 'service-bus-namespace'
            messageCount: '5'
          }
        }
      }
    ]
    ...
    
  3. В спецификации масштабировщика KEDA найдите значения metadata.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  4. В шаблоне Bicep добавьте все значения метаданных в секцию custom.metadata правила масштабирования.

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

Проверка подлинности

Правила масштабирования для приложений-контейнеров поддерживают проверку подлинности на основе секретов. Правила масштабирования ресурсов Azure, включая Хранилище очередей Azure, Служебную шину Azure и Центры событий Azure, поддерживают также управляемое удостоверение. По возможности используйте аутентификацию с управляемыми удостоверениями, чтобы избежать хранения секретов в приложении.

Использование секретов

Чтобы использовать секреты для проверки подлинности, необходимо создать секрет в массиве приложения контейнера secrets. Секретное значение используется в auth массиве масштабного правила.

Масштабировщики KEDA могут использовать секреты в TriggerAuthentication, на которую ссылается свойство authenticationRef. Объект TriggerAuthentication можно сопоставить с правилом масштабирования Container Apps.

  1. TriggerAuthentication Найдите объект, на который ссылается спецификация KEDAScaledObject.

  2. В объекте TriggerAuthentication найдите каждый secretTargetRef и связанный с ним секрет.

    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. В шаблоне Bicep для каждого отдельного секрета:

    1. Добавьте секрет в массив приложения secrets контейнера, содержащий имя и значение секрета.

    2. Добавьте запись в массив auth правила масштабирования.

      1. Установите значение свойства triggerParameter в значение свойства secretTargetRef объекта parameter.

      2. Установите значение свойства secretRef на имя свойства secretTargetRef элемента key.

    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'
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    }
    

    Некоторые масштабировщики поддерживают метаданные с суффиксом FromEnv для ссылки на значение в переменной среды. Приложения-контейнеры рассматривают первый контейнер, указанный в шаблоне ARM для переменной среды.

    Дополнительные сведения о безопасности см. в разделе "Рекомендации".

Использование управляемого удостоверения

Правила масштабирования контейнерных приложений могут использовать управляемое удостоверение для аутентификации с сервисами Azure. Следующий шаблон Bicep передает управляемую идентичность на основе системы для аутентификации в масштабировщике очередей Azure.

Перед использованием следующего кода замените заполнители, окруженные вашими значениями <> .

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

Дополнительные сведения об использовании управляемого удостоверения с правилами масштабирования см. в разделе "Управляемое удостоверение".

В следующей процедуре показано, как преобразовать масштабировщик KEDA в правило масштабирования приложения-контейнера. Этот фрагмент является фрагментом шаблона ARM, чтобы показать, где каждый раздел подходит в контексте общего шаблона.

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

Ознакомьтесь с этим фрагментом контекста о том, как приведенные ниже примеры соответствуют шаблону ARM.

Сначала необходимо определить тип и метаданные правила масштабирования.

  1. В спецификации масштабировщика KEDA найдите type значение.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. В шаблоне ARM введите значение масштабировщика type в custom.type свойство правила масштабирования.

    ...
    "rules": [
      {
        "name": "azure-servicebus-queue-rule",
        "custom": {
          "type": "azure-servicebus",
          "metadata": {
            "queueName": "my-queue",
            "namespace": "service-bus-namespace",
            "messageCount": "5"
          }
        }
      }
    ]
    ...
    
  3. В спецификации масштабировщика KEDA найдите значения metadata.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  4. В шаблоне ARM добавьте все значения метаданных в секцию custom.metadata правила масштабирования.

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

Проверка подлинности

Правила масштабирования для приложений-контейнеров поддерживают проверку подлинности на основе секретов. Правила масштабирования ресурсов Azure, включая Хранилище очередей Azure, Служебную шину Azure и Центры событий Azure, поддерживают также управляемое удостоверение. По возможности используйте аутентификацию с управляемыми удостоверениями, чтобы избежать хранения секретов в приложении.

Использование секретов

Чтобы использовать секреты для проверки подлинности, необходимо создать секрет в массиве приложения контейнера secrets. Секретное значение используется в auth массиве масштабного правила.

Масштабировщики KEDA могут использовать секреты в TriggerAuthentication, на которую ссылается свойство authenticationRef. Объект TriggerAuthentication можно сопоставить с правилом масштабирования Container Apps.

  1. TriggerAuthentication Найдите объект, на который ссылается спецификация KEDAScaledObject.

  2. В объекте TriggerAuthentication найдите каждый secretTargetRef и связанный с ним секрет.

    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. В шаблоне ARM для каждого секрета:

    1. Добавьте секрет в массив приложения secrets контейнера, содержащий имя и значение секрета.

    2. Добавьте запись в массив auth правила масштабирования.

      1. Установите значение свойства triggerParameter в значение свойства secretTargetRef объекта parameter.

      2. Установите значение свойства secretRef на имя свойства secretTargetRef элемента key.

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

    Некоторые масштабировщики поддерживают метаданные с суффиксом FromEnv для ссылки на значение в переменной среды. Приложения-контейнеры рассматривают первый контейнер, указанный в шаблоне ARM для переменной среды.

    Дополнительные сведения о безопасности см. в разделе "Рекомендации".

Использование управляемого удостоверения

Правила масштабирования контейнерных приложений могут использовать управляемое удостоверение для аутентификации с сервисами Azure. Следующий шаблон ARM передает управляемое системой удостоверение для проверки подлинности скейлера очереди Azure.

Перед использованием следующего кода замените заполнители, окруженные <>, вашими данными.

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

Дополнительные сведения об использовании управляемого удостоверения с правилами масштабирования см. в разделе "Управляемое удостоверение".

  1. В спецификации масштабировщика KEDA найдите type значение.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  2. В команде CLI задайте --scale-rule-type параметр значению спецификации 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. В спецификации масштабировщика KEDA найдите значения metadata.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  4. В команде CLI задайте --scale-rule-metadata для параметра значения метаданных.

    Необходимо преобразовать значения из формата YAML в пару "ключ-значение" для использования в командной строке. Разделите каждую пару "ключ-значение" с пробелом.

    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"
    

Проверка подлинности

Правила масштабирования для приложений-контейнеров поддерживают проверку подлинности на основе секретов. Правила масштабирования ресурсов Azure, включая Хранилище очередей Azure, Служебную шину Azure и Центры событий Azure, поддерживают также управляемое удостоверение. По возможности используйте аутентификацию с управляемыми удостоверениями, чтобы избежать хранения секретов в приложении.

Использование секретов

Чтобы настроить проверку подлинности на основе секретов для правила масштабирования контейнерных приложений, необходимо настроить секреты в приложении контейнера и ссылаться на них в правиле масштабирования.

Масштабировщик KEDA поддерживает секреты в триггерной аутентификации, которую свойство authenticationRef использует для ссылки. Можно сопоставить объект TriggerAuthentication с правилом масштабирования контейнерных приложений.

  1. TriggerAuthentication Найдите объект, на который ссылается спецификация KEDAScaledObject. Определите каждый secretTargetRefTriggerAuthentication объект.

    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. В приложении-контейнере создайте секреты , соответствующие свойствам secretTargetRef .

  3. В команде CLI задайте параметры для каждой secretTargetRef записи.

    1. Создайте секретную запись с параметром --secrets. Если существует несколько секретов, разделите их пробелом.

    2. Создайте запись аутентификации с параметром --scale-rule-auth. Если есть несколько записей, разделите их пробелом.

    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"
    

Использование управляемого удостоверения

Правила масштабирования контейнерных приложений могут использовать управляемое удостоверение для аутентификации с сервисами Azure. Следующая команда создает приложение-контейнер с управляемым удостоверением, назначаемое пользователем, и использует его для проверки подлинности для масштабировщика очередей Azure.

Перед использованием следующего кода замените заполнители, окруженные тегами <>, на ваши значения.

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. Перейдите в ваше контейнерное приложение на портале Azure.

  2. Выберите "Масштаб".

  3. Выберите Изменить и развернуть.

  4. Перейдите на вкладку "Масштаб и реплики ".

  5. Выберите минимальный и максимальный диапазон копий.

    Снимок экрана: ползунок масштаба диапазона контейнерных приложений Azure.

  6. Выберите Добавить.

  7. В поле "Имя правила" введите имя правила.

  8. В раскрывающемся списке "Тип" выберите "Настраиваемый".

  9. В спецификации масштабировщика KEDA найдите type значение.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  10. В поле "Настраиваемый тип правила" введите значение масштабировщика type .

  11. В спецификации масштабировщика KEDA найдите значения metadata.

    triggers:
    - type: azure-servicebus
      metadata:
        queueName: my-queue
        namespace: service-bus-namespace
        messageCount: "5"
    
  12. На портале найдите раздел метаданных и нажмите кнопку "Добавить". Введите имя и значение для каждого элемента в разделе метаданных спецификации KEDA ScaledObject .

Проверка подлинности

Правила масштабирования для приложений-контейнеров поддерживают проверку подлинности на основе секретов. Правила масштабирования ресурсов Azure, включая Хранилище очередей Azure, Служебную шину Azure и Центры событий Azure, поддерживают также управляемое удостоверение. По возможности используйте аутентификацию с управляемыми удостоверениями, чтобы избежать хранения секретов в приложении.

Использование секретов

  1. В приложении-контейнере создайте секреты , на которые вы хотите ссылаться.

  2. TriggerAuthentication Найдите объект, на который ссылается спецификация KEDAScaledObject. Определите каждый secretTargetRefTriggerAuthentication объект.

    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. В разделе "Проверка подлинности" выберите "Добавить", чтобы создать запись для каждого параметра KEDAsecretTargetRef.

Использование управляемого удостоверения

Проверка подлинности управляемой идентификации не поддерживается на портале Azure. Используйте Azure CLI или Azure Resource Manager для проверки подлинности с помощью управляемого удостоверения.

Правило масштабирования по умолчанию

Если вы не создаете правило масштабирования, правило масштабирования по умолчанию применяется к приложению контейнера.

Триггер Минимум реплик Максимальное количество копий
HTTP 0 10

Внимание

Убедитесь, что вы создаете правило масштабирования или устанавливаете minReplicas на 1 или больше, если ингресс не включен. Если входящий трафик отключен, и вы не определяете minReplicas или пользовательское правило масштабирования, то ваше приложение контейнера масштабируется до нуля и не имеет возможности возобновить работу.

Поведение масштабирования

Поведение масштабирования имеет следующие значения по умолчанию:

Параметр Значение
Интервал опроса 30 секунд
Период охлаждения 300 секунд
Увеличение масштаба окна стабилизации 0 секунд
Уменьшение окна стабилизации 300 секунд
Шаг масштабирования 1, 4, 100 % текущего
Шаг уменьшения масштаба 100 % текущего
Алгоритм масштабирования desiredReplicas = ceil(currentMetricValue / targetMetricValue)
  • Интервал опроса — это то, как часто источники событий запрашиваются KEDA. Это значение не применяется к правилам масштабирования HTTP и TCP.
  • Период охлаждения — это время после того, как прошлое событие было обнаружено до того, как приложение масштабируется до минимального количества реплик.
  • Окно стабилизации для увеличения масштаба — это промежуток времени, который необходимо выждать перед принятием решения о масштабировании после выполнения условий для его увеличения.
  • Окно стабилизации уменьшения масштаба — это время ожидания перед выполнением решения по уменьшению масштаба после выполнения условий уменьшения масштаба.
  • Шаг увеличения масштаба — это скорость добавления новых экземпляров. Начинается с 1, 4, 8, 16, 32, ... до настроенного максимального количества реплик.
  • Шаг уменьшения масштаба — это скорость удаления реплик. По умолчанию удаляются 100 % реплик, которые должны завершить работу.
  • Алгоритм масштабирования — это формула, используемая для вычисления текущего требуемого количества реплик.

Пример

Для следующего правила масштабирования:

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

По мере масштабирования приложения KEDA начинается с пустой очереди и выполняет следующие действия:

  1. Проверьте my-queue каждые 30 секунд.
  2. Если длина очереди равна 0, вернитесь к (1).
  3. Если длина очереди равна > 0, масштабируйте приложение до 1.
  4. Если длина очереди равна 50, вычислите desiredReplicas = ceil(50/5) = 10.
  5. Масштабирование приложения до min(maxReplicaCount, desiredReplicas, max(4, 2*currentReplicaCount))
  6. Вернитесь к (1).

Если приложение было масштабировано до максимального количества реплик 20, масштабирование выполняется через те же предыдущие шаги. Уменьшение масштаба происходит только в том случае, если условие было удовлетворено в течение 300 секунд (окно стабилизации уменьшения масштаба). После того как длина очереди равна 0, KEDA ожидает 300 секунд (период охлаждения) перед масштабированием приложения до 0.

Рекомендации

  • В режиме "несколько редакций" добавление нового триггера масштабирования создает новую редакцию приложения, но старая редакция остается доступной в старых правилах масштабирования. Используйте страницу управления версиями для управления распределением трафика.

  • Плата за использование не взимается, если приложение масштабируется до нуля. Дополнительные сведения о ценах см. в разделе "Выставление счетов в приложениях контейнеров Azure".

  • Необходимо включить защиту данных для всех приложений .NET в приложениях контейнеров Azure. Дополнительные сведения см. в статье о развертывании и масштабировании приложения ASP.NET Core в приложениях контейнеров Azure.

Известные ограничения

  • Вертикальное масштабирование не поддерживается.

  • Количество реплик — это целевой объем, а не гарантия.

  • Если вы используете субъекты Dapr для управления состояниями, следует помнить, что масштабирование до нуля не поддерживается. Dapr использует виртуальных актеров для управления асинхронными вызовами, что означает, что их представление в памяти не привязано к их идентичности или времени существования.

  • Изменение прокси-серверов KEDA с помощью параметров прокси-серверов не поддерживается. Рассмотрите возможность использования профилей рабочей нагрузки с шлюзом NAT или определяемым пользователем маршрутом (UDR) для отправки трафика на сетевое устройство, где трафик можно проверить или проксировать оттуда.

Следующие шаги