你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

自动扩展升级适用于 Azure 虚拟机和 Azure 虚拟机规模集。 在虚拟机 (VM) 或规模集中启用自动扩展升级后,每当扩展发布者发布了扩展的新版本,该扩展就会自动升级。

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

  • 支持 Azure VM 和虚拟机规模集。
  • 在可用性优先部署模型中应用升级。
  • 对于虚拟机规模集,在一个批次中升级的规模集 VM 数不超过总数的 20%。 最小批大小为一个 VM。
  • 所有 VM 大小以及 Windows 和 Linux 扩展都是兼容的。
  • 自动升级在任何时候都是可选的。
  • 启用了任何大小的虚拟机规模集。
  • 每个受支持的扩展单独注册。 你可以选择哪些扩展要自动升级。
  • 所有公有云区域均受支持。

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

每当扩展发布者发布同一扩展的新版本时,扩展升级过程都会替换 VM 上的现有扩展版本。 安装新扩展后,VM 的运行状况会受到监视。 如果 VM 在升级完成后的 5 分钟内处于不正常状态,则扩展版本将回滚到前一个版本。

系统会自动重试失败的扩展升级。 它会每隔几天自动重试,无需用户的干预。

可用性优先更新

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

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

跨区域

  • 升级将以分阶段的方式在整个 Azure 中全局推进,以防出现 Azure 范围的部署失败。
  • 一个阶段可以涵盖一个或多个区域,仅当前一阶段中符合条件的 VM 成功升级时,升级才会进入下一阶段。
  • 地理配对的区域不会并发升级,因此它们不能处于同一区域阶段。
  • 升级是否成功是通过跟踪 VM 在升级后的运行状况来衡量的。 VM 运行状况是通过 VM 的平台运行状况指示器跟踪的。 对于虚拟机规模集,将通过应用程序运行状况探测或应用程序运行状况扩展(如果已在规模集中应用)跟踪 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 AdvancedThreatProtection.Windows
Microsoft.Azure.AzureDefenderForSQL VulnerabilityAssessment.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
Microsoft.Azure.Geneva GenevaMonitoring
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 DependencyAgentLinux
Microsoft.Azure.Monitoring.DependencyAgent.EDP DependencyAgentWindows
Microsoft.Azure.Monitoring.DependencyAgent DependencyAgentLinux
Microsoft.Azure.Monitoring.DependencyAgent DependencyAgentWindows
Microsoft.Azure.NetworkWatcher NetworkWatcherAgentLinux
Microsoft.Azure.NetworkWatcher NetworkWatcherAgentWindows
Microsoft.Azure.Networking.DNS DNSClientCache
Microsoft.Azure.SCOMMI GatewayServer
Microsoft.Azure.SCOMMI WindowsAgent
Microsoft.Azure.Security.AntimalwareSignature AntimalwareConfiguration
Microsoft.Azure.Security.Dsms DSMSForWindows
Microsoft.Azure.Security.LinuxAttestation GuestAttestation
Microsoft.Azure.Security.Monitoring AzureSecurityLinuxAgent
Microsoft.Azure.Security.Monitoring AzureSecurityWindowsAgent
Microsoft.Azure.Security.WindowsAttestation GuestAttestation
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 MicrosoftDnsAgent
Microsoft.SqlServer.Management SqlIaaSAgent
Microsoft.SqlServer.Management SqlIaaSAgentLinux

启用自动扩展升级

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

使用 Azure 门户

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

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

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

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

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

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

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

对于虚拟机

若要在 Azure VM 上为扩展(在本示例中为 Dependency Agent 扩展)启用自动扩展升级,请使用以下调用:

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.Monitoring.DependencyAgent",
        "type": "DependencyAgentWindows",
        "typeHandlerVersion": "9.5"
        }
}

对于虚拟机规模集

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.Monitoring.DependencyAgent",
              	    "type": "DependencyAgentWindows",
              	    "typeHandlerVersion": "9.5"
            		}
          	    }
        	    ]
    	    }
    	}
    }
}

注意

这些操作在虚拟机规模集上而不是在基础 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 手动升级到最新的主要版本。

下一步