Azure 中虚拟机和规模集的自动扩展升级

自动扩展升级适用于 Azure 虚拟机和 Azure 虚拟机规模集。 在虚拟机(VM)或规模集上启用自动扩展升级时,Azure 会自动监视新扩展版本、评估新版本的质量和安全性、批准推出版本,然后使用扩展自动升级所有 VM。 Azure 会逐步按照安全部署做法(SDP)升级所有 VM,以防止错误的版本导致服务中断,并确保应用程序的高可用性。 此逐步推出可能需要 1-2 个月才能完成,具体取决于评估所需的时间、升级的严重性和需要升级的 VM 规模。

自动扩展升级具有以下特性:

  • 支持 Azure VM、虚拟机规模集和 Arc VM
  • 升级是在可用性优先部署模型中应用的,遵循(安全部署做法 (SDP))[https://learn.microsoft.com/azure/well-architected/operational-excellence/safe-deployments]。
  • 对于 Azure VM 和 Arc VM,每个批次中升级的 VM 不超过总数的 20%。 无法更改此批大小。
  • 所有失败的升级都会自动回滚,以尝试使 VM 恢复正常状态。
  • 所有升级都是无重启的。 因此,升级后,VM 不需要重新启动。
  • 支持所有 VM 大小。
  • Windows 和 Linux 扩展都兼容。
  • 默认情况下,从 API 版本 2025-04-01 开始启用自动升级。
  • 每个受支持的扩展单独注册。 你可以选择哪些扩展要自动升级。
  • 支持所有公共、主权和空封云区域。

自动扩展升级的工作原理是什么?

扩展升级过程会删除 VM 上的现有扩展,并使用新版本重新安装该扩展。

  1. 当扩展发布者发布同一扩展的新版本时,Azure 会检测新版本并启动质量评估过程。 此过程验证版本的安全性、质量,以确保升级的安全性,并确保不会失败。 通过评估后,版本将批准推出。
  2. Azure 从一个区域或可用区开始(发布从 Canary 区域开始),一旦完全升级,它就会扩展到下一个区域或可用区。
  3. 在区域/区域中,Azure 将 VM 分组成较小的批(基于默认或滚动升级策略),并一次升级一个批次。 成功升级上一批后,Azure 将移动到下一批。
  4. 升级后,Azure 使用应用运行状况扩展来监视 VM 和应用运行状况,以检测故障。 如果在升级后的五分钟内 VM 不正常,则升级会回滚,并安装旧版扩展。 升级会在一段时间后自动重试,无需客户干预。

可用性优先升级

适用于平台协调的升级的可用性优先模型可确保在多个可用性级别遵循 Azure 中的可用性配置。

对于进行升级的一组 VM,Azure 平台会跨区域、在区域中以及在集中协调升级。

跨区域

  • 升级将以分阶段的方式在整个 Azure 中全局推进,以防出现 Azure 范围的部署失败。
  • 一个阶段可以涵盖一个或多个区域,仅当前一阶段中符合条件的 VM 成功升级时,升级才会进入下一阶段。
  • 地理配对的区域不会并发升级,因此它们不能处于同一区域阶段。
  • 升级是否成功是通过跟踪 VM 在升级后的运行状况来衡量的。 VM 运行状况是通过 VM 的平台健康指标进行跟踪,其中包括 App Health Extension 报告的 VM 健康状况和应用健康状况。

在区域中

  • 位于不同 Azure 可用性区域中的 VM 不会使用同一升级并发升级。
  • 不在可用性集内的单个 VM 将按照尽力运行的原则进行批处理,以避免对订阅中的所有 VM 进行并发升级。

在集中

  • 公用可用性集或规模集中的所有 VM 不会并发升级。
  • 通用可用性集中的 VM 会在更新域边界内更新。 跨多个更新域的 VM 不会并发更新。
  • 公用虚拟机规模集中的 VM 将分组成批,并在更新域边界内升级。 升级期间会遵守在规模集上定义的升级策略。 每个组都采用滚动升级策略进行升级。

虚拟机规模集的升级过程

  • 在开始升级过程之前,业务流程协调程序将确保整个规模集内(出于任何原因)不正常的 VM 不会超过 20%。
  • 升级业务流程协调程序将识别要升级的一批 VM 实例。 一个升级批最多可以包含 VM 总数的 20%,最小批大小限制为一个 VM。 业务流程协调程序在识别批时会考虑升级策略和可用性区域的定义。
  • 升级后,在转移到下一批之前,始终会监视 VM 运行状况。 对于配置了应用程序运行状况探测或应用程序运行状况扩展的规模集,还会监视应用程序运行状况。 升级过程最多会等待 5 分钟(或定义的运行状况探测配置)来让 VM 变正常,然后再升级下一批。 如果 VM 在升级后未恢复其正常运行状况,则默认情况下,会在该 VM 上重新安装前一个扩展版本。
  • 升级业务流程协调程序还会跟踪升级后变为不正常的 VM 百分比。 如果升级过程中超过 20% 的已升级实例变得不正常,升级将会停止。

此过程会持续到升级了规模集中的所有实例为止。

规模集升级业务流程协调程序在升级每个批之前会检查规模集总体运行状况。 在批量升级期间,其他并发的计划内或计划外维护活动可能会影响规模集 VM 的运行状况。 在这种情况下,如果超过 20% 的规模集实例不正常,则当前批结束时,规模集升级将会停止。

支持的扩展

若要检查是否支持扩展进行自动升级,请在 Azure 门户的“扩展”边栏选项卡上查看“自动升级”状态。

显示 Azure 门户中是否支持自动升级扩展的屏幕截图。

以下是支持进行自动升级的常用扩展(并且会定期添加更多扩展):

发布者 类型
Microsoft.Azure.Automation.HybridWorker HybridWorkerForLinux
Microsoft.Azure.Automation.HybridWorker HybridWorkerForWindows
Microsoft.Azure.AzureDefenderForSQL 高级威胁防护.Windows
Microsoft.Azure.AzureDefenderForSQL 漏洞评估.Windows
Microsoft.Azure.AzureDefenderForServers MDE。Linux
Microsoft.Azure.AzureDefenderForServers MDE.Windows
Microsoft.Azure.ChangeTrackingAndInventory ChangeTracking-Linux
Microsoft.Azure.ChangeTrackingAndInventory ChangeTracking-Windows
Microsoft.Azure.Diagnostics LinuxDiagnostic
Microsoft.Azure.Extensions.Edp LinuxHibernateTestExtension
Microsoft.Azure.Extensions.Edp WindowsHibernateTestExtension
Microsoft.Azure.FleetDiagnostics FleetDiagnosticsForWindows (车队诊断工具 for Windows)
Microsoft.Azure.Geneva 日内瓦监控
Microsoft.Azure.KeyVault KeyVaultForLinux
Microsoft.Azure.KeyVault KeyVaultForWindows
Microsoft.Azure.Labservices Agent.Linux
Microsoft.Azure.Labservices Agent.Windows
Microsoft.Azure.Monitor AzureMonitorLinuxAgent
Microsoft.Azure.Monitor AzureMonitorWindowsAgent
Microsoft.Azure.Monitoring.DependencyAgent.EDP 依赖代理Linux
Microsoft.Azure.Monitoring.DependencyAgent.EDP DependencyAgentWindows
Microsoft.Azure.Monitoring.DependencyAgent 依赖代理Linux
Microsoft.Azure.Monitoring.DependencyAgent DependencyAgentWindows
Microsoft.Azure.NetworkWatcher NetworkWatcherAgentLinux
Microsoft.Azure.NetworkWatcher NetworkWatcherAgentWindows
Microsoft.Azure.Networking.DNS DNS客户端缓存
Microsoft.Azure.SCOMMI GatewayServer
Microsoft.Azure.SCOMMI WindowsAgent
Microsoft.Azure.Security.AntimalwareSignature(反恶意软件签名) 防恶意软件配置
Microsoft.Azure.Security.Dsms DSMSForWindows
Microsoft.Azure.Security.LinuxAttestation 访客声明
Microsoft.Azure.Security.Monitoring (微软.Azure.安全监控) AzureSecurityLinuxAgent
Microsoft.Azure.Security.Monitoring (微软.Azure.安全监控) Azure 安全 Windows 代理
Microsoft.Azure.Security.WindowsAttestation 访客声明
Microsoft.Azure.Security.WindowsCodeIntegrity CodeIntegrityAgent
Microsoft.Azure.ServiceFabric ServiceFabricLinuxNode
Microsoft.Azure.Watson WatsonLinuxAgent
Microsoft.Azure.Workloads MonitoringExtensionLinux
Microsoft.Azure.Workloads MonitoringExtensionWindows
Microsoft.CPlat.Core LinuxHibernateExtension
Microsoft.CPlat.Core WindowsHibernateExtension
Microsoft.CPlat.ProxyAgent ProxyAgentLinux
Microsoft.CPlat.ProxyAgent ProxyAgentWindows
Microsoft.EnterpriseCloud.Monitoring MicrosoftMonitoringAgent
Microsoft.EnterpriseCloud.Monitoring OmsAgentForLinux
Microsoft.GuestConfiguration ConfigurationForLinux
Microsoft.GuestConfiguration ConfigurationForWindows
Microsoft.ManagedServices ApplicationHealthLinux
Microsoft.ManagedServices ApplicationHealthWindows
Microsoft.OSTCExtensions DSCForLinux
Microsoft.Sentinel.AzureMonitorAgentExtensions Microsoft DNS 代理
Microsoft.SqlServer.Management SqlIaaSAgent
Microsoft.SqlServer.Management SqlIaaSAgentLinux

启用自动扩展升级

若要为扩展启用自动扩展升级,必须确保属性 enableAutomaticUpgrade 设置为 true 并已分别添加到每个扩展定义。

使用 Azure 门户

在 Azure 门户中,使用“扩展”窗格在现有虚拟机和虚拟机规模集上启用扩展自动升级。

  1. 转到“虚拟机”或“虚拟机规模集”窗格,然后选择资源名称。

  2. 在“设置”下,转到“扩展 + 应用程序”窗格,其中会显示资源上安装的所有扩展。 “自动升级状态”列显示是已启用、禁用还是不支持扩展自动升级。

  3. 选择扩展名称以打开扩展详细信息窗格。

    显示了 Azure 门户中的“扩展”窗格的屏幕截图。

  4. 选择“启用自动升级”以启用扩展的自动升级。 如有必要,请使用此按钮禁用自动升级。

    显示了 Azure 门户中的“启用自动升级”的屏幕截图。

对于虚拟机

若要为 Azure VM 上的扩展(在此示例中为网络观察程序扩展)启用自动扩展升级,请使用以下调用:

PUT on `/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/extensions/<extensionName>?api-version=2019-12-01`
{    
    "name": "extensionName",
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "location": "<location>",
    "properties": {
        "autoUpgradeMinorVersion": true,
        "enableAutomaticUpgrade": true, 
        "publisher": "Microsoft.Azure.NetworkWatcher",
        "type": "NetworkWatcherAgentWindows",
        "typeHandlerVersion": "1.4.3614.3"
        }
}

对于虚拟机规模集

PUT on `/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>?api-version=2019-12-01`
{
   "location": "<location>",
   "properties": {
   	    "virtualMachineProfile": {
            "extensionProfile": {
       	        "extensions": [
            	{
                "name": "<extensionName>",
            	  "properties": {
             		    "autoUpgradeMinorVersion": true,
             		    "enableAutomaticUpgrade": true,
              	    "publisher": "Microsoft.Azure.NetworkWatcher",
              	    "type": "NetworkWatcherAgentWindows",
              	    "typeHandlerVersion": "1.4.3614.3"
            		}
          	    }
        	    ]
    	    }
    	}
    }
}

注释

这些操作在虚拟机规模集上而不是在基础 VM 上将 enableAutomaticUpgrade 属性设置为 true

如果虚拟机规模集在 upgradeProfile 中定义自动或滚动升级模式,则虚拟机规模集会自动将更改传播到每个基础 VM。

如果虚拟机规模集在 upgradeProfile 中定义手动模式,则你还需要手动更新每个实例并将更改传播到每个基础 VM。


对多个扩展进行扩展升级

一个 VM 或虚拟机规模集可以包含多个已启用自动扩展升级的扩展。 同一个 VM 或规模集还可以包含其他未启用自动扩展升级的扩展。

如果 VM 有多个可用的扩展升级,可将这些升级一起进行批处理,但每个扩展升级将单独在一个 VM 上应用。 一个扩展发生失败不会影响到可能正在升级的其他扩展。 例如,如果已计划升级两个扩展,而第一个扩展升级失败,则在这种情况下,仍会升级第二个扩展。

当 VM 或虚拟机规模集包含配置了扩展排序的多个扩展时,你也可以应用自动扩展升级。 扩展排序适用于 VM 的首次部署。 扩展上将来的任何扩展升级都是独立应用的。

EnableAutomaticUpgrade 和 AutoUpgradeMinorVersion 之间的差别

  • AutoUpgradeMinorVersion:

    • 在 VM 创建期间以及在使用新配置升级 VM 时将使用此属性。
    • 设置为 true 时,它会确保在 VM 上自动安装扩展的最新次要版本。
    • 它会使用可用的最新稳定次要版本替代 TypeHandlerVersion
    • 升级 VM 配置时,如果一个新的次要版本可用,则它被视为配置更改。 该扩展是使用最新的次要版本重新安装的。
    • 这样,新创建的 VM 将与最新的稳定次要扩展版本保持同步。
    • 如果要手动将扩展设置为特定版本,请将此属性设置为 false
  • EnableAutomaticUpgrade:

    • 此属性会影响现有 VM。
    • 它不会影响在 VM 创建期间安装的版本。
    • 创建 VM 后,如果 VM 未运行扩展的最新次要版本,请启用此属性来触发自动升级。
    • 升级不会导致 VM 重启,并以安全的滚动方式推出。 失败的升级会立即回滚,以提供高可用性和可靠性。
    • 现有的 VM 会自动更新到最新的次要版本来确保它们保持安全和最新。

我们建议同时启用这两个属性,以使所有 VM 都保持安全且最新。

对主要扩展版本的升级永远不会由任一属性自动执行,因为主要版本可能包含中断性变更。 必须手动将 TypeHandlerVersion 设置为主版本,并将每个现有的 VM 手动升级到最新的主要版本。

后续步骤