Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Приложения контейнеров Azure управляют автоматическим горизонтальным масштабированием с помощью набора декларативных правил масштабирования. Вы можете создать собственные правила масштабирования с настраиваемыми источниками событий.
В этом руководстве вы добавите пользовательское правило масштабирования для масштабирования приложения-контейнера с помощью метрик Java и следите за масштабированием приложения.
Требования
- Учетная запись Azure с активной подпиской. Если у вас еще нет, его можно создать бесплатно.
- Azure CLI.
- Java-приложение, развернутое в Azure Container Apps.
Настройка среды
Чтобы определить переменные среды и настроить среду, выполните следующие действия.
Создайте переменные для поддержки конфигурации масштабирования.
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. Войдите в Azure с помощью Azure CLI.
az login
Настройте управляемое удостоверение для контейнерных приложений Azure
Чтобы масштабировать с использованием метрик платформы Azure Container Apps, необходимо управляемое удостоверение для получения доступа к метрикам из Azure Monitor.
Создайте назначаемое пользователем удостоверение и назначьте его приложениям контейнеров Azure. Вы можете следовать документу , добавив удостоверение, назначаемое пользователем. После создания удостоверения выполните команду CLI, чтобы задать идентификатор удостоверения.
USER_ASSIGNED_IDENTITY_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME --query "id" --output tsv)Предоставьте
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.
- Перейдите на вкладку
Metricsв портале Azure для приложений Azure Container Apps. - Добавьте диаграмму, используйте метрику
jvm.gc.countс фильтромRevision=<your-revision>, агрегированием с помощьюSumи разделениемReplica. Вы можете увидеть значение метрик для каждойJvmGcCountреплики в этом чате. - Добавьте диаграмму, используйте метрику
jvm.gc.countс фильтромRevision=<your-revision>и агрегированием с помощьюSum. Вы можете увидеть общее агрегированное значение метрики для ревизии в этом чате. - Добавьте диаграмму, используйте метрику
Replica Countс фильтромRevision=<your-revision>и агрегированием с помощьюMax. Вы можете увидеть количество реплик для ревизии в этом чате.
Ниже приведен пример снимка метрик для правила масштабирования.
- Изначально для приложения существует одна реплика (
minReplicas). - Всплеск запросов заставляет приложение Java часто запускать сборку мусора виртуальной машины Java (JVM).
- KEDA наблюдает, что агрегированное значение метрики для
jvm.gc.countувеличилось до256, и вычисляет значениеdesiredReplicasкакceil(256/30)=9. - KEDA масштабирует число реплик приложения-контейнера до 9.
- Http-трафик распределяется по нескольким репликам, уменьшая среднее число сборок.
- Число GC еще больше уменьшается, когда запросы не поступают.
- После периода охлаждения KEDA масштабирует число реплик до
minReplicas=1.
Журнал масштабирования
Чтобы просмотреть журналы масштабирования KEDA, можно запустить запрос в Logs панели.
ContainerAppSystemLogs
| where RevisionName == "<your-revision>"
| where EventSource == "KEDA"
| project TimeGenerated, Type, Reason, ContainerAppName, Log
Очистка ресурсов
Ресурсы, созданные в этом руководстве, влияют на счет Azure. Если вы не собираетесь использовать эти службы в долгосрочной перспективе, выполните следующую команду, чтобы удалить все, созданное в этом руководстве.
az group delete --resource-group $RESOURCE_GROUP