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

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

В этом руководстве вы добавите пользовательское правило масштабирования для масштабирования приложения-контейнера с помощью метрик Java и следите за масштабированием приложения.

Требования

Настройка среды

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

  1. Создайте переменные для поддержки конфигурации масштабирования.

    export LOCATION=eastus
    export TENANT_ID={tenant-id}
    export SUBSCRIPTION_ID={subscription-id}
    export RESOURCE_GROUP=my-resource-group
    export APP_NAME=my-aca-app
    export IDENTITY_NAME=my-identity
    
    «Переменная» Описание
    LOCATION Расположение региона Azure, в котором вы создаете приложения контейнеров Azure.
    TENANT_ID Идентификатор арендатора.
    SUBSCRIPTION_ID Идентификатор подписки, который используется для создания приложений контейнеров Azure.
    RESOURCE_GROUP Имя группы ресурсов Azure для приложений контейнеров Azure.
    APP_NAME Имя вашего приложения Azure Container Apps.
    IDENTITY_NAME Имя управляемого удостоверения, которое назначается контейнерным приложениям Azure.
  2. Войдите в Azure с помощью Azure CLI.

    az login
    

Настройте управляемое удостоверение для контейнерных приложений Azure

Чтобы масштабировать с использованием метрик платформы Azure Container Apps, необходимо управляемое удостоверение для получения доступа к метрикам из Azure Monitor.

  1. Создайте назначаемое пользователем удостоверение и назначьте его приложениям контейнеров Azure. Вы можете следовать документу , добавив удостоверение, назначаемое пользователем. После создания удостоверения выполните команду CLI, чтобы задать идентификатор удостоверения.

    USER_ASSIGNED_IDENTITY_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME --query "id" --output tsv)
    
  2. Предоставьте Monitoring Reader роль управляемому удостоверению для чтения данных из Azure Monitor. Дополнительные сведения о ролях Azure Monitor можно найти в встроенных ролях Azure для Monitor.

    # Get the principal ID for your managed identity
    PRINCIPAL_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME --query "principalId" --output tsv)
    
    az role assignment create --assignee $PRINCIPAL_ID --role "Monitoring Reader" --scope /subscriptions/$SUBSCRIPTION_ID
    

Добавление правила масштабирования с помощью метрик Azure Monitor

Чтобы масштабироваться с помощью метрик Azure Monitor, можно обратиться к масштабировщику автомасштабирования на основе событий Azure Monitor Kubernetes (KEDA), чтобы определить правило масштабирования приложений контейнеров.

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

Ключ метаданных Описание
идентификатор арендатора Идентификатор клиента, содержащего ресурс Azure.
идентификатор подписки Идентификатор подписки Azure, содержащей ресурс Azure.
resourceGroupName Имя группы ресурсов для ресурса Azure.
resourceURI Сокращенный URI для ресурса Azure с форматом <resourceProviderNamespace>/<resourceType>/<resourceName>.
metricName Имя метрики для запроса.
metricAggregationType Метод агрегирования метрики Azure Monitor. Параметры включают среднее, общее, максимальное.
metricFilter Название фильтра для более точной идентификации с использованием измерений, перечисленных в официальной документации. (Необязательно)
metricAggregationInterval Время сбора метрик в формате hh:mm:ss (по умолчанию: 0:5:0, необязательно)
targetValue Целевое значение для активации действий масштабирования. (Это значение может быть числом с плавающей запятой)

Добавьте правило масштабирования с метриками Azure Monitor для Azure Container Apps вашего приложения.

az containerapp update \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --min-replicas 1 \
        --max-replicas 10 \
        --scale-rule-name scale-with-azure-monitor-metrics \
        --scale-rule-type azure-monitor \
        --scale-rule-metadata "tenantId=${TENANT_ID}" \
                            "subscriptionId=${SUBSCRIPTION_ID}" \
                            "resourceGroupName=${RESOURCE_GROUP}" \
                            "resourceURI=Microsoft.App/containerapps/${APP_NAME}" \
                            "metricName=JvmGcCount" \
                            "metricAggregationType=Total" \
                            "metricAggregationInterval=0:1:0" \
                            "targetValue=30" \
        --scale-rule-identity $USER_ASSIGNED_IDENTITY_ID

Эта команда добавляет правило масштабирования в приложение контейнера с именем scale-with-azure-monitor-metrics

  • Для типа масштабирования задано azure-monitorзначение .
  • KEDA использует управляемое удостоверение с идентификатором USER_ASSIGNED_IDENTITY_ID для аутентификации в Azure Monitor и для запроса метрик для вашего контейнерного приложения.
  • KEDA запрашивает метрику и агрегирует значения метрик JvmGcCountв течение 1 минуты с типом Totalагрегирования.
  • Целевое значение установлено на 30, что означает, что KEDA вычисляет desiredReplicas, используя ceil(AggregatedMetricValue(JvmGcCount)/30).

Примечание.

Метрика JvmGcCount используется только в качестве примера. Вы можете использовать любую метрику из Azure Monitor. Перед настройкой правила масштабирования просмотрите метрики в портал Azure, чтобы определить соответствующие метрики, интервал агрегирования и целевое значение на основе требований приложения. Кроме того, рекомендуется использовать встроенные правила масштабирования HTTP/TCP, которые могут соответствовать наиболее распространенным сценариям масштабирования, прежде чем выбирать пользовательскую метрику.

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

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

  1. Перейдите на вкладку Metrics в портале Azure для приложений Azure Container Apps.
  2. Добавьте диаграмму, используйте метрику jvm.gc.countс фильтром Revision=<your-revision>, агрегированием с помощью Sumи разделением Replica. Вы можете увидеть значение метрик для каждой JvmGcCount реплики в этом чате.
  3. Добавьте диаграмму, используйте метрику jvm.gc.countс фильтром Revision=<your-revision> и агрегированием с помощью Sum. Вы можете увидеть общее агрегированное значение метрики для ревизии в этом чате.
  4. Добавьте диаграмму, используйте метрику Replica Countс фильтром Revision=<your-revision> и агрегированием с помощью Max. Вы можете увидеть количество реплик для ревизии в этом чате.

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

Снимок экрана: масштабирование KEDA с метриками JVM.

  1. Изначально для приложения существует одна реплика (minReplicas).
  2. Всплеск запросов заставляет приложение Java часто запускать сборку мусора виртуальной машины Java (JVM).
  3. KEDA наблюдает, что агрегированное значение метрики для jvm.gc.count увеличилось до 256, и вычисляет значение desiredReplicas как ceil(256/30)=9.
  4. KEDA масштабирует число реплик приложения-контейнера до 9.
  5. Http-трафик распределяется по нескольким репликам, уменьшая среднее число сборок.
  6. Число GC еще больше уменьшается, когда запросы не поступают.
  7. После периода охлаждения KEDA масштабирует число реплик до minReplicas=1.

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

Чтобы просмотреть журналы масштабирования KEDA, можно запустить запрос в Logs панели.

ContainerAppSystemLogs
| where RevisionName == "<your-revision>"
| where EventSource == "KEDA"
| project TimeGenerated, Type, Reason, ContainerAppName, Log

Снимок экрана: запрос журнала масштабирования KEDA.

Очистка ресурсов

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

az group delete --resource-group $RESOURCE_GROUP