在 Azure VM 规模集上更新 VHD

Updating VHD of Azure VM ScaleSet

我已经使用我的 Azure VM 的 vhd 在 Azure 上创建了一个 VMSS。

如何将 VMSS 的源 vhd 更改为新的 vhd?

得到如下错误:

根据 FAQ on VMSS 和一般的 VM,VMSS 在 VHD 之上运行。所以,如果你有一个新的 VHD,那么你可以简单地删除旧的 VMSS,然后创建一个新的 VMSS。

这是我想象的你的情况。

  1. VMSS 运行 VHD1 的顶部
  2. 现在,我有 VHD2。
  3. 使用 VHD2 作为基础创建新的 VMSS。
  4. 删除 VHD1 之上的 VMSS 运行
  5. 如果不再需要,也删除 VHD1,或者将其推送到某个备份以供以后重用。

这个问题本身看起来很简单,除非你要求别的东西,我在自欺欺人:)

如果问题是其他问题,则需要对问题进行更多解释,以便其他更有经验的 azure 人员可以帮助您。

我们可以使用Update-AzureRmVmssUpdate-AzureRmVmssInstance升级VMSS实例。

如果我们想使用自定义镜像升级Azure VMSS实例,我们应该确保这个VMSS是由自定义镜像创建的。

如果我们从 Azure 市场创建 VMSS,则无法使用自定义映像升级 Azure VMSS 实例。

这是我的测试:

1.I通过自定义镜像创建VMSS,使用VMSStemplate创建(托管磁盘)。

2、创建另一个VM镜像,并使用此脚本获取$vmss,并使用Powershell升级VMSS实例:

$rgname = "vmsss"
$vmssname = "jasonvmss"
$instanceid = "1"
$newimagereference = "/subscriptions/5384xxxx-xxxx-xxxx-xxxx-xxxxe29axxxx/resourceGroups/jasonwin/providers/Microsoft.Compute/images/myImage"
$vmss = Get-AzureRmVmss -ResourceGroupName $rgname -VMScaleSetName $vmssname
$vmss.virtualMachineProfile.storageProfile.imageReference.id = $newImageReference
Update-AzureRmVmss -ResourceGroupName $rgname -Name $vmssname -VirtualMachineScaleSet $vmss
Update-AzureRmVmssInstance -ResourceGroupName $rgname -VMScaleSetName $vmssname -InstanceId $instanceId

这是我的截图:

我们还可以找到 VMSS 实例的状态:

因此,作为解决方法,我们可以使用模板或 PowerShell 创建带有自定义映像的 Azure VMSS ,然后使用此脚本升级 Azure VMSS 实例。

注意:在我的测试中,我使用模板创建VMSS是托管磁盘,所以我们应该使用$vmss.virtualMachineProfile.storageProfile.imageReference.id

如果创建VMSS是非托管磁盘,就要用这个$vmss.virtualMachineProfile.storageProfile.osDisk.image.uri= $newURI

这里是官方关于升级VMSS实例的文章,请参考it