完成创建虚拟机 (VM) 后,可以通过更改 VM 大小来扩大或缩小 VM。 在某些情况下,必须先解除分配 VM。 如果新的大小在当前托管 VM 的同一硬件群集上不可用,则可能需要解除分配。 重要的是要理解,即使不需要解除分配,但如果虚拟机当前正在运行,则更改其大小也会导致其重启。 因此,应该考虑将更改 VM 大小视为一个破坏性过程,尤其是对于托管在 VM 上的有状态工作负荷而言。
如果虚拟机使用高级存储,请确保选择 s 版本的大小以获得高级存储支持。 例如,选择 Standard_E4s_v3,而不是 Standard_E4_v3。
# Import the Azure module
Import-Module Az
# Login to your Azure account
Connect-AzAccount -Environment AzureChinaCloud
# 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 的所有动态 IP 地址。 OS 和数据磁盘不受影响。
使用 PowerShell 重设可用性集中的 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
警告
解除分配 VM 也会释放分配给该 VM 的所有动态 IP 地址。 OS 和数据磁盘不受影响。
使用 Azure CLI 重设可用性集中的 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
选择适当的 SKU
调整 VM 大小时,请务必根据 VM 的信号选择合适的 SKU,以确定是否需要更多 CPU、内存或存储容量:
如果 VM 运行的是 CPU 密集型工作负载(例如数据库服务器或高流量的 Web 服务器),则可能需要选择具有更多 CPU 核心的 SKU。
如果 VM 运行的是内存密集型工作负载(例如机器学习模型或大数据应用程序),则可能需要选择内存较多的 SKU。
有关解决方法,请参阅如何从具有本地临时磁盘的 VM 大小迁移到不带本地临时磁盘的 VM 大小?。 该解决方法可用于将不带本地临时磁盘的 VM 大小调整为具有本地临时磁盘的 VM。 你将创建一个没有本地临时磁盘的 VM 的快照 > 基于该快照创建一个磁盘 > 基于该磁盘创建 VM 并使用合适的 VM 大小以便支持具有本地临时磁盘的 VM。