你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用滚动升级策略是为虚拟机规模集中的实例应用更新的最安全方法。 分批执行更新可确保规模集维护一定数量的可用于获取流量的实例,这意味着无需取消整个工作负载即可进行更改。
滚动升级策略最适合生产工作负载。
要求
在使用灵活业务流程的虚拟机规模集上使用滚动升级策略时,规模集还必须使用应用程序运行状况扩展来监视应用程序运行状况。
在使用统一业务流程的虚拟机规模集上使用滚动升级策略时,规模集还必须具有运行状况探测或使用应用程序运行状况扩展来监视应用程序运行状况。
如果将虚拟机附加到虚拟机规模集,则附加的虚拟机还应具有应用程序运行状况扩展。 如果附加的虚拟机未配置运行状况扩展并报告应用程序运行状况,则滚动升级可能会受到影响。
概念
升级策略模式与滚动升级策略
升级策略模式和滚动升级策略是升级策略的嵌套但不同的设置。 这意味着,虽然你的规模集可能使用自动或手动升级策略模式,但仍然有一个关联的滚动升级策略。 此滚动升级策略具有默认设置,但也可以对其进行配置以满足你的业务需求。
"properties": {
"upgradePolicy": {
"mode": "<Automatic, Manual, Rolling>",
"rollingUpgradePolicy": {
"maxBatchInstancePercent": 20,
"maxUnhealthyInstancePercent": 20,
"maxUnhealthyUpgradedInstancePercent": 20,
"pauseTimeBetweenBatches": "PT2S",
"MaxSurge": "false"
}
}
}
对于规模集模型更新,升级策略模式将决定规模集中的实例如何保持最新。
滚动升级策略配置设置
设置 |
说明 |
滚动升级批次大小百分比 |
指定单次升级规模集的总实例数。
示例:当规模集中有 10 个实例时,批次大小为 20% 意味着各个升级批次中的实例数量为 2。 |
两个批次之间的暂停时间(秒) |
指定希望规模集在完成批量升级和启动新的批量升级之间的等待时长。
示例:10 秒的暂停时间意味着成功完成一个批次后,规模集将等待 10 秒,然后再开始下一个批次。 |
最大非正常实例百分比 |
指定允许在滚动升级之前和期间标记为不正常的实例总数。
示例:最大不正常实例百分比为 20 意味着如果你的规模集包含 10 个实例,并且整个规模集中出现不少于 2 个报告为不正常的实例,则滚动升级将停止。 |
最大非正常升级百分比 |
指定允许在升级后标记为不正常的实例总数。
示例:最大不正常升级百分比为 20 意味着如果你的规模集包含 10 个实例,并且在升级后,整个规模集中出现不少于 2 个报告为不正常的实例,则滚动升级将被取消。 |
优先处理不正常实例 |
在升级报告为处于正常状态的实例之前,告知规模集升级报告为不正常状态的实例。
示例:如果规模中的某些实例在滚动升级开始时失败或运行状况不佳,则规模集会先更新这些实例。 |
启用跨区域升级 |
允许规模集在确定批次时忽略可用性区域边界。 这实质上支持滚动升级将规模集视为地区性部署,而不是区域性部署。 |
MaxSurge |
将使用最新的规模模型分批创建新实例。 在一批新实例成功创建并被标记为正常后,规模集就会批量删除与旧规模集模型匹配的实例。 这一直持续到所有实例都处于最新状态。 使用 MaxSurge 滚动升级有助于在升级事件期间增加服务运行时间。
有关详细信息,请参阅 MaxSurge 滚动升级。 |
设置或更新滚动升级策略
可以在创建规模集期间配置滚动升级策略。 由于滚动升级策略需要成功监控应用程序运行状况,并且有特定设置决定升级的完成方式,因此建议首先使用手动升级模式创建规模集。 确认系统成功报告应用程序运行状况后,请将升级策略从手动更新为滚动更新。
选择要为其更改升级策略的虚拟机规模集。 在“设置”下的菜单中,选择“升级策略”,然后从下拉菜单中选择“滚动 - 分批实现升级,可选择暂停”。
使用 az vmss update 更新现有虚拟机规模集。
az vmss update \
--name myScaleSet \
--resource-group myResourceGroup \
--set upgradePolicy.mode=Rolling \
--max-batch-instance-percent 10 \
--max-unhealthy-instance-percent 20 \
--max-unhealthy-upgraded-instance-percent 20 \
--prioritize-unhealthy-instances true \
--pause-time-between-batches PT2S \
--max-surge true
使用 Update-AzVmss 更新现有虚拟机规模集。
$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
Set-AzVmssRollingUpgradePolicy `
-VirtualMachineScaleSet $VMSS `
-MaxBatchInstancePercent 20 `
-MaxUnhealthyInstancePercent 20 `
-MaxUnhealthyUpgradedInstancePercent 20 `
-PauseTimeBetweenBatches "PT30S" `
-EnableCrossZoneUpgrade True `
-PrioritizeUnhealthyInstance True `
-MaxSurge True
Update-Azvmss -ResourceGroupName "myResourceGroup" `
-Name "myScaleSet" `
-UpgradePolicyMode "Rolling" `
-VirtualMachineScaleSet $vmss
更新 ARM 模板的属性部分,将升级策略设置为“滚动”然后设置各个滚动升级选项。
"properties": {
"singlePlacementGroup": false,
"upgradePolicy": {
"mode": "Rolling",
"rollingUpgradePolicy": {
"maxBatchInstancePercent": 20,
"maxUnhealthyInstancePercent": 20,
"maxUnhealthyUpgradedInstancePercent": 20,
"pauseTimeBetweenBatches": "PT2S",
"MaxSurge": "true"
}
}
}
获取滚动升级状态
在 Azure 门户中触发滚动升级时,规模集资源顶部会显示一个横幅,告知用户滚动升级正在进行中。 可以单击“查看详细信息”以查看滚动升级的状态。 完成所有更新后,横幅将消失。
此外,还可以在活动日志中确切地查看正在推出的更改。 滚动升级事件位于“创建或更新虚拟机规模集”下。 选择“更改历史记录”以查看正在更新的内容。
可以使用 az vmss rolling-upgrade get-latest 获取正在进行的滚动升级的状态。
az vmss rolling-upgrade get-latest \
--name myScaleSet \
--resource-group myResourceGroup
{
"location": "eastus",
"policy": {
"maxBatchInstancePercent": 20,
"maxSurge": false,
"maxUnhealthyInstancePercent": 20,
"maxUnhealthyUpgradedInstancePercent": 20,
"pauseTimeBetweenBatches": "PT0S",
"prioritizeUnhealthyInstances": true,
"rollbackFailedInstancesOnPolicyBreach": false
},
"progress": {
"failedInstanceCount": 0,
"inProgressInstanceCount": 2,
"pendingInstanceCount": 0,
"successfulInstanceCount": 8
},
"runningStatus": {
"code": "RollingForward",
"lastAction": "Start",
"lastActionTime": "2024-01-12T20:20:04.1863772+00:00",
"startTime": "2024-01-12T20:20:04.4363788+00:00"
},
"type": "Microsoft.Compute/virtualMachineScaleSets/rollingUpgrades"
}
可以使用 Get-AzVmssRollingUpgrade 获取正在进行的滚动升级的状态。
Get-AzVMssRollingUpgrade `
-ResourceGroupName myResourceGroup `
-VMScaleSetName myScaleSet
Policy :
MaxBatchInstancePercent : 20
MaxUnhealthyInstancePercent : 20
MaxUnhealthyUpgradedInstancePercent : 20
PauseTimeBetweenBatches : PT0S
PrioritizeUnhealthyInstances : True
RollbackFailedInstancesOnPolicyBreach : False
MaxSurge : False
RunningStatus :
Code : RollingForward
StartTime : 1/12/2024 8:20:04 PM
LastAction : Start
LastActionTime : 1/12/2024 8:20:04 PM
Progress :
SuccessfulInstanceCount : 8
FailedInstanceCount : 0
InProgressInstanceCount : 2
PendingInstanceCount : 0
Type : Microsoft.Compute/virtualMachineScaleSets/rollingUpgrades
Location : eastus
Tags : {}
取消滚动升级
可以使用 Azure 门户取消滚动升级,方法是在规模集上方的横幅中选择“查看详细信息”。 在弹出窗口中,可以查看当前状态,底部是“取消升级”选项。
可以使用 az vmss rolling-upgrade cancel 停止正在进行的滚动升级。 如果在运行命令后未看到任何输出,则表示取消请求成功。
az vmss rolling-upgrade cancel \
--name myScaleSet \
--resource-group myResourceGroup
可以使用 Stop-AzVmssRollingUpgrade 停止正在进行的滚动升级。
Stop-AzVmssRollingUpgrade `
-ResourceGroupName myResourceGroup `
-VMScaleSetName myScaleSet
重启滚动升级
如果决定取消滚动升级或升级由于任何策略漏洞而停止,则令另一规模集模型发生更改的任何其他更改都会触发新的滚动升级。 如果要重启滚动升级,请触发通用模型更新。 这会让规模集检查所有实例是否都是最新的模型。
若要在取消滚动升级后重启滚动升级,可触发规模集以检查规模集中的实例是否是最新的规模集模型。 可以通过运行 az vmss update 来执行此操作。
az vmss update \
--name myScaleSet \
--resource-group myResourceGroup
若要在取消滚动升级后重启滚动升级,需要触发规模集以检查规模集中的实例是否是最新的规模集模型。 可以通过运行 Update-AzVmss 来执行此操作。
$VMSS = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
Update-AzVmss `
-ResourceGroupName myResourceGroup `
-Name myScaleSet `
-VirtualMachineScaleSet $VMSS
后续步骤
了解如何在虚拟机规模集上执行手动升级。