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

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

概述

弃用Azure Marketplace映像时,新部署的可用性会发生变化,但现有虚拟机(VM)和虚拟机规模集(VMSS)实例将继续正常运行。 本文说明映像弃用过程中平台的行为、哪些操作会受到影响,以及您必须采取的措施(如果有)。

映像弃用的含义

弃用会从Azure Marketplace目录中删除映像,但不会删除现有 VM 的 OS 磁盘。

  • 执行日期后,不能使用已弃用的映像来创建新的 VM 或 VMSS 实例。
  • 在强制日期之前创建的现有 VM 和 VMSS 实例继续正常运行。
  • 在强制执行日期之后,将阻止 VMSS 横向扩展操作,因为横向扩展需要从已弃用的镜像中创建新实例。

要点

  • 现有 VM 不需要执行任何作: 创建后,VM 会从其 OS 磁盘启动,而不是从原始映像启动。 弃用不会影响正在运行的虚拟机。
  • 大多数操作继续正常工作: 启动、停止、重启、取消分配和重新部署均正常。
  • 重建映像被阻止: 这是唯一受影响的 VM 操作,因为它需要从源映像重新创建 OS 磁盘。
  • VMSS 实例继续运行: 现有实例不受影响,但强制实施后会阻止横向扩展。

收到图像废弃通知意味着什么?

当您的虚拟机(VM)或虚拟机规模集运行在计划弃用的映像上时,您会收到电子邮件通知。 发布者出于各种原因弃用映像,包括安全问题或映像生命周期结束时。

使用计划弃用的映像的虚拟机或规模集的电子邮件通知的屏幕截图。

弃用级别

弃用发生在三个级别:

  • 映像版本弃用:特定的 VM 映像版本。
  • 计划/SKU 弃用:整个计划或 SKU 及其中的所有映像版本。
  • 产品包弃用:整个 VM 产品包,包括所有计划和映像版本。

弃用时间线是什么,它如何影响我的工作负荷?

通知期(实施前90天)

在通知期间:

  • 你会收到有关即将弃用的电子邮件通知,以及“Azure Advisor”建议。
  • 现有 VM 和虚拟机规模集实例继续正常运行。
  • 可以使用 Azure CLI、PowerShell 或 API 部署新实例。
  • 弃用警告显示在Azure门户、Azure CLI和 API 中。
  • 可以在强制日期之前迁移或更新部署。

强制执行日期后(软删除)

生效日期之后:

  • 阻止使用已弃用映像的新 VM 或虚拟机规模集的部署。
  • 现有 VM 和虚拟机规模集实例将继续运行,而不会中断。
  • 虚拟机规模集扩展被阻止,因为这需要从已弃用的映像创建新的实例。
  • 大多数虚拟机操作(启动、停止、重启、解除分配、重新部署)将继续工作。 有关详细信息,请参阅哪些操作会受到映像弃用的影响?

所需作

为了避免中断:

  • 如果需要虚拟机规模集在弃用后横向扩展,请在实施日期之前将 虚拟机规模集 迁移到受支持的映像。
  • 如果配置了自动 OS 升级,则只有产品/服务或计划弃用会影响你,而不是单个版本弃用。

哪些操作会受到映像弃用的影响?

VM操作

创建 VM 后,Azure创建 OS 磁盘,VM 仅从该磁盘启动,而不是从原始映像引用启动。 已弃用或删除的映像不会影响已运行的 VM。

运算 实施前 强制实施后 Explanation
重置映像 作品 Blocked 重置映像需要Azure从源映像创建新的 OS 磁盘。 如果映像已弃用或删除,则重新映像会失败。
重新部署 作品 作品 重新部署会将 VM 移到新硬件,但不重新创建 OS 磁盘。
启动/重启 作品 作品 这些操作不需要源图像。
解除分配/停止 作品 作品 这些操作不需要源图像。

注意

VM 的映像图像引用属性可能从 Azure 门户消失,但这不会影响 VM 操作。 OS 磁盘是启动的权威磁盘。

虚拟机规模集操作

即使基本映像已弃用,现有虚拟机规模集实例也继续正常运行。

运算 实施前 强制实施后
现有实例 继续运行 继续运行
横向扩展 允许 Blocked
重置映像 作品 Blocked

需要的操作: 对于现有工作负载,无需任何操作。 如果需要在停止支持后扩展虚拟机规模集的容量,请在生效日期之前迁移到受支持的映像。

如何查找使用已弃用映像的 VM?

选项 1:使用自动化脚本(建议)

运行 Get-AzVMImageDeprecationStatus.ps1 以列出订阅中从已弃用或即将弃用的映像创建的所有虚拟机。

Option 2:使用 Azure Resource Graph

Azure Resource Graph 中运行以下查询,列出所有 VM 及其映像详细信息:

resources 
| where type == "microsoft.compute/virtualmachines" 
//| where properties.storageProfile.imageReference.publisher =~ 'MicrosoftWindowsServer' //Optional: Filter by publisher
//| where properties.storageProfile.imageReference.sku =~ '2016-Datacenter' //Optional: Filter by SKU (Plan)
//| where properties.storageProfile.imageReference.version == '14393.4467.2106061537' //Optional: Filter by 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

Option 3:使用 Azure CLI

要列出使用特定 SKU 的所有虚拟机,请用已弃用的 SKU 替换2016-Datacenter

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}"

选项 4:使用 PowerShell

要列出使用特定 SKU 的所有虚拟机,请用已弃用的 SKU 替换2016-Datacenter

Get-AzVM | Where-Object {$_.StorageProfile.ImageReference.Sku -eq '2016-Datacenter'} | Select-Object -Property ResourceGroupName, Name, @{label='imageOffer'; expression={$_.StorageProfile.ImageReference.Offer}}, @{label='imagePublisher'; expression={$_.StorageProfile.ImageReference.Publisher}}, @{label='imageSKU'; expression={$_.StorageProfile.ImageReference.Sku}}, @{label='imageVersion'; expression={$_.StorageProfile.ImageReference.ExactVersion}}

若要列出使用特定映像版本的所有 VM(请替换为已弃用的版本):

Get-AzVM | Where-Object {$_.StorageProfile.ImageReference.ExactVersion -eq '14393.4402.2105052108'} | Select-Object -Property ResourceGroupName, Name, @{label='imageOffer'; expression={$_.StorageProfile.ImageReference.Offer}}, @{label='imagePublisher'; expression={$_.StorageProfile.ImageReference.Publisher}}, @{label='imageSKU'; expression={$_.StorageProfile.ImageReference.Sku}}, @{label='imageVersion'; expression={$_.StorageProfile.ImageReference.ExactVersion}}

如何使用已弃用的映像查找虚拟机规模集?

选项 1:使用自动化脚本(建议)

运行 Get-AzVMImageDeprecationStatus.ps1 列出在订阅中从已弃用或即将弃用的映像创建的所有虚拟机规模集。

Option 2:使用 Azure Resource Graph

Azure Resource Graph 中运行以下查询,列出所有虚拟机规模集及其映像详细信息:

resources 
| where type == "microsoft.compute/virtualmachinescalesets" 
//| where properties.virtualMachineProfile.storageProfile.imageReference.publisher =~ 'MicrosoftWindowsServer' //Optional: Filter by publisher
//| where properties.virtualMachineProfile.storageProfile.imageReference.sku =~ '2016-Datacenter' //Optional: Filter by SKU (Plan)
//| where properties.virtualMachineProfile.storageProfile.imageReference.version == '14393.4467.2106061537' //Optional: Filter by version
//| where properties.virtualMachineProfile.storageProfile.imageReference.version != "latest" //Optional: Exclude scale sets using "latest"
| 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

Option 3:使用 Azure CLI

若要使用特定 SKU 列出所有虚拟机规模集,请将 2016-Datacenter 替换为您已弃用的 SKU。

az vmss list --query "[?virtualMachineProfile.storageProfile.imageReference.sku=='2016-Datacenter'].{VMSS:id, imageOffer:virtualMachineProfile.storageProfile.imageReference.offer, imagePublisher:virtualMachineProfile.storageProfile.imageReference.publisher, imageSku:virtualMachineProfile.storageProfile.imageReference.sku, imageVersion:virtualMachineProfile.storageProfile.imageReference.version}"

若要使用特定映像版本列出所有虚拟机规模集(替换为已弃用的版本):

az vmss list --query "[?virtualMachineProfile.storageProfile.imageReference.version=='14393.4402.2105052108'].{VMSS:id, imageOffer:virtualMachineProfile.storageProfile.imageReference.offer, imagePublisher:virtualMachineProfile.storageProfile.imageReference.publisher, imageSku:virtualMachineProfile.storageProfile.imageReference.sku, imageVersion:virtualMachineProfile.storageProfile.imageReference.version}"

选项 4:使用 PowerShell

要使用特定 SKU 查找虚拟机规模集,请将 2016-Datacenter 替换为已弃用的 SKU。

$vmsslist = Get-AzVmss
$vmsslist | Where-Object {$_.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}}

若要使用特定映像版本查找虚拟机规模集(请替换为已弃用的版本):

$vmsslist = Get-AzVmss
$vmsslist | Where-Object {$_.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}}

我应该在什么时候将虚拟机或虚拟机规模集迁移到不同的映像?

迁移并非始终是必需的。 查看以下方案以确定是否需要采取措施:

需要迁移

  • 需要横向扩展的虚拟机规模集: 在生效日期之后将阻止横向扩展作业,因为创建新实例需要使用已弃用的映像。 如果需要横向扩展功能,请在强制实施之前迁移。
  • 需要执行映像重置操作的工作负载:重置映像会从源映像重新创建操作系统磁盘,这种操作在映像弃用后可能会失败。
  • 灾难恢复场景: 执行 Azure Site Recovery 及依赖已弃用映像的备份还原操作在强制实施后将不起作用。
  • 付费市场映像: 废弃之后,由于缺少购买计划信息,您将无法创建新的工作负载或执行还原操作。 迁移到支持的映像。

不需要迁移

  • 运行不需要重置映像的 VM: 创建后,VM 从其 OS 磁盘启动,而不是从原始映像启动。 弃用不会影响已启动的虚拟机。
  • 不横向扩展的虚拟机规模集: 现有实例继续正常运行。
  • 例行操作: 强制实施后,启动、停止、重启、释放资源和重新部署的所有操作将继续有效。
  • 使用自动 OS 升级的虚拟机规模集: 如果配置了自动 OS 升级,并且仅弃用映像版本(不是整个产品/服务或计划),则无需采取措施。

建议的操作

如何将 VM 迁移到其他映像?

Azure VM 不支持就地 OS 升级。 使用受支持的映像创建新 VM,迁移数据并退役旧 VM。

重要

对于已弃用的付费 Marketplace 映像,由于缺少计划信息,弃用后无法创建新的 VM 或执行备份还原操作。 在实施日期之前进行迁移。

第 1 部分:创建新 VM

  1. 确定替换映像:检查弃用电子邮件中是否有建议的替换。 有关详细信息,请参阅 使用 Azure CLI 查找并使用图像使用 Azure PowerShell 查找并使用图像

  2. 配置新 VM:匹配现有 VM 的区域和网络设置,以便进行最简单的迁移。 如果需要,可以更改 VM 大小或区域。

  3. 部署和测试:确认 VM 已正确启动,并存在应用程序依赖项。

第 2 部分:迁移数据

方法 A:分离和附加数据磁盘(建议)

如果工作负荷数据存储在数据磁盘上(而不是 OS 磁盘):

  1. 停止并释放旧虚拟机。
  2. 从旧 VM 分离数据磁盘。 有关详细信息,请参阅 从 Linux VM 卸载数据磁盘从 Windows VM 卸载数据磁盘
  3. 将数据磁盘附加到新 VM。 有关详细信息,请参阅 将数据磁盘附加到 Linux VM将数据磁盘附加到 Windows VM
  4. 启动新的 VM 并验证数据可访问性。

注意

此方法不会保留 OS 磁盘上的数据。 仅迁移附加数据磁盘上的数据。

方法 B:使用快照(对于 OS 磁盘数据或备份要求)

如果需要在迁移之前保留 OS 磁盘数据或创建备份:

  1. 创建 数据磁盘的快照。
  2. 从快照创建托管磁盘
  3. 将磁盘附加到新 VM。 有关详细信息,请参阅 将数据磁盘附加到 Linux VM将数据磁盘附加到 Windows VM

方法 C:使用基于文件的传输

使用 OS 传输工具进行选择性数据迁移:

  • Windows:Robocopy 或 SMB 共享
  • Linux:rsync、scp 或 sftp
  • Cross-OSAzCopy与Azure存储作为中间位置

第 3 部分:切换

  1. 验证:验证网络连接、应用程序功能、防火墙规则和扩展。
  2. 更新引用:将 DNS 名称、负载均衡器或 API 终结点指向新 VM。
  3. 停用:暂时保留旧 VM 进行回滚,然后解除分配并删除它。

如何将虚拟机规模集迁移到其他映像?

迁移方法取决于是映像版本、计划/SKU还是整个产品被弃用。

版本弃用

如果仅停用某个特定的镜像版本:

  • 使用“latest”版本:新实例无需采取任何行动。 Azure在部署时解析为最新的可用版本。 现有实例保留其原始版本。
  • 使用自动 OS 升级:无需执行任何作。 Azure自动将现有实例升级到最新版本,无论您的映像引用使用的是“最新”还是固定版本。
  • 使用没有自动 OS 升级的固定版本:更新映像版本以指向受支持的版本。 请参阅 修改Azure虚拟机规模集。 更新模型后,使用以下方法之一升级现有实例:
    • 手动升级:使用 az vmss update-instances (CLI) 或 Update-AzVmssInstance (PowerShell) 升级特定实例。
    • 滚动升级策略:将升级策略配置为“滚动”,以便实例在模型更改时自动升级。

小窍门

启用 自动 OS 映像升级 ,以避免对将来的版本弃用进行手动干预。

计划/SKU 弃用

如果整个计划或 SKU 被弃用,请使用扩展/缩减方法更新到同一提供中的不同 SKU:

  1. 从弃用电子邮件中查找备用 SKU。 有关详细信息,请参阅 使用 Azure CLI 查找并使用图像使用 Azure PowerShell 查找并使用图像

  2. 更新 VMSS 模型以使用新的 SKU:

    az vmss update --resource-group <resource-group> --name <vmss-name> \
      --set virtualMachineProfile.storageProfile.imageReference.sku=<new-sku> \
      --set virtualMachineProfile.storageProfile.imageReference.version=latest
    
  3. 横向扩展以使用更新的映像创建新实例,然后横向扩展以删除旧实例。 或删除特定的旧实例,让规模集将其替换为新实例。

重要

升级或重新映像现有实例会替换其 OS 磁盘。 使用横向扩展/横向缩减以避免 OS 磁盘上的数据丢失。

产品/服务弃用

如果整个服务套餐已过时,请使用受支持的映像创建新的虚拟机规模集。

  1. 在您的弃用邮件中查找替代产品/服务报价,或在Azure Marketplace中搜索。

  2. 使用替换映像创建新的虚拟机规模集。 匹配现有配置(网络、扩展、缩放规则)。

  3. 彻底测试应用程序兼容性。 不同的发布者或产品/服务可能具有显著的 OS 或配置差异。

  4. 将流量迁移到新的规模集,然后删除旧规模集。

注意

建议创建新的 VMSS,而不是在更改发布者或产品/服务时进行就地更新,因为映像之间的差异通常很重要。

如何接收有关镜像弃用的电子邮件通知?

Azure会通过两个渠道通知你关于映像弃用的信息:

  • 电子邮件通知:直接发送给订阅管理员,其中包含订阅的 “所有者 ”或 “帐户管理员 ”角色。
  • Azure Advisor建议:弃用建议显示在 Azure Advisor 中。

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

Option 1:使用 Azure CLI

az vm image show --location chinanorth2 --urn MicrosoftWindowsServer:WindowsServer:2016-Datacenter:14393.4169.2101090332 --query [imageDeprecationStatus]

选项 2:使用 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

选项 3:使用 REST API

使用 虚拟机映像 - 获取 API。 如果映像已弃用,则会收到如下响应:

{
  "error": {
    "code": "ImageVersionDeprecated",
    "message": "VM Image from publisher: MicrosoftWindowsServer with - Offer: WindowsServer, Sku: 2016-Datacenter, Version: 14393.4169.2101090332 is deprecated."
  }
}

选项 4:使用自动化脚本

在本地运行 Get-AzVMImageDeprecationStatus.ps1,以检查订阅中所有虚拟机和虚拟机规模集中是否存在已弃用的映像。

如何列出特定 SKU 当前可用的(非弃用)映像版本?

当前映像是指未计划过时或已经过时的映像。

Option 1:使用 Azure CLI

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

选项 2:使用 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

如果SQL Server的Azure Marketplace映像被弃用,SQL Server会发生什么情况?

弃用SQL Server Azure Marketplace映像时,SQL Server将不受影响:

  • Azure VM 继续运行,而不会中断。
  • SQL Server实例继续正常运行。
  • 无法使用已弃用的SQL Server映像部署新 VM。

现有部署不需要任何动作。