本文解答了有关弃用 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
如果 SQL Server Azure 市场映像已弃用,SQL Server 实例会发生什么情况?
如果 SQL Server 映像已弃用,则 SQL Server 实例不会发生任何情况。 可以继续使用 Azure VM 和 SQL Server 实例,而不会中断。 但是,将来将无法再部署该映像。
如何检查特定 SKU 下的活动映像版本?
活动映像不是计划弃用或已弃用的映像。 使用以下 Azure CLI 命令列出 SKU 下的活动映像版本:
Azure CLI:
az vm image list --<location> chinanorth2 --publisher <MicrosoftWindowsServer> --offer <WindowsServer> --sku <2022-Datacenter> --all --query "[?imageDeprecationStatus.imageState=='Active']"