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

Azure 中 VM 和规模集的自动扩展升级

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

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

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

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

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

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

可用性优先更新

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

对于正在升级的一组虚拟机,Azure 平台将协调升级:

跨区域:

  • 升级将以分阶段的方式在整个 Azure 中全局推进,以防出现 Azure 范围的部署失败。
  • 一个“阶段”可以涵盖一个或多个区域,仅当前一阶段中符合条件的 VM 成功升级时,升级才会进入下一阶段。
  • 地理配对的区域不会并发升级,因此它们不能处于同一区域阶段。
  • 升级是否成功是通过跟踪 VM 在升级后的运行状况来衡量的。 VM 运行状况是通过 VM 的平台运行状况指示器跟踪的。 对于虚拟机规模集,将通过应用程序运行状况探测或应用程序运行状况扩展(如果已在规模集中应用)跟踪 VM 运行状况。

在区域内部:

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

在“集”内部:

  • 公用可用性集或规模集中的所有 VM 不会并发升级。
  • 公用可用性集中的 VM 在更新域边界内升级,跨多个更新域的 VM 不会并发升级。
  • 公用虚拟机规模集中的 VM 将分组成批,并在更新域边界内升级。 升级期间会遵守在规模集上定义的升级策略。 如果升级策略设置为“手动”,即使启用了自动扩展升级,VM 也不会升级。

虚拟机规模集的升级过程

  1. 在开始升级过程之前,业务流程协调程序将确保整个规模集内(出于任何原因)不正常的 VM 不会超过 20%。

  2. 升级业务流程协调程序将识别要升级的一批 VM 实例。 一个升级批最多可以包含 VM 总数的 20%,最小批大小限制为一个虚拟机。 在标识批处理时,会考虑升级策略和可用性区域的定义。

  3. 升级后,在转移到下一批之前,始终会监视 VM 运行状况。 对于配置了应用程序运行状况探测或应用程序运行状况扩展的规模集,还会监视应用程序运行状况。 升级过程最多会等待 5 分钟(或定义的运行状况探测配置)来让 VM 变正常,然后再升级下一批。 如果 VM 在升级后未恢复其正常运行状况,则默认情况下,会在该 VM 上重新安装前一个扩展版本。

  4. 升级业务流程协调程序还会跟踪升级后变为不正常的 VM 百分比。 如果升级过程中超过 20% 的已升级实例变得不正常,升级将会停止。

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

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

支持的扩展

自动扩展升级支持以下扩展(将会定期添加更多扩展):

启用自动扩展升级

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

适用于虚拟机的 REST API

若要在 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"
        }
}

适用于虚拟机规模集的 REST API

使用以下调用将扩展添加到规模集模型:

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

适用于虚拟机的 Azure PowerShell

使用 Set-AzVMExtension cmdlet:

Set-AzVMExtension -ExtensionName "Microsoft.Azure.Monitoring.DependencyAgent" `
    -ResourceGroupName "myResourceGroup" `
    -VMName "myVM" `
    -Publisher "Microsoft.Azure.Monitoring.DependencyAgent" `
    -ExtensionType "DependencyAgentWindows" `
    -TypeHandlerVersion 9.5 `
    -Location WestUS `
    -EnableAutomaticUpgrade $true

适用于虚拟机规模集的 Azure PowerShell

使用 Add-AzVmssExtension cmdlet 将扩展添加到规模集模型:

Add-AzVmssExtension -VirtualMachineScaleSet $vmss
    -Name "Microsoft.Azure.Monitoring.DependencyAgent" `
    -Publisher "Microsoft.Azure.Monitoring.DependencyAgent" `
    -Type "DependencyAgentWindows" `
    -TypeHandlerVersion 9.5 `
    -EnableAutomaticUpgrade $true

添加扩展后,使用 Update-AzVmss 更新规模集。

适用于虚拟机的 Azure CLI

使用 az vm extension set cmdlet:

az vm extension set \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --name DependencyAgentLinux \
    --publisher Microsoft.Azure.Monitoring.DependencyAgent \
    --version 9.5 \
    --enable-auto-upgrade true

适用于虚拟机规模集的 Azure CLI

使用 az vmss extension set cmdlet 将扩展添加到规模集模型:

az vmss extension set \
    --resource-group myResourceGroup \
    --vmss-name myVMSS \
    --name DependencyAgentLinux \
    --publisher Microsoft.Azure.Monitoring.DependencyAgent \
    --version 9.5 \
    --enable-auto-upgrade true

虚拟机的 ARM 模板

以下示例介绍如何使用 Azure 资源管理器在虚拟机上为扩展(此示例中为 Dependency Agent 扩展)设置自动扩展升级

{
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "location": "[resourceGroup().location]",
    "name": "<extensionName>",
    "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
    ],
    "properties": {
        "publisher": "Microsoft.Azure.Monitoring.DependencyAgent",
        "type": "DependencyAgentWindows",
        "typeHandlerVersion": "9.5",
        "autoUpgradeMinorVersion": true,
        "enableAutomaticUpgrade": true,
        "settings": {
            "enableAMA": "true"
        }
    }
}

虚拟机规模集的 ARM 模板

请使用以下示例在规模集模型中为扩展设置自动扩展升级:

{
   "type": "Microsoft.Compute/virtualMachineScaleSets",
   "apiVersion": "2023-09-01",
   "name": "[variables('vmScaleSetName')]",
   "location": "[resourceGroup().location]",
   "properties": {
   	    "virtualMachineProfile": {
            "extensionProfile": {
       	        "extensions": [{
                     "name": "<extensionName>",
                     "properties": {
                          "publisher": "Microsoft.Azure.Monitoring.DependencyAgent",
                          "type": "DependencyAgentWindows",
                          "typeHandlerVersion": "9.5",
                          "autoUpgradeMinorVersion": true,
                          "enableAutomaticUpgrade": true,
                     }
                }]
    	    }
    	}
    }
}

使用 Azure 门户

可以使用 Azure 门户的“扩展”边栏选项卡在现有虚拟机和虚拟机规模集上启用扩展的自动升级。

  1. 导航到虚拟机虚拟机规模集边栏选项卡,然后通过单击资源名称来选择资源。
  2. 导航到“设置”下的“扩展 + 应用程序”边栏选项卡,查看资源上安装的所有扩展。 “自动升级状态”列指示是已启用、禁用还是不支持自动升级扩展。
  3. 单击扩展名,导航到“扩展详细信息”边栏选项卡。 Azure 门户的“扩展”边栏选项卡的屏幕截图。
  4. 单击“启用自动升级”以启用扩展的自动升级。 此按钮还可用于在需要时禁用自动升级。
    Azure 门户的屏幕截图,可在其中启用扩展的自动升级。

对多个扩展进行扩展升级

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

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

当 VM 或虚拟机规模集包含配置了扩展排序的多个扩展时,也可以应用自动扩展升级。 扩展排序适用于 VM 的首次部署,以后对扩展进行的扩展升级将独立应用。

enableAutomaticUpgrade 和 autoUpgradeMinorVersion 之间的差异

  1. AutoUpgradeMinorVersion:

    • 此属性在 VM 创建期间以及在使用新配置升级 VM 时使用。
    • 设置为“true”时,它会确保在虚拟机上自动安装扩展的最新次要版本。
    • 它会使用可用的最新稳定次要版本替代 TypeHandlerVersion。
    • 升级 VM 配置时,如果新的次要版本可用,则它会被视为配置更改,并且扩展会重新安装为最新的次要版本。
    • 这有助于使新创建的 VM 与最新的稳定次要扩展版本保持最新。
    • 如果要手动将扩展设置为特定版本,请将此属性设置为“false”。
  2. EnableAutomaticUpgrade:

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

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

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

后续步骤