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


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

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

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

Необходимые компоненты

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

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

Настройка

Чтобы войти в Azure из ИНТЕРФЕЙСА командной строки, выполните следующую команду и следуйте инструкциям, чтобы завершить процесс проверки подлинности.

az login

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

az upgrade

Затем установите или обновите расширение "Приложения контейнеров Azure" для интерфейса командной строки.

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

az extension add --name containerapp --upgrade

Примечание.

Начиная с мая 2024 г. расширения Azure CLI больше не поддерживают предварительные версии функций по умолчанию. Чтобы получить доступ к функциям предварительной версии контейнерных приложений, установите расширение "Приложения контейнеров" с --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 команды. Эта команда создает следующую команду:

  • Группа ресурсов
  • Среда Контейнеров приложений
  • Рабочая область 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.

Отправка запросов

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

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

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

Команда или аргумент Description
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. На странице метрик задайте для метрики значение "Запросы".

  9. Выберите Применить разделение.

  10. Разверните раскрывающийся список "Значения" и проверьте реплику.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Например, если вы создаете правило масштабирования ЦП со значением 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-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 Container Apps на GitHub.

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