在同一物理集群中调整 Azure VM 大小

标签 azure azure-virtual-machine azure-vm-templates

我正在尝试使用命令行调整 Azure VM 的大小。 VM 大小列在该 VM 可调整大小的大小列表中。但是,当我尝试调整此虚拟机的大小时,由于此错误,我无法执行此操作

Unable to resize the VM 'XYZ' because the requested size Standard_F4s is not available in the current hardware cluster.

有没有一种方法可以让我们事先获取此虚拟机的所有大小都可以成功调整到的信息?

最佳答案

您可以使用Get-AzureRmVmSize来检查VM大小。下面的示例不仅检查硬件集群,还检查磁盘、区域可用性,以确保您可以调整虚拟机的大小。

$rg = "azuredev-rg"
$vmName = "A0VM"
Get-AzureRmVMSize -ResourceGroupName $rg -VMName $vmName

请注意,输出取决于虚拟机的运行状态。您可以在现有 VM 运行时更改其大小。但是,如果该 VM 正在运行,则不会列出所有可用大小。这意味着某些指定大小需要先停止VM才能释放(由于硬件集群不同)

对于防御性编程,下面的示例将考虑在执行调整大小之前检查虚拟机状态

$vm = (Get-AzureRmVM -ResourceGroupName $rg -Name $vmName -Status).Statuses
$vm.DisplayStatus

输出显示了您

Provisioning succeeded
VM running

下面是用于检查虚拟机状态然后执行调整大小的示例 PowerShell 脚本

$rg = "azuredev-rg"
$vmName = "A0VM"
$newSize = "Standard_B1s"

$vm = Get-AzureRmVM -ResourceGroupName $rg -Name $vmName
$vmS = Get-AzureRmVMSize -ResourceGroupName $rg -VMName $vmName

if ($vmS.Name -contains $newSize) 
{
    Write-Output "This size is supported"
    $vm.HardwareProfile.VmSize = $newSize
    Update-AzureRmVM -VM $vm -ResourceGroupName $rg
    Write-Output "The VM size is being updated"
}

else
{
    while($vmStatus.DisplayStatus -contains "VM running")
    {
        $vmStatus = (Get-AzureRmVM -ResourceGroupName $rg -Name $vmName -Status).Statuses
        Write-Output $vmStatus
        Write-Output "VM is being stopped"
        Start-Sleep -Seconds 3
    }
    Stop-AzureRmVM -Name $vmName -ResourceGroupName $rg -Force
    $vm.HardwareProfile.VmSize = $newSize
    Update-AzureRmVM -VM $vm -ResourceGroupName $rg
}

关于在同一物理集群中调整 Azure VM 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49073856/

相关文章:

azure - 尝试使用 Azure 通知中心批量发送时出现 403 禁止

windows - 使用 Packer powershell 配置程序将 Azure 文件共享映射到服务帐户

azure - 达到支出限额后 Windows Azure 虚拟机被删除 - 如何取回?

azure - 通过 REST API 刷新 Azure VM 的 IP 地址

azure - 如何向正在运行的azure VM添加额外的IP

json - 在 Azure 中链接两个 ARM 模板的最佳方法是什么

azure - 如何通过Azure AD API快速递归获取多个Azure AD组的成员?

c# - Azure 资源组使用 SDK 设置标签?