删除 VM 和附加的资源
本文内容
根据你删除 VM 的方式,可能只会删除 VM 资源,而不会删除网络和磁盘资源。 可以更改删除 VM 时删除其他哪些资源的默认设置。
创建 VM 时设置删除选项
若要指定附加的资源在你删除 VM 时会发生什么情况,请使用 delete-option
参数。 每个都可以设置为 Delete
(这会在你删除 VM 时永久删除资源),或者设置为 Detach
(这只会拆离资源并将其保留在 Azure 中,以便以后可以重用)。 针对使用 CLI 创建的 VM 的默认设置为拆离 OS 磁盘。 你为其设置了 Detach
的资源(如磁盘)会继续产生费用(如果适用)。
--os-disk-delete-option
- OS 磁盘。
--data-disk-delete-option
- 数据磁盘。
--nic-delete-option
- NIC。
在此示例中,我们使用名为 myImage 的映像,在名为 myResourceGroup 的资源组中创建名为 myVM 的 VM,并将 OS 磁盘和 NIC 设置为在删除 VM 时删除。
az vm create \
--resource-group myResourceGroup \
--name myVM \
--image myImage \
--public-ip-sku Standard \
--nic-delete-option delete \
--os-disk-delete-option delete \
--admin-username azureuser \
--generate-ssh-keys
若要指定附加的资源在你删除 VM 时会发生什么情况,请使用 DeleteOption
参数。 每个都可以设置为 Delete
(这会在你删除 VM 时永久删除资源),或者设置为 Detach
(这只会拆离资源并将其保留在 Azure 中,以便以后可以重用)。 针对使用 PowerShell 创建的 VM 的默认设置为当你删除 VM 时会拆离 OS 磁盘。 你为其设置了 Detach
的资源(如磁盘)会继续产生费用(如果适用)。
DeleteOption
参数包括:
-OSDiskDeleteOption
- OS 磁盘。
-DataDiskDeleteOption
- 数据磁盘。
-NetworkInterfaceDeleteOption
- NIC。
在此示例中,我们将创建一个 VM,并将 OS 磁盘和 NIC 设置为在我们删除 VM 时删除。
New-AzVm `
-ResourceGroupName "myResourceGroup" `
-Name "myVM" `
-OSDiskDeleteOption Delete `
-NetworkInterfaceDeleteOption Delete `
-Location "China East" `
-VirtualNetworkName "myVnet" `
-SubnetName "mySubnet" `
-SecurityGroupName "myNetworkSecurityGroup" `
-PublicIpAddressName "myPublicIpAddress"
此示例演示如何将数据磁盘和 NIC 设置为在删除 VM 时删除。 请注意,api-version 参数中指定的 API 版本必须为“2021-03-01”或更高才能配置删除选项。
PUT
https://management.chinacloudapi.cn/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.Compute/virtualMachines/myVM?api-version=xx
{
"storageProfile": {
"dataDisks": [
{
"diskSizeGB": 1023,
"name": "myVMdatadisk",
"createOption": "Empty",
"lun": 0,
"deleteOption": "Delete"
}
]
},
"networkProfile": {
"networkInterfaces": [
{
"id": "/subscriptions/.../Microsoft.Network/networkInterfaces/myNIC",
"properties": {
"primary": true,
"deleteOption": "Delete"
}
}
]
}
}
你还可以为与 NIC 关联的公共 IP 设置此属性,以便在删除 NIC 时自动删除该公共 IP。
PUT https://management.chinacloudapi.cn/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.Network/networkInterfaces/test-nic?api-version=xx
{
"properties": {
"enableAcceleratedNetworking": true,
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"publicIPAddress": {
"id": "/subscriptions/../publicIPAddresses/test-ip",
"properties": {
"deleteOption": "Delete"
}
},
"subnet": {
"id": "/subscriptions/../virtualNetworks/rg1-vnet/subnets/default"
}
}
}
]
},
"location": "chinaeast"
}
更新现有 VM 上的删除行为
可以在删除 VM 时更改行为。
以下示例将删除选项设置为 detach
,以便可以重用磁盘。
az resource update --resource-group myResourceGroup --name myVM --resource-type virtualMachines --namespace Microsoft.Compute --set properties.storageProfile.osDisk.deleteOption=detach
以下示例在删除 VM 时更新 VM 以删除操作系统磁盘、所有数据磁盘和所有 NIC。
$vmConfig = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
$vmConfig.StorageProfile.OsDisk.DeleteOption = 'Delete'
$vmConfig.StorageProfile.DataDisks | ForEach-Object { $_.DeleteOption = 'Delete' }
$vmConfig.NetworkProfile.NetworkInterfaces | ForEach-Object { $_.DeleteOption = 'Delete' }
$vmConfig | Update-AzVM
以下示例更新 VM 以在删除 VM 时删除 NIC、OS 磁盘和数据磁盘。 请注意,api-version 参数中指定的 API 版本必须为“2021-03-01”或更高才能配置删除选项。
PATCH https://management.chinacloudapi.cn/subscriptions/subID/resourceGroups/resourcegroup/providers/Microsoft.Compute/virtualMachines/testvm?api-version=2021-07-01
{
"properties": {
"hardwareProfile": {
"vmSize": "Standard_D2s_v3"
},
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2019-Datacenter",
"version": "latest",
"exactVersion": "17763.3124.2111130129"
},
"osDisk": {
"osType": "Windows",
"name": "OsDisk_1",
"createOption": "FromImage",
"caching": "ReadWrite",
"managedDisk": {
"storageAccountType": "Premium_LRS",
"id": "/subscriptions/subID/resourceGroups/resourcegroup/providers/Microsoft.Compute/disks/OsDisk_1"
},
"deleteOption": "Delete",
"diskSizeGB": 127
},
"dataDisks": [
{
"lun": 0,
"name": "DataDisk_0",
"createOption": "Attach",
"caching": "None",
"writeAcceleratorEnabled": false,
"managedDisk": {
"storageAccountType": "Premium_LRS",
"id": "/subscriptions/subID/resourceGroups/resourcegroup/providers/Microsoft.Compute/disks/DataDisk_0"
},
"deleteOption": "Delete",
"diskSizeGB": 1024,
"toBeDetached": false
},
{
"lun": 1,
"name": "DataDisk_1",
"createOption": "Attach",
"caching": "None",
"writeAcceleratorEnabled": false,
"managedDisk": {
"storageAccountType": "Premium_LRS",
"id": "/subscriptions/subID/resourceGroups/resourcegroup/providers/Microsoft.Compute/disks/DataDisk_1"
},
"deleteOption": "Delete",
"diskSizeGB": 1024,
"toBeDetached": false
}
]
},
"osProfile": {
"computerName": "testvm",
"adminUsername": "azureuser",
"windowsConfiguration": {
"provisionVMAgent": true,
"enableAutomaticUpdates": true,
"patchSettings": {
"patchMode": "AutomaticByOS",
"assessmentMode": "ImageDefault",
"enableHotpatching": false
}
},
"secrets": [],
"allowExtensionOperations": true,
"requireGuestProvisionSignal": true
},
"networkProfile": {
"networkInterfaces": [
{
"id": "/subscriptions/subID/resourceGroups/resourcegroup/providers/Microsoft.Network/networkInterfaces/nic336",
"properties": {
"deleteOption": "Delete"
}
}
]
}
}
}
VM 的强制删除
使用强制删除,你可以强制删除虚拟机,降低删除延迟并立即释放附加的资源。 对于不需要正常关闭的 VM,Force Delete 将尽快删除 VM,同时从 VM 中缓解逻辑资源,从而绕过正常关闭和某些清理操作。 Force Delete 不会立即释放与 VM 关联的 MAC 地址,因为这是一种物理资源,可能需要最多 10 分钟才能释放。 如果需要在新虚拟机上立即重用 MAC 地址,则不建议强制删除。 仅当不打算重用虚拟硬盘时,才应使用强制删除。 可以通过门户、CLI、PowerShell 和 Rest API 来使用强制删除。
要删除现有 VM 时,可以在“删除”窗格中找到相应选项来应用强制。
打开门户 。
导航到虚拟机。
在“概览” 页上,选择“删除” 。
在“删除虚拟机”窗格中,选中“应用强制删除”复选框。
选择“确定”。
为 az vm delete 使用 --force-deletion
参数。
az vm delete \
--resource-group myResourceGroup \
--name myVM \
--force-deletion none
将 -ForceDeletion
参数用于 Remove-AzVm 。
Remove-AzVm `
-ResourceGroupName "myResourceGroup" `
-Name "myVM" `
-ForceDeletion $true
可以使用 Azure REST API 将强制删除应用到虚拟机。 将 forceDeletion
参数用于虚拟机 - 删除 。
规模集的强制删除
使用强制删除,你可以强制删除虚拟机规模集,降低删除延迟并立即释放附加的资源。 Force Delete 不会立即释放与 VM 关联的 MAC 地址,因为这是一种物理资源,可能需要最多 10 分钟才能释放。 如果需要立即在新 VM 上重用 MAC 地址,则建议不要使用强制删除。 仅当不打算重用虚拟硬盘时,才应使用强制删除。 可以通过门户、CLI、PowerShell 和 Rest API 来使用强制删除。
要删除现有规模集时,可以在“删除”窗格中找到相应选项来应用强制。
打开门户 。
导航到你的虚拟机规模集。
在“概览” 页上,选择“删除” 。
在“删除虚拟机规模集”窗格中,选中“应用强制删除”复选框。
选择“确定”。
对 --force-deletion
使用 az vmss delete
参数。
az vmss delete \
--resource-group myResourceGroup \
--name myVMSS \
--force-deletion true
为 Remove-AzVmss 使用 -ForceDeletion
参数。
Remove-AzVmss `
-ResourceGroupName "myResourceGroup" `
-Name "myVMSS" `
-ForceDeletion $true
可以使用 Azure REST API 对规模集应用强制删除。 需要使用 forceDeletion
参数,请参阅虚拟机规模集 - 删除 。
FAQ
问:此功能是否适用于共享磁盘?
答:对于共享磁盘,不能将“deleteOption”属性设置为“Delete”。 可以将其留空,或将其设置为“Detach”
问:哪些 Azure 资源支持此功能?
答:用作 OS 磁盘和数据磁盘的所有托管磁盘类型、NIC 和公共 IP 都支持此功能
问:是否可以在未与 VM 关联的磁盘和 NIC 上使用此功能?
答:不可以,此功能仅适用于与 VM 关联的磁盘和 NIC。
问:此功能如何与灵活虚拟机规模集配合使用?
答:对于灵活虚拟机规模集,磁盘、NIC 和 PublicIP 会将 deleteOption
默认设置为 Delete
,因此在删除 VM 时,会自动清理这些资源。
对于显式创建并附加到 VM 的数据磁盘,如果希望在删除 VM 后保留磁盘,可以将此属性修改为“Detach”而不是“Delete”。
问:如何保留与 VM 关联的磁盘、NIC 和公共 IP?
答:默认情况下,在删除 VM 时,将会保留与该 VM 关联的磁盘、NIC 和公共 IP。 如果将这些资源配置为自动删除,则可以更新设置,使这些资源在删除 VM 后得以保留。 若要保留这些资源,请将 deleteOption
属性设置为 Detach
。
后续步骤
若要了解有关基本 VM 管理的详细信息,请参阅教程:使用 Azure CLI 创建和管理 Linux VM 。