Azure 容器应用通过一组声明性缩放规则管理自动水平缩放。 你可以使用自定义事件源创建自己的缩放规则。
在本教程中,请添加自定义缩放规则,以使用 Java 指标缩放容器应用并观察应用程序的缩放方式。
先决条件
- 拥有有效订阅的 Azure 帐户。 如果还没有订阅,可以 创建试用订阅。
- Azure CLI。
- 在 Azure 容器应用中部署的 Java 应用程序。
设置环境
使用以下步骤定义环境变量并设置环境。
创建变量来支持缩放配置。
export LOCATION=chinanorth3 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-identityVariable Description LOCATION创建 Azure 容器应用的 Azure 区域位置。 TENANT_ID你的租户的 ID。 SUBSCRIPTION_ID用于创建 Azure 容器应用的订阅 ID。 RESOURCE_GROUPAzure 容器应用的 Azure 资源组名称。 APP_NAMEAzure 容器应用的应用名称。 IDENTITY_NAME分配给 Azure 容器应用的托管标识的名称。 通过 Azure CLI 登录 Azure。
az cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.
为 Azure 容器应用设置托管标识
若要使用 Azure 容器应用平台指标进行缩放,需要一个托管标识来访问 Azure Monitor 中的指标。
创建用户分配的标识并将其分配给 Azure 容器应用。 可以按照此文档操作:添加用户分配的标识。 创建标识后,运行 CLI 命令来设置标识 ID。
USER_ASSIGNED_IDENTITY_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME --query "id" --output tsv)授予托管标识从 Azure Monitor 读取数据所需的“
Monitoring Reader”角色。 可以在 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 KEDA 缩放程序来定义容器应用缩放规则。
下面是用于设置缩放规则的核心元数据的列表。
| 元数据键 | Description |
|---|---|
| tenantId | 包含 Azure 资源的租户的 ID。 |
| 订阅编号 | 包含 Azure 资源的 Azure 订阅的 ID。 |
| resourceGroupName | Azure 资源的资源组的名称。 |
| resourceURI | 缩短了的 Azure 资源 URI,其格式为 <resourceProviderNamespace>/<resourceType>/<resourceName>。 |
| metricName | 要查询的指标的名称。 |
| metricAggregationType | Azure Monitor 指标的聚合方法。 选项包括“平均值”、“总计”、“最大值”。 |
| metricFilter | 筛选器的名称,使用官方文档中列出的维度可以更具体地对其进行说明。 (可选) |
| metricAggregationInterval | 指标收集时间,格式为“hh:mm:ss”(默认值:“0:5:0”,可选) |
| targetValue | 可触发缩放操作的目标值。 (此值可以是浮点数) |
为应用程序添加一项包含 Azure 容器应用的 Azure Monitor 指标的缩放规则。
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 使用资源 ID 为
USER_ASSIGNED_IDENTITY_ID的托管标识通过 Azure Monitor 进行身份验证并查询容器应用的指标。 - KEDA 会查询指标
JvmGcCount,并以聚合类型Total聚合 1 分钟内的指标值。 - 目标值设置为
30,这意味着 KEDA 使用desiredReplicas计算ceil(AggregatedMetricValue(JvmGcCount)/30)。
注释
指标 JvmGcCount 仅用作示例。 可以使用 Azure Monitor 中的任何指标。 在设置缩放规则之前,请查看 Azure 门户中的指标,以根据应用程序的要求确定适当的指标、聚合间隔和目标值。 此外,在选择自定义指标之前,请考虑使用内置的 HTTP/TCP 缩放规则,这些规则可以满足最常见缩放方案的要求。
在 Azure 门户中查看缩放(可选)
新修订准备就绪后,请向容器应用发送请求,以使用 Java 指标触发自动缩放。
- 转到 Azure 门户中 Azure 容器应用的“
Metrics”边栏选项卡。 - 添加一个图表,使用指标
jvm.gc.count和筛选器Revision=<your-revision>,使用Sum进行聚合,并按Replica进行拆分。 可以在此聊天中看到每个副本的JvmGcCount指标值。 - 添加一个图表,使用指标
jvm.gc.count和筛选器Revision=<your-revision>,并使用Sum进行聚合。 可以在此聊天中看到该修订的总聚合JvmGcCount指标值。 - 添加一个图表,使用指标
Replica Count和筛选器Revision=<your-revision>,并使用Max进行聚合。 可以在此聊天中看到修订的副本计数。
下面是示例缩放规则的示例指标快照。
- 最初,该应用有一个副本 (
minReplicas)。 - 请求激增导致 Java 应用频繁经历 JVM 垃圾回收 (GC)。
- KEDA 观察到
jvm.gc.count的聚合指标值增加到256,并将desiredReplicas值计算为ceil(256/30)=9。 - KEDA 将容器应用的副本计数扩展到 9。
- http 流量分布在更多副本上,减少了平均 GC 计数。
- 当没有请求传入时,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