你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用预测性自动缩放,在虚拟机规模集中先于负载需求进行横向扩展
预测性自动缩放使用机器学习,通过周期性工作负载模式来帮助管理和缩放 Azure 虚拟机规模集。 它根据历史 CPU 使用模式来预测虚拟机规模集的总体 CPU 负载。 它通过观察历史使用情况并从中进行学习来预测总体 CPU 负载。 此过程可确保根据需求及时进行横向扩展。
预测性自动缩放至少需要 7 天的历史数据来提供预测。 最大抽样期为 15 天的滚动窗口,可提供最佳预测结果。 对于每月或每年工作负载模式,请使用基于计划的自动缩放或基于指标的自动缩放配置。
预测性自动缩放遵循为虚拟机规模集设置的缩放边界。 当系统预测虚拟机规模集的 CPU 负载百分比将跨越横向扩展边界时,系统将根据你的规格添加新实例。 你还可以根据需要配置预配新实例的提前时间,最多在预计的工作负荷高峰出现前 1 小时。
“仅预测”允许你查看预测的 CPU 预测,而不根据预测触发缩放操作。 然后,在启用预测性自动缩放功能之前,可将预测与实际工作负荷模式进行比较,从而树立对预测模型的信心。
预测性自动缩放产品/服务
- 预测性自动缩放适用于显示周期性 CPU 使用模式的工作负载。
- 仅对虚拟机规模集提供支持。
- 目前仅支持聚合类型为“Average”的“CPU 百分比”指标。
- 预测性自动缩放仅支持横向扩展。 配置标准自动缩放以管理横向缩减操作。
- 预测性自动缩放仅适用于 Azure 商业云。 目前不支持 Azure 政府云。
通过 Azure 门户启用预测性自动缩放或“仅预测”
转到“虚拟机规模集”屏幕,选择“缩放”。
在“自定义自动缩放”部分下,将显示“预测性自动缩放”。
使用下拉列表选项,可以:
- 禁用预测性自动缩放。 首次登陆到预测性自动缩放页面时,“禁用”是默认选项。
- 启用“仅预测”模式。
- 启用预测性自动缩放。
注意
必须先设置标准响应式自动缩放条件,然后才能启用预测性自动缩放或“仅预测”模式。
若要启用“仅预测”模式,请从下拉列表中选择它。 根据 CPU 百分比定义横向扩展触发器。 然后,选择“保存”。 相同的过程也适用于启用预测性自动缩放。 若要禁用预测性自动缩放或“仅预测”模式,请从下拉列表中选择“禁用”。
如果需要,请指定预启动时间,这样,在需要实例之前,实例就已完全运行。 可在所需的预测时间之前 5 到 60 分钟预启动实例。
在启用预测性自动缩放或“仅预测”模式并将其保存后,请选择“预测性图表”。
你可以看到三个图表:
- 顶部图表显示实际总 CPU 百分比与预测总 CPU 百分比的叠加比较。 显示的图表的时间跨度是从过去 7 天到接下来的 24 小时。
- 中间图表显示过去 7 天内运行的最大实例数。
- 底部图表显示过去 7 天内的当前平均 CPU 利用率。
使用 Azure 资源管理器模板来启用
检索你的虚拟机规模集的虚拟机规模集资源 ID 和资源组。 例如:/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/patest2/providers/Microsoft.Compute/virtualMachineScaleSets/patest2
使用虚拟机规模集资源 ID 和任何自动缩放设置参数更新 autoscale_only_parameters 文件。
使用 PowerShell 命令部署包含自动缩放设置的模板。 例如:
PS G:\works\kusto_onboard\test_arm_template> new-azurermresourcegroupdeployment -name binzAutoScaleDeploy -resourcegroupname cpatest2 -templatefile autoscale_only.json -templateparameterfile autoscale_only_parameters.json
PS C:\works\autoscale\predictive_autoscale\arm_template> new-azurermresourcegroupdeployment -name binzAutoScaleDeploy - resourcegroupname patest2 -templatefile autoscale_only_binz.json -templateparameterfile autoscale_only_parameters_binz.json
DeploymentName : binzAutoScaleDeploy
ResourceGroupName : patest2
ProvisioningState : Succeeded
Timestamp : 3/30/2021 10:11:02 PM
Mode : Incremental
TemplateLink
Parameters :
Name Type Value
================ ============================= ====================
targetVmssResourceld String /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/patest2/providers/Microsoft.Compute/virtualMachineScaleSets/patest2
location String East US
minimumCapacity Int 1
maximumCapacity Int 4
defaultCapacity Int 4
metricThresholdToScaleOut Int 50
metricTimeWindowForScaleOut String PT5M
metricThresholdToScaleln Int 30
metricTimeWindowForScaleln String PT5M
changeCountScaleOut Int 1
changeCountScaleln Int 1
predictiveAutoscaleMode String Enabled
Outputs :
Name Type Value
================ ============================== ====================
targetVmssResourceld String /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/patest2/providers/Microsoft.Compute/virtualMachineScaleSets/patest2
settingLocation String East US
predictiveAutoscaleMode String Enabled
DeloymentDebugLoglevel :
PS C:\works\autoscale\predictive_autoscale\arm_template>
autoscale_only.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"targetVmssResourceId": {
"type": "string"
},
"location": {
"type": "string"
},
"minimumCapacity": {
"type": "Int",
"defaultValue": 2,
"metadata": {
"description": "The minimum capacity. Autoscale engine will ensure the instance count is at least this value."
}
},
"maximumCapacity": {
"type": "Int",
"defaultValue": 5,
"metadata": {
"description": "The maximum capacity. Autoscale engine will ensure the instance count is not greater than this value."
}
},
"defaultCapacity": {
"type": "Int",
"defaultValue": 3,
"metadata": {
"description": "The default capacity. Autoscale engine will preventively set the instance count to be this value if it can not find any metric data."
}
},
"metricThresholdToScaleOut": {
"type": "Int",
"defaultValue": 30,
"metadata": {
"description": "The metric upper threshold. If the metric value is above this threshold then autoscale engine will initiate scale out action."
}
},
"metricTimeWindowForScaleOut": {
"type": "string",
"defaultValue": "PT5M",
"metadata": {
"description": "The metric look up time window."
}
},
"metricThresholdToScaleIn": {
"type": "Int",
"defaultValue": 20,
"metadata": {
"description": "The metric lower threshold. If the metric value is below this threshold then autoscale engine will initiate scale in action."
}
},
"metricTimeWindowForScaleIn": {
"type": "string",
"defaultValue": "PT5M",
"metadata": {
"description": "The metric look up time window."
}
},
"changeCountScaleOut": {
"type": "Int",
"defaultValue": 1,
"metadata": {
"description": "The instance count to increase when autoscale engine is initiating scale out action."
}
},
"changeCountScaleIn": {
"type": "Int",
"defaultValue": 1,
"metadata": {
"description": "The instance count to decrease the instance count when autoscale engine is initiating scale in action."
}
},
"predictiveAutoscaleMode": {
"type": "String",
"defaultValue": "ForecastOnly",
"metadata": {
"description": "The predictive Autoscale mode."
}
}
},
"variables": {
},
"resources": [{
"type": "Microsoft.Insights/autoscalesettings",
"name": "cpuPredictiveAutoscale",
"apiVersion": "2022-10-01",
"location": "[parameters('location')]",
"properties": {
"profiles": [{
"name": "DefaultAutoscaleProfile",
"capacity": {
"minimum": "[parameters('minimumCapacity')]",
"maximum": "[parameters('maximumCapacity')]",
"default": "[parameters('defaultCapacity')]"
},
"rules": [{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricNamespace": "",
"metricResourceUri": "[parameters('targetVmssResourceId')]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "[parameters('metricTimeWindowForScaleOut')]",
"timeAggregation": "Average",
"operator": "GreaterThan",
"threshold": "[parameters('metricThresholdToScaleOut')]"
},
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "[parameters('changeCountScaleOut')]",
"cooldown": "PT5M"
}
}, {
"metricTrigger": {
"metricName": "Percentage CPU",
"metricNamespace": "",
"metricResourceUri": "[parameters('targetVmssResourceId')]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "[parameters('metricTimeWindowForScaleIn')]",
"timeAggregation": "Average",
"operator": "LessThan",
"threshold": "[parameters('metricThresholdToScaleIn')]"
},
"scaleAction": {
"direction": "Decrease",
"type": "ChangeCount",
"value": "[parameters('changeCountScaleOut')]",
"cooldown": "PT5M"
}
}
]
}
],
"enabled": true,
"targetResourceUri": "[parameters('targetVmssResourceId')]",
"predictiveAutoscalePolicy": {
"scaleMode": "[parameters('predictiveAutoscaleMode')]"
}
}
}
],
"outputs": {
"targetVmssResourceId" : {
"type" : "string",
"value" : "[parameters('targetVmssResourceId')]"
},
"settingLocation" : {
"type" : "string",
"value" : "[parameters('location')]"
},
"predictiveAutoscaleMode" : {
"type" : "string",
"value" : "[parameters('predictiveAutoscaleMode')]"
}
}
}
autoscale_only_parameters.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"targetVmssResourceId": {
"value": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/patest2/providers/Microsoft.Compute/virtualMachineScaleSets/patest2"
},
"location": {
"value": "East US"
},
"minimumCapacity": {
"value": 1
},
"maximumCapacity": {
"value": 4
},
"defaultCapacity": {
"value": 4
},
"metricThresholdToScaleOut": {
"value": 50
},
"metricTimeWindowForScaleOut": {
"value": "PT5M"
},
"metricThresholdToScaleIn": {
"value": 30
},
"metricTimeWindowForScaleIn": {
"value": "PT5M"
},
"changeCountScaleOut": {
"value": 1
},
"changeCountScaleIn": {
"value": 1
},
"predictiveAutoscaleMode": {
"value": "Enabled"
}
}
}
有关 Azure 资源管理器模板的详细信息,请参阅资源管理器模板概述。
常见问题
本部分回答常见问题。
为什么预测性图表上的 CPU 百分比超过 100%?
预测性图表显示规模集中所有计算机的累积负载。 如果规模集中有 5 个 VM,则所有 VM 的最大累积负载将为 500%,即每个 VM 的 100% 最大 CPU 负载的 5 倍。
为虚拟机规模集启用预测性自动缩放时,随着时间的推移会发生什么情况?
预测性自动缩放使用正在运行的虚拟机规模集的历史记录。 如果规模集运行不到 7 天,则会收到一条消息,指出模型正在接受训练。 有关详细信息,请参阅无预测数据消息。 随着时间的推移,预测会得到改进,在创建虚拟机规模集 15 天后达到最大准确度。
如果工作负荷模式发生了变化,但仍是周期性的,则模型会识别该变化并开始调整预测。 预测会随着时间的推移而改进。 在流量模式更改后的 15 天内,达到最大准确度。 请记住,标准自动缩放规则仍然适用。 如果出现了新的意料之外的流量增长,虚拟机规模集仍将横向扩展以满足需求。
如果模型不适合我,该如何做?
该建模最适合表现出周期性的工作负载。 建议首先通过启用“仅预测”来评估预测,这将使用实际观察到的使用率覆盖规模集的预测 CPU 使用率。 比较和评估结果后,如果模型预测与场景足够接近,可以选择基于预测指标启用缩放。
为什么在启用预测性自动缩放之前需要启用标准自动缩放?
如果预测模型无法很好地适用于你的场景,则标准自动缩放是必要的后备方案。 标准自动缩放将涵盖不属于典型 CPU 负载模式的意外负载峰值。 如果在检索预测数据时出错,它还会提供回退。
如果同时设置了预测性和标准自动缩放规则,哪个规则将生效?
如果 CPU 负载出现意外峰值,或者在检索预测数据时发生错误,则使用标准自动缩放规则
我们使用标准自动缩放规则中设置的阈值来了解何时需要横向扩展以及根据多少实例进行扩展。 如果希望虚拟机规模集在 CPU 使用率超过 70% 时横向扩展,并且实际或预测数据显示 CPU 使用率为 70% 或超过 70%,则会发生横向扩展。
错误和警告
本部分解决常见错误和警告。
未启用标准自动缩放
看到以下错误消息:
若要启用预测性自动缩放,请基于“CPU 百分比”指标创建横向扩展规则。 单击此处转到“配置”选项卡以设置自动缩放规则。
此消息表示你试图在启用标准自动缩放,并设置为将“CPU 百分比”指标与“Average”聚合类型一起使用之前启用预测性自动缩放。
无预测数据
在某些情况下,预测图表上不会显示数据。 此行为不是错误,而是预期行为。
禁用预测性自动缩放后,你会收到一条以“没有可显示的数据...”开头的消息,然后会看到说明,指出要启用哪些功能才能查看预测性图表。
首次创建虚拟机规模集并启用“仅预测”模式时,你会收到“正在训练预测数据...”消息以及返回查看图表的时间。
后续步骤
在以下文章中了解有关自动缩放的详细信息: