针对 Azure 虚拟机规模集实例的实例保护

Azure 虚拟机规模集可以通过自动缩放提高工作负荷的弹性,让你可以配置何时对基础结构进行横向扩展,何时对其进行横向缩减。 规模集还可以让你通过不同的升级策略设置集中管理、配置和更新大量 VM。 可以针对规模集模型配置更新,此时如果已将升级策略设置为“自动”或“滚动”,则新配置会自动应用到每个规模集实例。

当应用程序处理流量时,有时可能需要对特定规模集实例进行不同于其他实例的处理。 例如,规模集中的某些实例可能正在执行长时间运行的操作,需要在这些操作完成后再横向缩减这些实例。 还可能需要让规模集中的一些实例专门执行其他任务或不同于规模集的其他成员的任务。 这些“特殊的”VM 不能与规模集中的其他实例一起修改。 实例保护提供的其他控制可以为应用程序实现这些方案和其他方案。

本文介绍如何对规模集实例应用和使用不同的实例保护功能。

实例保护类型

规模集提供两种类型的实例保护功能:

  • 防止进行横向缩减

    • 通过规模集实例上的 protectFromScaleIn 属性启用
    • 防止对实例进行自动缩放启动的横向缩减
    • 不阻止用户启动的实例操作(包括实例删除)
    • 不阻止在规模集上启动的操作(升级、重置映像、解除分配等)
  • 防止进行规模集操作

    • 通过规模集实例上的 protectFromScaleSetActions 属性启用
    • 防止对实例进行自动缩放启动的横向缩减
    • 防止对实例执行在规模集上启动的操作(例如升级、重置映像、解除分配等)
    • 不阻止用户启动的实例操作(包括实例删除)
    • 不阻止删除整个规模集

防止进行横向缩减

可以在规模集实例创建以后将实例保护应用到这些实例。 只能在实例模型上应用和修改保护,不能在规模集模型上进行。

可以通过多种方式将横向缩减保护应用到规模集实例,详见以下示例。

Azure 门户

可以通过 Azure 门户对规模集中的实例应用横向缩减保护。 无法一次调整多个实例。 对要保护的每个实例重复以下步骤。

  1. 转到现有虚拟机规模集。
  2. 从左侧菜单的“设置”下选择“实例” 。
  3. 选择要保护的实例的名称。
  4. 选择“保护策略”选项卡。
  5. 在“保护策略”边栏选项卡中,选择“防止进行横向缩减”选项。
  6. 选择“保存”。

REST API

以下示例将横向缩减保护应用到规模集中的实例。

PUT on `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualMachines/{instance-id}?api-version=2019-03-01`
{
  "properties": {
    "protectionPolicy": {
      "protectFromScaleIn": true
    }
  }        
}

注意

在灵活业务流程模式下,只有 API 版本 2023-09-01 及更高版本支持实例保护。 对于统一业务流程模式,API 版本 2019-03-01 及更高版本提供实例保护。

Azure PowerShell

使用 Update-AzVmssVM cmdlet 将横向缩减保护应用到规模集实例。

以下示例将横向缩减保护应用到规模集中实例 ID 为 0 的实例。

Update-AzVmssVM `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myVMScaleSet" `
  -InstanceId 0 `
  -ProtectFromScaleIn $true

Azure CLI 2.0

使用 az vmss update 将横向缩减保护应用到规模集实例。

以下示例将横向缩减保护应用到规模集中实例 ID 为 0 的实例。

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --instance-id 0 \
  --protect-from-scale-in true

防止进行规模集操作

可以在规模集实例创建以后将实例保护应用到这些实例。 只能在实例模型上应用和修改保护,不能在规模集模型上进行。

防止对实例进行规模集操作时,也会防止对实例进行自动缩放启动的横向缩减。

可以通过多种方式将规模集操作保护应用到规模集实例,详见以下示例。

Azure 门户

可以通过 Azure 门户将“防止进行规模集操作”应用到规模集中的实例。 无法一次调整多个实例。 对要保护的每个实例重复以下步骤。

  1. 转到现有虚拟机规模集。
  2. 从左侧菜单的“设置”下选择“实例” 。
  3. 选择要保护的实例的名称。
  4. 选择“保护策略”选项卡。
  5. 在“保护策略”边栏选项卡中,选择“防止进行规模集操作”选项。
  6. 选择“保存”。

REST API

以下示例将规模集操作保护应用到规模集中的实例。

PUT on `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vMScaleSetName}/virtualMachines/{instance-id}?api-version=2019-03-01`
{
  "properties": {
    "protectionPolicy": {
      "protectFromScaleIn": true,
      "protectFromScaleSetActions": true
    }
  }        
}

注意

只有 API 2019-03-01 及更高版本支持实例保护。
防止对实例进行规模集操作时,也会防止对实例进行通过自动缩放启动的横向缩减。 设置 "protectFromScaleSetActions": true 时,不能指定 "protectFromScaleIn": false

Azure PowerShell

使用 Update-AzVmssVM cmdlet 将规模集操作保护应用到规模集实例。

以下示例将规模集操作保护应用到规模集中实例 ID 为 0 的实例。

Update-AzVmssVM `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myVMScaleSet" `
  -InstanceId 0 `
  -ProtectFromScaleIn $true `
  -ProtectFromScaleSetAction $true

Azure CLI 2.0

使用 az vmss update 将规模集操作保护应用到规模集实例。

以下示例将规模集操作保护应用到规模集中实例 ID 为 0 的实例。

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --instance-id 0 \
  --protect-from-scale-in true \
  --protect-from-scale-set-actions true

疑难解答

不能在规模集模型上设置 protectionPolicy

只能在规模集实例上应用实例保护,不能在规模集模型上应用。

不能在规模集实例模型上设置 protectionPolicy

默认情况下,保护策略不会在实例创建时应用到实例。

可以在规模集实例创建以后将实例保护应用到这些实例。

不能应用实例保护

只有 API 2019-03-01 及更高版本支持实例保护。 请请检查所使用的 API 版本并根据需要进行更新。 可能还需要将 PowerShell 或 CLI 更新到最新版本。

后续步骤

了解如何在虚拟机规模集上部署应用程序