你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

修改产能预留

适用于:✔️ Linux VM ✔️ Windows VM ✔️ 统一规模集 ✔️ 灵活规模集

创建产能预留组和产能预留后,你可能需要修改预留。 本文介绍如何使用 API、Azure 门户和 PowerShell 执行以下操作。

  • 更新产能预留中预留的实例数。
  • 重设与产能预留组关联的 VM 的大小。
  • 删除产能预留组和产能预留。

更新预留的实例数

更新产能预留中预留的虚拟机 (VM) 实例数。

重要

在极少数情况下,如果 Azure 无法满足增加现有产能预留的预留数量的请求,预留状态可能会更改为“失败”且变得不可用,直到数量恢复到原始数额

    PATCH https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/CapacityReservationGroups/{CapacityReservationGroupName}/capacityReservations/{capacityReservationName}?api-version=2021-04-01

在请求正文中,将 capacity 属性更新为要保留的新计数:

{
    "sku":
    {
        "capacity": 5
    }
} 

在此示例中,capacity 属性现在设置为 5

重设与产能预留组关联的 VM 的大小

如果要重设大小的 VM 当前已附加到产能预留组,并且该组没有目标大小的预留,则必须执行以下选项之一:

  • 为该大小创建新预留。
  • 在重设大小之前,从预留组中删除 VM。

检查目标大小是否属于预留组。

  1. 获取组内所有产能预留的名称。

        GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/CapacityReservationGroups/{CapacityReservationGroupName}?api-version=2021-04-01
    
    { 
        "name": "<CapacityReservationGroupName>", 
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{CapacityReservationGroupName}", 
        "type": "Microsoft.Compute/capacityReservationGroups", 
        "location": "eastUS", 
        "zones": [ 
            "1" 
        ], 
        "properties": { 
            "capacityReservations": [ 
                { 
                    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{CapacityReservationGroupName}/capacityReservations/{capacityReservationName1}" 
                }, 
    { 
                    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{CapacityReservationGroupName}/capacityReservations/{capacityReservationName2}" 
                } 
            ] 
        } 
    } 
    
  2. 查找每个预留所预留的 VM 大小。 以下示例适用于 capacityReservationName1,但可以对其他预留重复此步骤。

        GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/CapacityReservationGroups/{CapacityReservationGroupName}/capacityReservations/{capacityReservationName1}?api-version=2021-04-01
    
    { 
        "name": "capacityReservationName1", 
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{CapacityReservationGroupName}/capacityReservations/{capacityReservationName1}", 
        "type": "Microsoft.Compute/capacityReservationGroups/capacityReservations", 
        "location": "eastUS", 
        "sku": { 
            "name": "Standard_D2s_v3", 
            "capacity": 3 
        }, 
        "zones": [ 
            "1" 
        ], 
        "properties": { 
            "reservationId": "<reservationId>", 
            "provisioningTime": "<provisioningTime>", 
            "provisioningState": "Succeeded" 
        } 
    }  
    
  3. 请考虑下列情形:

删除产能预留组和产能预留

如果某个组的所有成员产能预留均已删除且没有 VM 与该组关联,那么 Azure 允许删除该组。

若要删除产能预留,请先查找与其关联的所有 VM。 VM 列表位于 virtualMachinesAssociated 属性下。

首先,查找与产能预留组关联的所有 VM 并将它们解除关联:

    GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/CapacityReservationGroups/{CapacityReservationGroupName}?$expand=instanceView&api-version=2021-04-01
{ 
    "name": "<capacityReservationGroupName>", 
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", 
    "type": "Microsoft.Compute/capacityReservationGroups", 
    "location": "eastus", 
    "properties": { 
        "capacityReservations": [ 
            { 
                "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}/capacityReservations/{capacityReservationName}" 
            } 
        ], 
        "virtualMachinesAssociated": [ 
            { 
                "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{VirtualMachineName1}" 
            }, 
            { 
                "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{VirtualMachineName2}" 
            } 
        ], 
        "instanceView": { 
            "capacityReservations": [ 
                { 
                    "name": "{capacityReservationName}", 
                    "utilizationInfo": { 
                        "virtualMachinesAllocated": [ 
                            { 
                                "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{VirtualMachineName1}" 
                            } 
                        ] 
                    }, 
                    "statuses": [ 
                        { 
                            "code": "ProvisioningState/succeeded", 
                            "level": "Info", 
                            "displayStatus": "Provisioning succeeded", 
                            "time": "<time>" 
                        } 
                    ] 
                } 
            ] 
        } 
    } 
}  

从上述响应中,查找 virtualMachinesAssociated 属性下所有 VM 的名称。 按照删除与产能预留的 VM 关联中的步骤将它们从产能预留组中删除。

从产能预留组中删除所有 VM 后,删除成员产能预留:

DELETE https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/CapacityReservationGroups/{CapacityReservationGroupName}/capacityReservations/{capacityReservationName}?api-version=2021-04-01

最后,删除父产能预留组:

DELETE https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/CapacityReservationGroups/{CapacityReservationGroupName}?api-version=2021-04-01

还原实例数量

无论与预留关联的 VM 数量有多少,格式标准的预留数量减少请求都应始终成功。 但是,要增加预留数量,可能需要更多配额,并且需要 Azure 才能满足对更多容量的请求。 在极少数情况下,如果 Azure 无法满足增加现有预留的预留数量的请求,预留状态可能会更改为“失败”且变得不可用,直到预留数量恢复到原始数额

注意

如果预留处于“失败”状态,则与该预留关联的所有 VM 都将继续正常工作

例如,假设 myCapacityReservation 预留了 5 个实例。 你请求 5 个额外实例,使得总预留数量达到 10。 但是,由于该区域的容量受到限制,Azure 无法满足请求的额外 5 个实例。 在这种情况下,myCapacityReservation 未能达到预期的 10 个预留实例的状态,并且状态会更改为“失败”

要解决此问题,请执行以下步骤来查找旧的预留数量值:

  1. 在 Azure 门户中,转到应用程序更改分析
  2. 在筛选器中选择适用的“订阅”、“资源组”和“时间范围”设置。 在“时间范围”筛选器中,最多只能追溯到过去 14 天
  3. 搜索产能预留的名称。
  4. 查找对该预留的 sku.capacity 属性所做的更改。 旧的预留数量就是“旧值”列下的值

myCapacityReservation 更新为旧的预留数量。 更新后,预留可立即供 VM 使用。

下一步