完成创建虚拟机 (VM) 后,可以通过更改 VM 大小来扩大或缩小 VM。 在某些情况下,必须先解除分配 VM。 如果新的大小在当前托管 VM 的同一硬件群集上不可用,则可能需要解除分配。 重要的是要理解,即使不需要解除分配,但如果虚拟机当前正在运行,则更改其大小也会导致其重启。 因此,应该考虑将更改 VM 大小视为一个破坏性过程,尤其是对于托管在 VM 上的有状态工作负荷而言。
如果虚拟机使用高级存储,请确保选择 s 版本的大小以获得高级存储支持。 例如,选择 Standard_E4s_v3,而不是 Standard_E4_v3。
# 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
# 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
如果可用性集中 VM 的新大小在当前托管 VM 的硬件群集上不可用,则需要解除分配可用性集中的所有 VM 以重设 VM 大小。 已调整一个 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
此脚本设置变量 $resourceGroup、$vmName、$newVmSize 和 $availabilitySetName。 然后,它通过使用 Get-AzVMSize 检查所需的 VM 大小是否可用,并检查输出是否包含所需大小。 如果所需大小不可用,该脚本会解除分配可用性集中的所有 VM,调整其大小,然后再次启动它们。 如果所需大小可用,则脚本会调整 VM 的大小。
# 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
以下脚本设置变量 resourceGroup、 vm和 size。 然后,它通过使用 az vm list-vm-resize-options 检查所需的 VM 大小是否可用,并检查输出是否包含所需大小。 如果所需大小不可用,则脚本将退出并显示错误消息。 如果所需大小可用,则脚本会解除分配 VM、调整其大小,然后再次启动 VM。
# 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
若要在 Terraform 代码中调整 VM 的大小,请将 azurerm_linux_virtual_machine 或 azurerm_windows_virtual_machine 资源块中的 size 参数修改为所需的大小,然后运行 terraform plan -out main.tfplan 以查看将要进行的 VM 大小更改。 然后运行 terraform apply main.tfplan 应用更改以调整 VM 大小。
重要
下面的 Terraform 示例会在使用创建原始虚拟机的状态文件时修改现有虚拟机的大小。 有关完整的 Terraform 代码,请参阅 Windows Terraform 快速入门。
Azure VM 选择器:此工具可帮助你根据工作负载类型、OS 和软件以及部署区域查找正确的 VM SKU。
限制
你无法将具有本地临时磁盘的 VM 大小调整为无本地临时磁盘的 VM 大小,反之亦然。
只允许下方的组合调整规格:
VM(具有本地临时磁盘)-> VM(具有本地临时磁盘);以及
VM(无本地临时磁盘)-> VM(无本地临时磁盘)。
有关解决方法,请参阅如何从具有本地临时磁盘的 VM 大小迁移到不带本地临时磁盘的 VM 大小?。 该解决方法可用于将不带本地临时磁盘的 VM 大小调整为具有本地临时磁盘的 VM。 你将创建一个没有本地临时磁盘的 VM 的快照 > 基于该快照创建一个磁盘 > 基于该磁盘创建 VM 并使用合适的 VM 大小以便支持具有本地临时磁盘的 VM。