本文解答了有关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 和虚拟机规模集使用已弃用的映像。 请参阅如何使用已弃用的映像查找 VM?以及如何使用已弃用的映像查找虚拟机规模集?。
- 评估在实施后,负载是否需要任何被阻止的操作。
- 如果需要迁移,在强制日期之前规划和测试。
如何将 VM 迁移到其他映像?
Azure VM 不支持就地 OS 升级。 使用受支持的映像创建新 VM,迁移数据并退役旧 VM。
重要
对于已弃用的付费 Marketplace 映像,由于缺少计划信息,弃用后无法创建新的 VM 或执行备份还原操作。 在实施日期之前进行迁移。
第 1 部分:创建新 VM
确定替换映像:检查弃用电子邮件中是否有建议的替换。 有关详细信息,请参阅 使用 Azure CLI 查找并使用图像 或 使用 Azure PowerShell 查找并使用图像。
配置新 VM:匹配现有 VM 的区域和网络设置,以便进行最简单的迁移。 如果需要,可以更改 VM 大小或区域。
部署和测试:确认 VM 已正确启动,并存在应用程序依赖项。
第 2 部分:迁移数据
方法 A:分离和附加数据磁盘(建议)
如果工作负荷数据存储在数据磁盘上(而不是 OS 磁盘):
- 停止并释放旧虚拟机。
- 从旧 VM 分离数据磁盘。 有关详细信息,请参阅 从 Linux VM 卸载数据磁盘或 从 Windows VM 卸载数据磁盘。
- 将数据磁盘附加到新 VM。 有关详细信息,请参阅 将数据磁盘附加到 Linux VM 或 将数据磁盘附加到 Windows VM。
- 启动新的 VM 并验证数据可访问性。
注意
此方法不会保留 OS 磁盘上的数据。 仅迁移附加数据磁盘上的数据。
方法 B:使用快照(对于 OS 磁盘数据或备份要求)
如果需要在迁移之前保留 OS 磁盘数据或创建备份:
- 创建 数据磁盘的快照。
- 从快照创建托管磁盘。
- 将磁盘附加到新 VM。 有关详细信息,请参阅 将数据磁盘附加到 Linux VM 或 将数据磁盘附加到 Windows VM。
方法 C:使用基于文件的传输
使用 OS 传输工具进行选择性数据迁移:
- Windows:Robocopy 或 SMB 共享
- Linux:rsync、scp 或 sftp
- Cross-OS:AzCopy与Azure存储作为中间位置
第 3 部分:切换
- 验证:验证网络连接、应用程序功能、防火墙规则和扩展。
- 更新引用:将 DNS 名称、负载均衡器或 API 终结点指向新 VM。
- 停用:暂时保留旧 VM 进行回滚,然后解除分配并删除它。
如何将虚拟机规模集迁移到其他映像?
迁移方法取决于是映像版本、计划/SKU还是整个产品被弃用。
版本弃用
如果仅停用某个特定的镜像版本:
- 使用“latest”版本:新实例无需采取任何行动。 Azure在部署时解析为最新的可用版本。 现有实例保留其原始版本。
- 使用自动 OS 升级:无需执行任何作。 Azure自动将现有实例升级到最新版本,无论您的映像引用使用的是“最新”还是固定版本。
-
使用没有自动 OS 升级的固定版本:更新映像版本以指向受支持的版本。 请参阅 修改Azure虚拟机规模集。 更新模型后,使用以下方法之一升级现有实例:
-
手动升级:使用
az vmss update-instances(CLI) 或Update-AzVmssInstance(PowerShell) 升级特定实例。 - 滚动升级策略:将升级策略配置为“滚动”,以便实例在模型更改时自动升级。
-
手动升级:使用
小窍门
启用 自动 OS 映像升级 ,以避免对将来的版本弃用进行手动干预。
计划/SKU 弃用
如果整个计划或 SKU 被弃用,请使用扩展/缩减方法更新到同一提供中的不同 SKU:
从弃用电子邮件中查找备用 SKU。 有关详细信息,请参阅 使用 Azure CLI 查找并使用图像 或 使用 Azure PowerShell 查找并使用图像。
更新 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横向扩展以使用更新的映像创建新实例,然后横向扩展以删除旧实例。 或删除特定的旧实例,让规模集将其替换为新实例。
重要
升级或重新映像现有实例会替换其 OS 磁盘。 使用横向扩展/横向缩减以避免 OS 磁盘上的数据丢失。
产品/服务弃用
如果整个服务套餐已过时,请使用受支持的映像创建新的虚拟机规模集。
在您的弃用邮件中查找替代产品/服务报价,或在Azure Marketplace中搜索。
使用替换映像创建新的虚拟机规模集。 匹配现有配置(网络、扩展、缩放规则)。
彻底测试应用程序兼容性。 不同的发布者或产品/服务可能具有显著的 OS 或配置差异。
将流量迁移到新的规模集,然后删除旧规模集。
注意
建议创建新的 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。
现有部署不需要任何动作。