本文解答了有关 Azure 市场中映像弃用时会发生什么情况的常见问题。
收到图像废弃通知意味着什么?
当您的虚拟机(VM)或虚拟机规模集在计划弃用的映像上运行时,您会收到电子邮件通知。 发布者出于各种原因弃用映像,包括安全问题或映像生命周期结束时。
弃用级别
弃用发生在三个级别:
- 映像版本弃用:特定的 VM 映像版本。
- 计划/SKU 弃用:整个计划或 SKU 及其中的所有映像版本。
- 产品包弃用:整个 VM 产品包,包括所有计划和映像版本。
弃用时间线是什么,它如何影响我的工作负荷?
弃用时间线
通知期(实施前90天)
在通知期间:
- 你会收到关于即将弃用的通知邮件和 Azure Advisor 建议。
- 现有 VM 和虚拟机规模集实例继续正常运行。
- 可以使用 Azure CLI、PowerShell 或 API 部署新实例。
- 弃用警告显示在 Azure 门户、Azure CLI 和 API 中。
- 可以在强制日期之前迁移或更新部署。
强制执行日期后(软删除)
生效日期之后:
- 你会收到有关弃用强制实施的电子邮件通知和 Azure 顾问建议。
- 阻止使用已弃用映像的新 VM 或虚拟机规模集的部署。
- 现有 VM 实例继续运行,而不会中断。
- 现有的虚拟机规模集部署仍可正常运行,但无法横向扩展。
- 不能重新部署使用已弃用镜像的 VM(例如,在解除分配或发生故障后)。
影响摘要
下表汇总了镜像弃用的影响:
| Action | 实施日期之前 | 实施日期之后 |
|---|---|---|
| 现有 VM | 继续正常运行 | 继续正常运行 |
| 现有虚拟机规模集实例 | 继续正常运行 | 继续正常运行 |
| 新的 VM 部署 | 允许使用,但会产生弃用警告 | Blocked |
| 新的虚拟机规模集部署 | 允许使用,但会产生弃用警告 | Blocked |
| 虚拟机规模集横向扩展 | 允许 | Blocked |
| VM 重新部署 | 允许 | Blocked |
所需作
为了避免中断:
- 如果希望您的虚拟机规模集在弃用后能够横向扩展,请务必在强制执行日期之前迁移到受支持的映像。
- 如果配置了自动 OS 升级,则只有产品/服务或计划弃用会影响你,而不是单个版本弃用。
如何使用已弃用的映像查找 VM 和虚拟机规模集?
使用 Azure Resource Graph
在 Azure Resource Graph 中运行以下查询,以识别受影响的资源。
使用已弃用的映像查找虚拟机
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
使用已弃用的映像查找虚拟机规模集
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
使用 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-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}}
列出具有已弃用计划/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}}
使用自动化脚本
运行 Get-AzVMImageDeprecationStatus.ps1,列出在订阅中使用已弃用或即将弃用映像创建的所有 VM 或虚拟机规模集。
如何迁移到其他映像?
处理已弃用的映像时,请选择以下两个选项之一。
选项 1:创建自定义映像
若要继续使用已弃用的映像,请执行以下操作:
- 将虚拟机通用化。
- 解除分配 VM。
- 从 VM 创建自定义映像。
- 更新 VM 或虚拟机规模集部署以使用自定义映像。
有关详细步骤,请参阅 在门户中捕获 VM 的映像。
重要
对于已弃用的付费市场映像和购买计划信息:弃用后,由于缺少计划信息,无法创建新的 VM 工作负荷或执行 Azure Site Recovery 或备份还原操作。 迁移到支持的映像。
选项 2:迁移到另一个映像
步骤 1:查找来自同一发布服务器的备用映像
使用 Azure CLI:
# List all offers from a publisher
az vm image list --location "chinanorth2" --publisher "MicrosoftWindowsServer"
# List all plans under an offer
az vm image list --location "chinanorth2" --publisher "MicrosoftWindowsServer" --offer "WindowsServer"
# List all versions of a specific SKU
az vm image list --location "chinanorth2" --publisher "MicrosoftWindowsServer" --offer "WindowsServer" --sku "2019-Datacenter-with-Containers" --all
使用 PowerShell:
# List all offers from a publisher
Get-AzVMImage -Location "chinanorth2" -PublisherName "MicrosoftWindowsServer"
# List all plans under an offer
Get-AzVMImage -Location "chinanorth2" -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer"
# List all versions of a specific SKU
Get-AzVMImage -Location "chinanorth2" -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2019-Datacenter-with-Containers"
步骤 2:测试兼容性
在迁移之前,请验证新镜像是否支持应用程序负载并能正常运行。
步骤 3:更新部署
对于虚拟机规模集(最短停机时间)
将升级策略设置为 “手动 ”或 “滚动” 以避免停机:
- 手动:现有实例不会被重装,直到您手动升级它们。
- 滚动:Azure 自动批量升级实例。
按照“修改 Azure 虚拟机规模集”更新镜像引用。
通过以下任一方法将所有实例升级到最新模型:
- 升级现有实例,或
- 使用新实例横向扩展,然后删除旧实例。
根据需要将升级策略还原到其原始设置。
启用 自动 OS 映像升级 以自动应用最新映像,而无需手动干预。
对于虚拟机
虚拟机不支持就地映像引用替换。 使用更新的映像创建新的 VM 并迁移工作负荷。
具有购买计划信息的付费市场映像会发生什么情况?
付费市场映像的重要注意事项
弃用具有购买计划信息的付费市场映像时:
- 在映像从市场中删除后,从备份还原虚拟机可能会失败。
- 弃用后将无法创建新的虚拟机。
- 由于缺少计划信息,Azure Site Recovery操作失败。
- 由于缺少计划信息,备份还原作失败。
建议的操作
使用支持的镜像创建新的虚拟机,并在停用开始日期之前迁移工作负荷。
注意
可以继续使用无需计划信息的免费 Marketplace 映像用于单一虚拟机,并可以从备份中还原这些虚拟机。 此限制仅影响付费映像,不会影响虚拟机规模集工作负荷。
免费Marketplace图片会发生什么情况?
免费市场映像(无需购买计划):
- 现有 VM 和虚拟机规模集工作负荷将继续运行,而不会中断。
- 可以从备份中还原虚拟机。
- 弃用功能后,您将无法创建新的 VM 或虚拟机规模集部署。
较低于弃用版本的所有映像版本是否也被弃用?
一般来说,可以。 但是,使用 虚拟机映像 - 列表 API 对计划中列出的有效版本进行确认。
如何接收有关镜像弃用的电子邮件通知?
若要接收弃用通知,必须在订阅中具有以下角色之一:
- 所有者
- 帐户管理员
如何检查特定镜像是否已弃用或计划弃用?
使用 REST API
使用 虚拟机映像 - Get API 来检查弃用状态。
如果映像已弃用,则会收到以下响应:
{
"error": {
"code": "ImageVersionDeprecated",
"message": "VM Image from publisher: MicrosoftWindowsServer with - Offer: WindowsServer, Sku: 2016-Datacenter, Version: 14393.4169.2101090332 is deprecated."
}
}
使用 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
使用自动化脚本
在 Cloud Shell 或本地运行 Get-AzVMImageDeprecationStatus.ps1 ,检查订阅中已弃用映像的所有 VM 和虚拟机规模集。
如果 SQL Server Azure 市场映像已弃用,SQL Server 会发生什么情况?
当 SQL Server Azure 市场映像被弃用时,您的 SQL Server 不会受影响。
- Azure VM 将继续运行,而不会中断。
- SQL Server 实例继续正常运行。
- 无法使用已弃用的 SQL Server 映像部署新 VM。
现有部署不需要任何动作。
如何列出特定 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