我需要转换/迁移现货示例VM,以按需付费VM。示例已停止,由于可用性原因,无法启动示例。如何做到这一点?最好有剧本。
5jdjgkvh1#
AFAIK,我不认为你可以将Spot VM转换为常规VM。您必须删除该虚拟机并将磁盘连接到新的即用即付虚拟机。由于Azure Spot VM没有SLA,并且可以随时将其逐出,因此如果您需要立即使用容量,建议您使用标准VM而不是Azure Spot虚拟机。
fhg3lkii2#
我已经创建了PS脚本来将PYUG转换为SPOT VM。它不适用于具有扩展的VM,因为我们将从现有磁盘重新创建。验证转换成功后,删除备份快照。
Function Convert-PYUG2SPOT { Param ( # Set variables to your specifics $resourceGroup, $vmName, $subscriptionName, [switch]$force ) $WarningPreference = 'SilentlyContinue' $context = Set-AzContext $subscriptionName Write-Output "Setting context to $($subscriptionName)" # Get the details of the VM to be moved to the Availability Set $originalVM = Get-AzVM ` -ResourceGroupName $resourceGroup ` -Name $vmName try { # Check whether already logged-in $setAzContext = (az account set --name $subscriptionName) $updateresource = (az resource update --resource-group $resourceGroup --name $vmName --resource-type virtualMachines --namespace Microsoft.Compute --set properties.storageProfile.osDisk.deleteOption=detach) } catch { Write-Host 'You need to login' if ($LASTEXITCODE -ne 0) { exit 1 } } # checking for dependencies $vm = Get-AzVM -ResourceGroupName $resourceGroup -VMName $vmName $extensionExist = ($vm.Extensions | Select-Object Publisher, VirtualMachineExtensionType, TypeHandlerVersion) if ($extensionExist) { $extensionExist Write-Host 'Make sure you note the installed extensions, that you can configure later on the converted VM.' Write-Host 'Please re-run the automation with the -force switch to initiate the conversion.' } if ($extensionExist -and $force) { Write-Host 'Initiating the conversion.' # Create the basic configuration for the replacement VM. $newVM = New-AzVMConfig ` -VMName $originalVM.Name ` -VMSize $originalVM.HardwareProfile.VmSize ` -Priority 'Spot' -MaxPrice -1 # Confgure OS Disk Set-AzVMOSDisk ` -VM $newVM -CreateOption Attach ` -ManagedDiskId $originalVM.StorageProfile.OsDisk.ManagedDisk.Id ` -Name $originalVM.StorageProfile.OsDisk.Name if ($originalVM.OSProfile.WindowsConfiguration) { $newVM.StorageProfile.OsDisk.OsType = 'Windows' } else { $newVM.StorageProfile.OsDisk.OsType = 'Linux' } # Taking backup of OSdisks $osDiskid = $originalVM.StorageProfile.OsDisk.ManagedDisk.Id $osDiskName = $originalVM.StorageProfile.OsDisk.Name # Create Disk Snapshot $snapshot = New-AzSnapshotConfig -SourceUri $osDiskid -Location $originalVM.Location -CreateOption copy $newsnap = New-AzSnapshot ` -Snapshot $snapshot ` -SnapshotName "$($osDiskName)_snapshot" ` -ResourceGroupName $resourceGroup $randomNumber = Get-Random -Maximum 100 foreach ($disk in $originalVM.StorageProfile.DataDisks) { # Taking backup of disks # Get Current VM Data Disk metadata. $dataDiskid = $disk.ManagedDisk.Id $dataDiskName = ($disk.Name).ToLower() # Create Disk Snapshot $snapshot = New-AzSnapshotConfig -SourceUri $dataDiskid -Location $originalVM.Location -CreateOption copy $newsnap = New-AzSnapshot ` -Snapshot $snapshot ` -SnapshotName "$($dataDiskName)_$($randomNumber)" ` -ResourceGroupName $resourceGroup } # Add NIC(s) and keep the same NIC as primary foreach ($nic in $originalVM.NetworkProfile.NetworkInterfaces) { if ($nic.Primary -eq 'True') { Add-AzVMNetworkInterface ` -VM $newVM ` -Id $nic.Id -Primary } else { Add-AzVMNetworkInterface ` -VM $newVM ` -Id $nic.Id } } if ($originalVM.AvailabilitySetReference.Id) { Write-Output "Warning: VM $originalVM.Name is in an availability set. Spot VMs cannot run in availability sets." } # Remove the original VM Remove-AzVM -ResourceGroupName $resourceGroup -Name $vmName -Force New-AzVM ` -ResourceGroupName $resourceGroup ` -Location $originalVM.Location ` -VM $newVM ` -DisableBginfoExtension foreach ($attachDisk in $originalVM.StorageProfile.DataDisks) { $dataDiskid = ($attachDisk.ManagedDisk.Id).ToLower() $dataDiskName = ($attachDisk.Name).ToLower() Write-Output "Attaching $($dataDiskName)" Write-Output $dataDiskid Write-Output $dataDiskName $vm = Get-AzVM -Name $vmName -ResourceGroupName $resourceGroup $vm = Add-AzVMDataDisk -VM $vm ` -Name $dataDiskName ` -ManagedDiskId $dataDiskid ` -Lun $attachDisk.Lun ` -CreateOption Attach Write-Output " --- Adding data disk $($dataDiskName) to $($vmName)" Update-AzVM -ResourceGroupName $resourceGroup -VM $vm } } }
字符串
2条答案
按热度按时间5jdjgkvh1#
AFAIK,我不认为你可以将Spot VM转换为常规VM。您必须删除该虚拟机并将磁盘连接到新的即用即付虚拟机。
由于Azure Spot VM没有SLA,并且可以随时将其逐出,因此如果您需要立即使用容量,建议您使用标准VM而不是Azure Spot虚拟机。
fhg3lkii2#
我已经创建了PS脚本来将PYUG转换为SPOT VM。它不适用于具有扩展的VM,因为我们将从现有磁盘重新创建。验证转换成功后,删除备份快照。
字符串