本文解答了有关弃用 Azure 市场中的映像时会发生什么情况的常见问题。
你可能已收到一封电子邮件,告知虚拟机在计划弃用或已弃用的映像上运行。 发布者弃用映像的原因有很多,可能的原因包括安全问题或映像即将过期。
可能在版本、计划或产品/服务级别弃用映像:
- 弃用映像版本 - 删除单个 VM 映像版本
- 弃用计划或 SKU - 删除计划或 SKU 以及计划中的所有映像
- 弃用产品/服务 - 删除整个 VM 产品/服务,包括产品/服务中的所有计划,以及每个计划中的所有映像。
在计划的弃用日期之前,可以继续部署新的 VM 或规模集实例(截至弃用日期)。
在计划的弃用日期之后,将无法使用受影响的映像部署新实例。 如果计划弃用计划,则计划中的所有映像版本将不再可用。 如果计划弃用整个产品/服务,则产品/服务中的所有计划在弃用后将不再可用。
- 活动 VM 实例不会受到影响。
- 无法从任何受影响的映像创建新的 VM 实例。
- 如果配置了任何受影响的映像,则无法横向扩展现有虚拟机规模集部署。 要弃用计划或产品/服务时,固定到计划或产品/服务中的任何映像的所有现有规模集部署都无法横向扩展。
我需要做些什么?
如果希望在弃用日期后横向扩展规模集,则需要标识在已弃用映像上运行的规模集,然后将工作负载迁移到受支持的映像。 如果要在弃用后保留在映像上,可以创建自己的自定义映像并迁移到该映像(步骤概述如下)。 如果已为 VM 或规模集配置了自动更新,则仅当产品/服务或计划版本已弃用时才会受到影响(对映像版本弃用没有影响)。
使用 Azure Resource Graph:
你可以在 Azure Resource Graph 中运行以下查询来搜索绑定到映像的虚拟机或虚拟机规模集:
- 若要查找在已停用映像上运行的 VM,请按如下所示指定已停用的映像,并在 Azure Resource Graph 中运行查询,将以下值替换为映像详细信息,如下所示:
resources
|where type == "microsoft.compute/virtualmachines"
//| where properties.storageProfile.imageReference.publisher =~ 'Windows' //optional filter, uncomment this line to filter for a specific publisher.
//| where properties.storageProfile.imageReference.sku =~ '2016-Datacenter' //optional filter, uncomment this line to filter for a specific deprecated SKU (Plan).
//| where properties.storageProfile.imageReference.version == '14393.4467.2106061537' //optional filter, uncomment this line to filter for a specific deprecated version.
|project name, subscriptionId, resourceGroup, ImagePublisher=properties.storageProfile.imageReference.publisher,ImageOffer=properties.storageProfile.imageReference.offer,imageSku=properties.storageProfile.imageReference.sku, imageVersion=properties.storageProfile.imageReference.exactVersion
- 若要查找在已停用映像上运行的规模集,请按如下所示指定已停用的映像,并在 Azure Resource Graph 中运行查询,将以下值替换为映像详细信息,如下所示:
resources
|where type == "microsoft.compute/virtualmachinescalesets"
//| where properties.virtualMachineProfile.storageProfile.imageReference.publisher =~ 'Windows' //optional filter, uncomment this line to filter for a specific publisher.
//| where properties.virtualMachineProfile.storageProfile.imageReference.sku =~ '2016-Datacenter' //optional filter, uncomment this line to filter for a specific deprecated SKU (Plan).
//| where properties.virtualMachineProfile.storageProfile.imageReference.version == '14393.4467.2106061537' //optional filter, uncomment this line to filter for a specific deprecated version.
//| where properties.virtualMachineProfile.storageProfile.imageReference.version != "latest" //optional filter, uncomment this line to filter out scale sets that aren't using "latest version" in the model.
|project name, subscriptionId, resourceGroup, ImagePublisher=properties.virtualMachineProfile.storageProfile.imageReference.publisher,ImageOffer=properties.virtualMachineProfile.storageProfile.imageReference.offer,imageSku=properties.virtualMachineProfile.storageProfile.imageReference.sku, imageVersion=properties.virtualMachineProfile.storageProfile.imageReference.version
使用 Azure CLI:
- 在计划/SKU 级别列出具有已弃用映像的 VM。
az vm show --resource-group $rgName --name $vmName --query "storageProfile.imageReference.exactVersion
az vm list --query "[?storageProfile.imageReference.sku=='2016-Datacenter'].{VM:id, imageOffer:storageProfile.imageReference.offer, imagePublisher:StorageProfile.imageReference.publisher, imageSku: storageProfile.imageReference.sku, imageVersion:storageProfile.imageReference.version}"
- 在版本级别列出具有已弃用映像的 VM。
az vm list --query "[?storageProfile.imageReference.version=='14393.4402.2105052108'].{VM:id, imageOffer:storageProfile.imageReference.offer, imagePublisher:StorageProfile.imageReference.publisher, imageSku: storageProfile.imageReference.sku, imageVersion:storageProfile.imageReference.version}"
使用 PowerShell:
- 在版本级别列出具有已弃用映像的 VM。
(Get-AzVM -ResourceGroupName $rgname -Name $vmname).StorageProfile.ImageReference.ExactVersion
- 查找使用已弃用版本的规模集。
$vmsslist = Get-AzVmss
$vmsslist | where {$_.virtualMachineProfile.storageProfile.imageReference.Version -eq '14393.4402.2105052108'} | Select-Object -Property ResourceGroupName, Name, @{label='imageOffer'; expression={$_.virtualMachineProfile.storageProfile.imageReference.Offer}}, @{label='imagePublisher'; expression={$_.virtualMachineProfile.storageProfile.imageReference.Publisher}}, @{label='imageSKU'; expression={$_.virtualMachineProfile.storageProfile.imageReference.Sku}}, @{label='imageVersion'; expression={$_.virtualMachineProfile.storageProfile.imageReference.Version}}
- 在计划/SKU 级别列出具有已弃用映像的规模集。
$vmsslist = Get-AzVmss
$vmsslist | where {$_.virtualMachineProfile.storageProfile.imageReference.Sku -eq '2016-Datacenter'} | Select-Object -Property ResourceGroupName, Name, @{label='imageOffer'; expression={$_.virtualMachineProfile.storageProfile.imageReference.Offer}}, @{label='imagePublisher'; expression={$_.virtualMachineProfile.storageProfile.imageReference.Publisher}}, @{label='imageSKU'; expression={$_.virtualMachineProfile.storageProfile.imageReference.Sku}}, @{label='imageVersion'; expression={$_.virtualMachineProfile.storageProfile.imageReference.Version}}
- 运行 Get-AzVMImageDeprecationStatus.ps1 以列出是否从计划弃用的 VM 映像创建订阅中的任何 VM 或 VM 规模集。
弃用映像对现有 VM 没有任何影响,无需执行任何操作。 当映像被弃用后,只有 VMSS 横向扩展操作以及新 VM 和 VMSS 创建操作会受到影响。
你可能想要继续使用由于特定原因而计划弃用的映像,或者你可能想要将工作负载迁移到另一个产品/服务/计划/版本。
如果要继续使用计划弃用的映像,请通用化 VM,解除分配 VM,然后为 VM 或规模集创建自定义映像。 然后更改 VM 或规模集部署以指向自定义映像。 有关详细信息,请参阅在门户中捕获 VM 映像。
注意:如果使用已弃用的付费市场映像,该映像定义了购买计划信息(映像上的“计划”对象),则当此映像被弃用后,将无法创建新的虚拟机工作负载或使用此映像执行 Azure Site Recovery (ASR) 或备份操作,因为缺少计划信息。
你想要迁移到另一个产品/服务/计划/版本:
首先,搜索同一发布者提供的其他产品/服务、计划或版本。
迁移到另一个产品/服务:
使用 Azure CLI:
az vm image list --location "chinanorth2" --publisher "MicrosoftWindowsServer"
使用 PowerShell:
Get-AzVMImage -Location "chinanorth2" -PublisherName "MicrosoftWindowsServer" -Skus $skuName
迁移到另一个计划:
搜索同一产品/服务下的其他计划,然后迁移到该计划。
Azure CLI:
az vm image list --location "chinanorth2" --publisher "MicrosoftWindowsServer" --offer "WindowsServer"
PowerShell:
Get-AzVMImage -Location "chinanorth2" -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus $skuName
迁移到另一个版本:
搜索其他版本。 建议迁移到最新版本。
Azure CLI:
az vm image list --location "chinanorth2" --publisher "MicrosoftWindowsServer" --offer "WindowsServer" --sku "2019-Datacenter-with-Containers" --all
PowerShell:
Get-AzVMImage -Location "chinanorth2" -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2019-Datacenter-with-Containers"
在将工作负载迁移到新映像之前,需要验证工作负载是否受支持,以及是否将在新映像上正常运行。
规模集通常支持映像引用替换,但 VM 不支持。
在尽量缩短停机时间的情况下将规模集工作负载迁移到较新的映像
规模集,有关更新版本的建议应包括:
若要避免停机,请确保将升级策略设置为手动或滚动。
- 如果设置为手动,则在手动升级现有实例之前,不会重置映像。
- 如果设置为滚动,则现有实例会自动升级并批量重置映像。
按照修改 Azure 虚拟机规模集中的步骤更新映像引用。
确保所有现有实例均已升级,并且使用最新模型。 还可以横向扩展工作负载并将其迁移到新实例,然后删除旧实例,而不是升级现有实例。
将现有实例全部升级到新映像后,根据需要将升级策略更改回原来的状态。
如果你使用的是 VMSS,则我们建议启用自动 OS 映像升级,以便自动将映像发布者发布的最新映像应用于规模集或 VMSS,而无需用户手动干预。 了解如何启用自动 OS 映像升级
如果你使用的是付费市场映像,则当此映像被弃用后,对于包含计划信息的映像,尝试从备份中还原 VM 可能会失败(一旦从市场中删除或弃用该映像)。 如果你使用的是包含计划信息的付费市场映像,则建议创建新的 VM 并将工作负载迁移到该映像。 如果 VM 映像是免费的(不需要计划信息),则可以继续使用单个 VM,并且应该能够从备份中还原。 请注意,这只会影响单个 VM,而不会影响 VMSS 工作负载。
当免费市场映像被弃用后,现有的 VM 或 VMSS 工作负载不会受到任何影响。 但是,无法从已弃用的免费市场映像创建新的 VM 或 VMSS 工作负载。
一般来说,可以。 但是,建议使用虚拟机映像 - 列表,对照计划中的有效版本列表进行确认。
可以使用 REST API 检查映像是否已弃用或计划弃用。
如果映像已弃用,将收到“VM 映像已弃用”响应。 如果计划弃用映像,响应将显示计划的弃用日期。
备注
可以在 Cloud Shell 或 Azure PowerShell 本地运行 Get-AzVMImageDeprecationStatus.ps1,以显示订阅中的任何 VM 是否是从计划弃用的 VM 映像创建的。 此脚本支持 VM 和 VM 规模集实例。
响应指示映像已弃用:
{
"error": {
"code": "ImageVersionDeprecated",
"message": "VM Image from publisher: MicrosoftWindowsServer with - Offer: WindowsServer, Sku: 2016-Datacenter, Version: 14393.4169.2101090332 is deprecated."
}
}
若要通过 Azure CLI 或 PowerShell 检查映像是否弃用,请执行以下操作:
Azure CLI:
az vm image show --location chinanorth2 --urn <MicrosoftWindowsServer:WindowsServer:2016-Datacenter:14393.4169.2101090332> --query [imageDeprecationStatus]
PowerShell:
Get-AzVMImage -Location "chinanorth2" -PublisherName <MicrosoftWindowsServer> -Offer "WindowsServer" -Skus <2016-Datacenter> -Version <14393.4169.2101090332> | Select-Object -ExpandProperty "ImageDeprecationStatus"
响应指示此映像已弃用:
Get-AzVMImage: VM Image from publisher: MicrosoftWindowsServer with - Offer: WindowsServer, Sku: 2016-Datacenter, Version: 14393.4169.2101090332 is deprecated.
ErrorCode: ImageVersionDeprecated
ErrorMessage: VM Image from publisher: MicrosoftWindowsServer with - Offer: WindowsServer, Sku: 2016-Datacenter, Version: 14393.4169.2101090332 is deprecated.
ErrorTarget:
StatusCode: 404
ReasonPhrase: Not Found