有关不推荐映像的常见问题解答

本文解答了有关弃用 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}}

弃用映像对现有 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