完成创建虚拟机 (VM) 后,可以通过更改 VM 大小来扩展或缩减 VM。 在某些情况下,必须先解除分配 VM。 如果新的大小在当前托管 VM 的同一硬件群集上不可用,则可能需要解除分配。 重要的是要理解,即使不需要解除分配,但如果虚拟机当前正在运行,则更改其大小也会导致其重启。 因此,应该考虑将更改 VM 大小视为一个破坏性过程,尤其是对于托管在 VM 上的有状态工作负荷而言。
警告
如果虚拟机当前正在运行,更改其大小会导致其重启。
解除分配 VM 也会释放分配给该 VM 的所有动态 IP 地址。 OS 和数据磁盘不受影响。
如果调整大小作失败,VM 模型仍将显示请求的大小,但 VM 将继续在其以前的大小上运行,直到成功分配大小。 此行为适用于 Azure管理门户和所有 GET操作,因为显示的大小始终反映最新的已应用配置,而不是实际运行大小。
若要使用 Azure 门户更改 VM 大小,请执行以下作:
- 打开 Azure 门户。
- 在搜索中键入“虚拟机”。 在“服务”下,选择“虚拟机”。
- 在“虚拟机”页中,选择要调整大小的虚拟机。
- 在左侧菜单中的 “可用性 + 缩放 ”部分,选择 大小。
- 从可用大小列表中选择新的兼容大小,然后选择“ 调整大小”。
如果 VM 仍在运行并且你没有在列表中看到所需的大小,则停止虚拟机可能会显示更多大小。
若要使用 PowerShell 更改 VM 的大小,请执行以下作:
设置资源组和 VM 名称变量。 将值替换为要调整大小的 VM 的信息。
$resourceGroup = "myResourceGroup"
$vmName = "myVM"
列出托管 VM 的硬件群集上可用的 VM 大小。
Get-AzVMSize -ResourceGroupName $resourceGroup -VMName $vmName
将 VM 大小调整为新大小。
$vm = Get-AzVM -ResourceGroupName $resourceGroup -VMName $vmName
$vm.HardwareProfile.VmSize = "<newVMsize>"
Update-AzVM -VM $vm -ResourceGroupName $resourceGroup
使用 PowerShell 重设不在可用性集中的 VM 的大小。
此 Cloud shell PowerShell 脚本分别使用资源组名称、VM 名称和所需 VM 大小初始化变量 $resourceGroup、$vm 和 $size。 然后,它使用 Get-AzVM cmdlet 从 Azure 检索 VM 对象。 该脚本将 VM 的硬件配置文件的 VmSize 属性修改为所需的大小。 最后,它使用 Update-AzVM cmdlet 将这些更改应用到 Azure 中的 VM。
# Set variables
$resourceGroup = 'myResourceGroup'
$vmName = 'myVM'
$size = 'Standard_DS3_v2'
# Get the VM
$vm = Get-AzVM -ResourceGroupName $resourceGroup -Name $vmName
# Change the VM size
$vm.HardwareProfile.VmSize = $size
# Update the VM
Update-AzVM -ResourceGroupName $resourceGroup -VM $vm
作为在 Azure Cloud Shell 中运行脚本的替代方法,还可以在计算机本地执行该脚本。 此 PowerShell 脚本的本地版本包括导入 Azure 模块和对 Azure 帐户进行身份验证的其他步骤。
注意
本地 PowerShell 可能需要 VM 重启才能生效。
# Import the Azure module
Import-Module Az
# Login to your Azure account
Connect-AzAccount
# Set variables
$resourceGroup = 'myResourceGroup'
$vmName = 'myVM'
$size = 'Standard_DS3_v2'
# Select the subscription
Select-AzSubscription -SubscriptionId '<subscriptionID>'
# Get the VM
$vm = Get-AzVM -ResourceGroupName $resourceGroup -Name $vmName
# Change the VM size
$vm.HardwareProfile.VmSize = $size
# Update the VM
Update-AzVM -ResourceGroupName $resourceGroup -VM $vm
使用 PowerShell 重设可用性集中的 VM 的大小
如果可用性集中 VM 的新大小在当前托管 VM 的硬件群集上不可用,则需要解除分配可用性集中的所有 VM 以重设 VM 大小。 完成调整一个 VM 的大小后,可能还需要更新可用性集中其他 VM 的大小。 若要调整可用性集中 VM 的大小,请运行以下脚本。
此脚本设置变量 $resourceGroup、$vmName、$newVmSize 和 $availabilitySetName。 然后,它通过使用 Get-AzVMSize 检查所需的 VM 大小是否可用,并检查输出是否包含所需大小。 如果所需大小不可用,该脚本会解除分配可用性集中的所有 VM,调整其大小,然后再次启动它们。 如果所需大小可用,则脚本会调整 VM 的大小。
将$resourceGroup、$vmName、$newVmSize和$availabilitySetName的值替换为你自己的值。
# Set variables
$resourceGroup = "myResourceGroup"
$vmName = "myVM"
$newVmSize = "<newVmSize>"
$availabilitySetName = "<availabilitySetName>"
# Check if the desired VM size is available
$availableSizes = Get-AzVMSize `
-ResourceGroupName $resourceGroup `
-VMName $vmName |
Select-Object -ExpandProperty Name
if ($availableSizes -notcontains $newVmSize) {
# Deallocate all VMs in the availability set
$as = Get-AzAvailabilitySet `
-ResourceGroupName $resourceGroup `
-Name $availabilitySetName
$virtualMachines = $as.VirtualMachinesReferences | Get-AzResource | Get-AzVM
$virtualMachines | Stop-AzVM -Force -NoWait
# Resize and restart the VMs in the availability set
$virtualMachines | Foreach-Object { $_.HardwareProfile.VmSize = $newVmSize }
$virtualMachines | Update-AzVM
$virtualMachines | Start-AzVM
exit
}
# Resize the VM
$vm = Get-AzVM `
-ResourceGroupName $resourceGroup `
-VMName $vmName
$vm.HardwareProfile.VmSize = $newVmSize
Update-AzVM `
-VM $vm `
-ResourceGroupName $resourceGroup
若要调整 VM 的大小,需要安装最新的 Azure CLI ,并且需要使用 az 登录登录到 Azure 帐户。
以下脚本会在调整大小之前检查所需的 VM 大小是否可用。 如果所需大小不可用,则脚本将退出并显示错误消息。 如果所需大小可用,则脚本会解除分配 VM、调整其大小,然后再次启动 VM。
将resourceGroup、vm和size的值替换为你自己的值。
# Set variables
resourceGroup=myResourceGroup
vm=myVM
size=Standard_DS3_v2
# Check if the desired VM size is available
if ! az vm list-vm-resize-options --resource-group $resourceGroup --name $vm --query "[].name" | grep -q $size; then
echo "The desired VM size is not available."
exit 1
fi
# Deallocate the VM
az vm deallocate --resource-group $resourceGroup --name $vm
# Resize the VM
az vm resize --resource-group $resourceGroup --name $vm --size $size
# Start the VM
az vm start --resource-group $resourceGroup --name $vm
使用 Azure CLI 重设可用性集中的 VM 的大小。
以下脚本设置变量 resourceGroup、 vm和 size。 然后,它通过使用 az vm list-vm-resize-options 检查所需的 VM 大小是否可用,并检查输出是否包含所需大小。 如果所需大小不可用,则脚本将退出并显示错误消息。 如果所需大小可用,则脚本会解除分配 VM、调整其大小,然后再次启动 VM。
将resourceGroup的值、vm的值和size的值替换为您自己的值。
# Set variables
resourceGroup="myResourceGroup"
vmName="myVM"
newVmSize="<newVmSize>"
availabilitySetName="<availabilitySetName>"
# Check if the desired VM size is available
availableSizes=$(az vm list-vm-resize-options \
--resource-group $resourceGroup \
--name $vmName \
--query "[].name" \
--output tsv)
if [[ ! $availableSizes =~ $newVmSize ]]; then
# Deallocate all VMs in the availability set
vmIds=$(az vmss list-instances \
--resource-group $resourceGroup \
--name $availabilitySetName \
--query "[].instanceId" \
--output tsv)
az vm deallocate \
--ids $vmIds \
--no-wait
# Resize and restart the VMs in the availability set
az vmss update \
--resource-group $resourceGroup \
--name $availabilitySetName \
--set virtualMachineProfile.hardwareProfile.vmSize=$newVmSize
az vmss start \
--resource-group $resourceGroup \
--name $availabilitySetName \
--instance-ids $vmIds
exit
fi
# Resize the VM
az vm resize \
--resource-group $resourceGroup \
--name $vmName \
--size $newVmSize