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

本文解答了有关弃用 Azure 市场中的映像时会发生什么情况的常见问题。

我收到一封电子邮件说我的映像要按计划弃用。 这是什么意思呢?

可能会收到一封电子邮件,告知虚拟机(VM)在计划弃用或已弃用的映像上运行。 发布者可能会出于多种原因弃用映像,这可能是由于安全问题或映像即将结束。

在虚拟机或规模集使用即将弃用的映像时,你可能会收到的电子邮件的屏幕截图。

可以在版本、计划或产品/服务级别弃用映像:

  • 弃用映像版本 - 删除单个 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 没有任何影响,无需执行任何操作。 弃用映像时,只会影响虚拟机规模集横向扩展作和新的 VM 和虚拟机规模集创建作。

如何将工作负载迁移到另一个映像?

你可能想要继续使用由于特定原因而计划弃用的映像,或者你可能想要将工作负载迁移到另一个产品/服务/计划/版本。 如果要继续使用计划弃用的映像,请通用化 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 虚拟机规模集中的步骤更新映像引用。
  • 确保所有现有实例均已升级,并且使用最新模型。 还可以横向扩展工作负载并将其迁移到新实例,然后删除旧实例,而不是升级现有实例。
  • 将现有实例全部升级到新映像后,根据需要将升级策略更改回原来的状态。 如果使用虚拟机规模集,我们建议启用自动 OS 映像升级,以便自动将映像发布者发布的最新映像应用于规模集,而无需手动用户干预。 了解如何启用 自动 OS 映像升级

当包含购买计划信息的付费市场映像被弃用后,会发生什么情况?

如果使用的是付费市场映像,则在从映像中删除或弃用映像后,如果映像被删除或弃用,则尝试从备份还原 VM 的映像可能会失败。 如果将付费市场映像与计划信息配合使用,建议创建新的 VM 并将工作负荷迁移到该映像。 如果 VM 映像是免费的,因为它不需要计划信息,则可以继续使用单个 VM,并且应该能够从备份还原。 这只会影响单个 VM,而不会影响虚拟机规模集工作负荷。

当免费市场映像被弃用后,会发生什么情况?

在弃用免费市场映像时,现有 VM 或虚拟机规模集工作负荷不会造成任何影响。 但是,无法从已弃用的免费市场映像创建新的 VM 或虚拟机规模集工作负荷。

是否所有低于指定版本的映像版本也已弃用?

一般来说,可以。 但是,建议使用虚拟机映像 - 列表,对照计划中的有效版本列表进行确认。

如何接收有关映像弃用的电子邮件?

确保订阅上有所有者、帐户管理员或用户访问管理员角色。

如何检查特定映像是否已弃用或计划弃用?

可以使用 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"

若要检查特定 SKU 的所有版本及其弃用详细信息,

Get-AzVMImage -Location "chinanorth2" `
  -PublisherName "center-for-internet-security-inc" `
  -Offer "cis-rocky" `
  -Skus "cis-rockylinux-9-l1-gen2-azure-observability" `
  -Expand "properties/imageDeprecationStatus" |
  Select-Object Version, @{
    Name = "DeprecationDetails"
    Expression = { $_.ImageDeprecationStatus | Out-String }
  } | Format-Table -Wrap -AutoSize

响应指示此映像已弃用:

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

如果 SQL Server Azure 市场映像已弃用,SQL Server 实例会发生什么情况?

如果 SQL Server 映像已弃用,则 SQL Server 实例不会发生任何情况。 可以继续使用 Azure VM 和 SQL Server 实例,而不会中断。 但是,将来将无法再部署该映像。

如何检查特定 SKU 下的活动映像版本?

活动映像不是计划弃用或已弃用的映像。 使用以下命令列出 SKU 下的活动映像版本:

Azure CLI:

az vm image list --<location> chinanorth2 --publisher <MicrosoftWindowsServer> --offer <WindowsServer> --sku <2022-Datacenter> --all --query "[?imageDeprecationStatus.imageState=='Active']"

PowerShell:

Get-AzVMImage -Location "chinanorth2" `
  -PublisherName "center-for-internet-security-inc" `
  -Offer "cis-rocky" `
  -Skus "cis-rockylinux-9-l1-gen2-azure-observability" `
  -Expand "properties/imageDeprecationStatus" |
  Where-Object { $_.ImageDeprecationStatus.ImageState -eq "Active" } |
  Select-Object Version