Руководство: Масштабирование приложения-контейнера

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

В этом руководстве вы добавите правило масштабирования HTTP в приложение контейнера и посмотрите, как масштабируется приложение.

Предварительные условия

Требование Инструкции
Учетная запись Azure Если у вас нет учетной записи Azure, ее можно создать бесплатно.

Чтобы продолжить, вам потребуется разрешение Contributor на подписку Azure. Дополнительные сведения см. в статье "Назначение ролей Azure с помощью портала Azure".
Учетная запись GitHub Получите его бесплатно.
Azure CLI Установите интерфейс командной строки Azure.

Настройка

Чтобы войти в Azure из CLI, выполните следующую команду и следуйте инструкциям, чтобы завершить процесс проверки подлинности.

az login

Чтобы убедиться, что вы используете последнюю версию CLI, выполните команду обновления.

az upgrade

Затем установите или обновите расширение Контейнеры приложений Azure для CLI.

Если при выполнении az containerapp команд в Azure CLI или командлетов из модуля Az.App в PowerShell возникают ошибки об отсутствующих параметрах, убедитесь, что у вас установлена последняя версия расширения Контейнеры приложений Azure.

az extension add --name containerapp --upgrade

Примечание

Начиная с мая 2024 г. расширения Azure CLI больше не включают возможности предварительной версии по умолчанию. Чтобы получить доступ к предварительным возможностям Container Apps, установите расширение Container Apps с помощью --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Теперь, когда установлено текущее расширение или модуль, зарегистрируйте пространства имен Microsoft.App и Microsoft.OperationalInsights.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Создайте и разверните приложение-контейнер

Создайте и разверните приложение-контейнер с помощью команды containerapp up. Эта команда создает:

  • Группа ресурсов
  • Среда Container Apps
  • Рабочая область Log Analytics

Если любой из этих ресурсов уже существует, команда использует существующие ресурсы, а не создает новые.

Наконец, команда создает и развертывает приложение контейнера с помощью общедоступного образа контейнера. mcr.microsoft.com/dotnet/samples:aspnetapp Этот образ используется для активации правил масштабирования, создаваемых в этой статье. Вам не нужно знать или использовать .NET для выполнения этой процедуры.

az containerapp up \
  --name my-container-app \
  --resource-group my-container-apps \
  --location centralus \
  --environment 'my-container-apps' \
  --image mcr.microsoft.com/dotnet/samples:aspnetapp \
  --target-port 8080 \
  --ingress external \
  --query properties.configuration.ingress.fqdn \

Примечание

Убедитесь, что значение параметра --image указано в нижнем регистре.

Если установить для --ingress значение external, приложение-контейнер станет доступно для общедоступных запросов.

Команда up возвращает полное доменное имя (FQDN) для приложения контейнера. Скопируйте полное доменное имя в текстовый файл. Он используется в разделе "Отправка запросов ". Полное доменное имя выглядит следующим образом:

https://my-container-app.icydune-96848328.centralus.azurecontainerapps.io

Добавить правило масштабирования

Добавьте правило масштабирования HTTP в приложение контейнера, выполнив команду az containerapp update.

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-http-scale-rule \
    --scale-rule-http-concurrency 1

Эта команда добавляет правило масштабирования HTTP в приложение контейнера с именем my-http-scale-rule и с параметром параллелизма 1. Если приложение получает несколько одновременных HTTP-запросов, среда выполнения создает реплики приложения для обработки запросов.

Команда update возвращает новую конфигурацию в виде JSON-ответа, чтобы вы могли убедиться, что запрос выполнен успешно.

Запустить вывод журнала

Вы можете наблюдать за эффектами масштабирования приложения, просматривая журналы, созданные средой выполнения приложений контейнеров. Используйте команду az containerapp logs show, чтобы начать прослушивание записей журнала.

az containerapp logs show \
    --name my-container-app \
    --resource-group my-container-apps \
    --type=system \
    --follow=true

Команда show возвращает записи из системных журналов для приложения-контейнера в режиме реального времени. Вы можете ожидать ответ, как показано в следующем примере:

{
    "TimeStamp":"2023-08-01T16:49:03.02752",
    "Log":"Connecting to the container 'my-container-app'..."
}
{
    "TimeStamp":"2023-08-01T16:49:03.04437",
    "Log":"Successfully Connected to container:
    'my-container-app' [Revision: 'my-container-app--9uj51l6',
    Replica: 'my-container-app--9uj51l6-5f96557ffb-5khg9']"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9480811+00:00",
    "Log":"Microsoft.Hosting.Lifetime[14]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9481264+00:00",
    "Log":"Now listening on: http://[::]:80"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9490917+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9491036+00:00",
    "Log":"Application started. Press Ctrl+C to shut down."
}
{
    "TimeStamp":"2023-08-01T16:47:31.949723+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497292+00:00",
    "Log":"Hosting environment: Production"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497325+00:00",
    "Log":"Microsoft.Hosting.Lifetime[0]"
}
{
    "TimeStamp":"2023-08-01T16:47:31.9497367+00:00",
    "Log":"Content root path: /app/"
}

Дополнительные сведения см. в az containerapp logs.

Отправить запросы

Откройте новую оболочку Bash. Выполните следующую команду, заменив <YOUR_CONTAINER_APP_FQDN> на полное доменное имя приложения-контейнера, сохраненное в разделе Создание и развертывание приложения-контейнера.

seq 1 50 | xargs -Iname -P10 curl "<YOUR_CONTAINER_APP_FQDN>"

Эти команды отправляют 50 запросов в приложение-контейнер параллельными пакетами по 10 запросов каждый.

Команда или аргумент Описание
seq 1 50 Создает последовательность чисел от 1 до 50.
| Оператор канала отправляет последовательность команде xargs.
xargs Запускает curl с указанным URL-адресом
-Iname Выступает в качестве заполнителя для вывода seq. Этот аргумент предотвращает отправку возвращаемого значения в команду curl.
curl Вызывает заданный URL-адрес.
-P10 Предписывает xargs выполнять до 10 процессов за раз.

Дополнительные сведения см. в документации по следующим разделам:

В первой оболочке, где вы выполнили az containerapp logs show команду, выходные данные теперь содержат одну или несколько записей журнала, как показано ниже.

{
    "TimeStamp":"2023-08-01 18:09:52 +0000 UTC",
    "Type":"Normal",
    "ContainerAppName":"my-container-app",
    "RevisionName":"my-container-app--00001111",
    "ReplicaName":"my-container-app--00001111-aaaaa22222-bbbb",
    "Msg":"Replica 'my-container-app--00001111-aaaaa22222-bbbb' has been scheduled to run on a node.",
    "Reason":"AssigningReplica",
    "EventSource":"ContainerAppController",
    "Count":0
}

Просмотреть масштабирование в портале Azure (необязательно)

  1. Войдите на портал Azure.

  2. В строке поиска в верхней части введите my-container-app.

  3. В результатах поиска в разделе Ресурсы выберите my-container-app.

  4. В панели навигации слева разверните Приложение и выберите Масштаб и реплики.

  5. На странице Масштабирование и реплики выберите Реплики.

  6. Теперь приложение-контейнер имеет несколько реплик.

    Снимок экрана: экземпляры приложения-контейнера.

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

  7. В панели навигации слева разверните узел "Мониторинг" и выберите "Метрики".

  8. На странице Metrics задайте для метрики значение Запросы.

  9. Выберите Разделение.

  10. Разверните раскрывающийся список «Values» и установите флажок Replica.

  11. Щелкните значок синей галочки, чтобы завершить редактирование разбиения.

  12. На диаграмме показаны запросы, полученные приложением-контейнером, разделенные по реплике.

    График метрик приложения-контейнера, в котором отображаются запросы, разделенные по реплике.

  13. По умолчанию для масштаба графика задано значение последних 24 часов с степенью детализации времени в 15 минут. Выберите масштаб и измените его на последние 30 минут с детализацией в одну минуту. Выберите кнопку Применить.

  14. Щелкните на графике и перетащите, чтобы выделить недавнее увеличение запросов, полученных приложением-контейнером.

    Снимок экрана: граф метрик приложения-контейнера, на котором показаны запросы, разделенные по реплике, с масштабом 30 минут и степенью детализации времени в одну минуту.

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

    Снимок экрана: график метрик приложения-контейнера, на котором показаны запросы, разбитые по репликам, в увеличенном представлении.

Масштабирование ЦП и памяти

Если это возможно, следует предпочесть правила масштабирования HTTP для правил масштабирования ЦП или памяти. Масштабирование ЦП и памяти не позволяют приложению-контейнеру масштабироваться до нуля.

После добавления правила масштабирования ЦП или памяти его можно протестировать, отправив запросы в приложение контейнера и просмотрев масштабирование на портале Azure.

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

Масштабирование ЦП

Масштабирование ЦП позволяет вашему приложению масштабироваться внутрь или наружу в зависимости от уровня загрузки ЦП.

Например, если вы создаете правило масштабирования ЦП со значением 50использования, приложения контейнеров Azure создают дополнительные реплики приложения-контейнера, когда среднее использование ЦП для всех реплик достигает 50%.

Для приложений с несколькими контейнерами использование CPU — это средневзвешенное по выделению значение, рассчитанное как общее использование CPU всеми контейнерами в реплике, делённое на их общее выделение CPU, выраженное в процентах. Например, если один контейнер использует все свои 0,25 vCPU, а другой не использует 0,75 vCPU, то загрузка CPU реплики составляет 25%, а не 50% или 100%.

Масштабирование ЦП не позволяет приложению-контейнеру масштабироваться до нуля. Дополнительные сведения об этом триггере см. в разделе "Триггер масштабирования ЦП KEDA".

Добавьте правило масштабирования ЦП в приложение контейнера, выполнив az containerapp update команду.

Примечание

При использовании Azure CLI для добавления правила масштабирования в приложение-контейнер, которое уже имеет правило масштабирования, новое правило масштабирования заменяет старое правило масштабирования. Сведения о добавлении нескольких правил масштабирования см. в разделе "Несколько правил масштабирования".

Перед выполнением следующей команды замените <PLACEHOLDERS> вашим значением. В этом руководстве замените <UTILIZATION> на 1. Это приводит к масштабированию приложения-контейнера, когда среднее использование ЦП для всех реплик достигает 1%. Это значение предназначено только для демонстрации. Количество реплик ограничено 10 заданным --max-replicas 10 при выполнении az containerapp update.

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-cpu-scale-rule \
    --scale-rule-type cpu \
    --scale-rule-metadata type=Utilization value=<UTILIZATION>

Масштабирование памяти

Масштабирование памяти позволяет приложению масштабироваться в зависимости от объема используемой памяти.

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

Масштабирование памяти не позволяет приложению-контейнеру масштабироваться до нуля. Дополнительные сведения об этом триггере см. в разделе "Триггер масштабирования памяти KEDA".

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

Примечание

При использовании Azure CLI для добавления правила масштабирования в приложение-контейнер, которое уже имеет правило масштабирования, новое правило масштабирования заменяет старое правило масштабирования. Сведения о добавлении нескольких правил масштабирования см. в разделе "Несколько правил масштабирования".

Перед выполнением следующей команды замените <PLACEHOLDERS> вашим значением. В этом руководстве замените <UTILIZATION> на 1. Это приводит к масштабированию приложения-контейнера, когда среднее использование памяти для всех реплик достигает 1%. Это значение предназначено только для демонстрации. Количество реплик ограничено 10 заданным --max-replicas 10 при выполнении az containerapp update.

az containerapp update \
    --name my-container-app \
    --resource-group my-container-apps \
    --min-replicas 1 \
    --max-replicas 10 \
    --scale-rule-name my-memory-scale-rule \
    --scale-rule-type memory \
    --scale-rule-metadata type=Utilization value=<UTILIZATION>

Несколько правил масштабирования

Чтобы добавить несколько правил масштабирования в приложение контейнера с помощью Azure CLI, необходимо использовать YAML.

  1. Экспортируйте конфигурацию вашего приложения контейнера в YAML с помощью команды az containerapp show.

    az containerapp show \
        --name my-container-app \
        --resource-group my-container-apps \
        --output yaml > app.yaml
    
  2. properties > template > scale > rules В разделе app.yamlдобавьте следующие свойства. Замените значения <PLACEHOLDERS> на свои.

    ...
    properties:
    ...
      template:
    ...
        scale:
    ...
          rules:
            - name: cpu-scaling-rule
              custom:
                type: cpu
                metadata:
                  type: "Utilization"
                  value: "<CPU_UTILIZATION>"
            - name: memory-scaling-rule
              custom:
                type: memory
                metadata:
                  type: "Utilization"
                  value: "<MEMORY_UTILIZATION>"
    ...
    
  3. Импортируйте конфигурацию приложения-контейнера из app.yaml, с помощью команды az containerapp update.

    az containerapp update \
      --name my-container-app \
      --resource-group my-container-apps \
      --yaml app.yaml
    

Очистить ресурсы

Если вы не собираетесь продолжать использовать это приложение, выполните следующую команду, чтобы удалить группу ресурсов вместе со всеми ресурсами, созданными в этом руководстве.

Внимание

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

az group delete --name my-container-apps

Совет

Возникли проблемы? Сообщите нам, создав обращение в репозитории Контейнеры приложений Azure на GitHub.

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