如何以编程方式管理已启用 Azure Arc 的服务器的更新

本文指导你完成使用 Azure REST API 在 Azure 中通过 Azure 更新管理器在已启用 Azure Arc 的服务器上触发评估和更新部署的过程。 如果不熟悉 Azure 更新管理器且想要了解详细信息,请参阅更新管理器概述。 若要使用 Azure REST API 管理 Azure 虚拟机,请参阅如何以编程方式使用 Azure 虚拟机

通过 Azure 更新管理器,可以使用 Azure REST API 以编程方式进行访问。 此外,还可在 Azure PowerShellAzure CLI 中使用适当的 REST 命令。

可通过更新管理器虚拟机扩展支持 Azure REST API 管理已启用 Azure Arc 的服务器。

更新评估

若要在已启用 Azure Arc 的服务器上触发更新评估,请指定以下 POST 请求:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.HybridCompute/machines/machineName/assessPatches?api-version=2020-08-15-preview`
{
}

要指定 POST 请求,可使用 Azure CLI az rest 命令。

az rest --method post --url https://management.chinacloudapi.cn/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.HybridCompute/machines/machineName/assessPatches?api-version=2020-08-15-preview --body @body.json

对于 2020-08-15 版,请求正文的格式如下所示:

{
}

更新部署

若要对已启用 Azure Arc 的服务器触发更新部署,请指定以下 POST 请求:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.HybridCompute/machines/machineName/installPatches?api-version=2020-08-15-preview`

请求正文

下表介绍了请求正文的元素:

properties 说明
maximumDuration OS 更新操作可以花费的最长时间,以分钟为单位。 此值必须是符合 ISO 8601 标准的持续时间字符串,例如 PT100M
rebootSetting 如果应重新启动计算机,并且来宾 OS 更新安装需要它才能完成,则在状态中添加标志。 可接受的值:IfRequired, NeverReboot, AlwaysReboot
windowsParameters 运行受支持的 Microsoft Windows Server 操作系统的计算机上的来宾 OS 更新的参数选项。
windowsParameters - classificationsToInclude 要应用的 OS 更新的类别或分类列表,由 Windows Server OS 支持和提供。 可接受的值:Critical, Security, UpdateRollUp, FeaturePack, ServicePack, Definition, Tools, Update
windowsParameters - kbNumbersToInclude 计算机可用且需要安装的 Windows 更新 KB ID 列表。 如果已包含任何“classificationsToInclude”,则会安装类别中可用的 KB。 “kbNumbersToInclude”是一个选项,用于提供除你要安装的 KB 以外的特定 KB ID 列表。 例如:1234
windowsParameters - kbNumbersToExclude 计算机可用且不得安装的 Windows 更新 KB ID 列表。 如果已包含任何“classificationsToInclude”,则将会安装类别中可用的 KB。 “kbNumbersToExclude”是一个选项,用于提供你希望确保不安装的特定 KB ID 列表。 例如:5678
maxPatchPublishDate 它用于安装此给定最晚发布日期或之前发布的补丁。
linuxParameters 当计算机运行受支持的 Linux 发行版时来宾 OS 更新的参数选项
linuxParameters - classificationsToInclude 要应用的 OS 更新的类别或分类列表,由使用的 Linux OS 的包管理器支持并提供。 可接受的值:Critical, Security, Others。 有关详细信息,请参阅 Linux 包管理器和 OS 支持
linuxParameters - packageNameMasksToInclude 可用于计算机且需要安装的 Linux 包列表。 如果已包含任何“classificationsToInclude”,则会安装类别中可用的包。 “packageNameMasksToInclude”是一个选项,用于提供除你要安装的包以外的包列表。 例如:mysql, libc=1.0.1.1, kernel*
linuxParameters - packageNameMasksToExclude 可用于计算机但不应安装的 Linux 包列表。 如果已包含任何“classificationsToInclude”,则会安装类别中可用的包。 “packageNameMasksToExclude”是一个选项,用于提供你希望确保不安装的特定包列表。 例如:mysql, libc=1.0.1.1, kernel*

若要指定 POST 请求,可以结合有效的参数和值使用以下 Azure REST API 调用。

POST on 'subscriptions/subscriptionI/resourceGroups/resourceGroupName/providers/Microsoft.HybridCompute/machines/machineName/installPatches?api-version=2020-08-15-preview

{
        "maximumDuration": "PT120M",
        "rebootSetting": "IfRequired",
        "windowsParameters": {
          "classificationsToInclude": [
            "Security",
            "UpdateRollup",
            "FeaturePack",
            "ServicePack"
          ],
          "kbNumbersToInclude": [
            "11111111111",
            "22222222222222"
          ],
          "kbNumbersToExclude": [
            "333333333333",
            "55555555555"
          ]
        }
  }'

创建维护配置计划

若要创建维护配置计划,请指定以下 PUT 请求:

PUT on `/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Maintenance/maintenanceConfigurations/<maintenanceConfigurationsName>?api-version=2021-09-01-preview`

请求正文

下表介绍了请求正文的元素:

properties 说明
id 资源的完全限定标识符
location 获取或设置资源的位置
name 资源名称
properties.extensionProperties 获取或设置 maintenanceConfiguration 的 extensionProperties
properties.maintenanceScope 获取或设置配置的 maintenanceScope
properties.maintenanceWindow.duration 维护时段的持续时间,采用 HH:mm 格式。 如果未提供,则将根据提供的维护范围使用默认值。 示例:05:00。
properties.maintenanceWindow.expirationDateTime 维护时段的失效日期,采用 YYYY-MM-DD hh:MM 格式。 在时区中创建时间范围,并提供此时区的相应夏令时时间范围。 必须将到期日期设置为将来的日期。 如果未提供,它将设置为最大日期/时间 9999-12-31 23:59:59。
properties.maintenanceWindow.recurEvery 维护时段预计重现的频率。 该频率可以表示为每日、每周或每月计划。 可以将每日日程安排的格式设置为 recurEvery: [整数频率]['天数']。 如果未提供任何频率,则默认频率为 1。 每日计划示例为 recurEvery: Day, recurEvery: 3Days。 每周计划的格式为 recurEvery: [整数形式的频率]['周数'] [逗号分隔的可选周一至周日星期名称列表]。 每周日程安排示例为 recurEvery: 3Weeks, recurEvery: Week Saturday, Sunday。 可以将每月日程安排的格式设置为 [整数频率]['月份数'] [当月第几天的逗号分隔列表] 或 [整数频率]['月份数'] [当月第几周(第一周, 第二周, 第三周, 第四周, 最后一周)] [星期一至星期日]。 每月日程安排示例为 recurEvery: Month, recurEvery: 2Months, recurEvery: Month day23, day24, recurEvery: Month Last Sunday, recurEvery: Month Fourth Monday。
properties.maintenanceWindow.startDateTime YYYY-MM-DD hh:mm 格式的维护时段的生效开始日期。 可以将开始日期设置为当前日期或将来日期。 该时段将以提供的时区创建,并根据该时区调整为夏令时。
properties.maintenanceWindow.timeZone 时区的名称。 可以通过在 PowerShell 中执行 [System.TimeZoneInfo]:GetSystemTimeZones() 来获取时区列表。 示例:太平洋标准时间、UTC、西欧标准时间、韩国标准时间、 澳大利亚中部标准时间。
properties.namespace 获取或设置资源的命名空间
properties.visibility 获取或设置配置的可见性。 默认值为“Custom”
systemData 包含 createdBy 和 modifiedBy 信息的 Azure 资源管理器元数据。
tags 获取或设置资源的标记
type 资源的类型

若要指定 POST 请求,可以结合有效的参数和值使用以下 Azure REST API 调用。

PUT on '/subscriptions/0f55bb56-6089-4c7e-9306-41fb78fc5844/resourceGroups/atscalepatching/providers/Microsoft.Maintenance/maintenanceConfigurations/TestAzureInGuestAdv2?api-version=2021-09-01-preview

{
  "location": "eastus2euap",
  "properties": {
    "namespace": null,
    "extensionProperties": {
      "InGuestPatchMode" : "User"
    },
    "maintenanceScope": "InGuestPatch",
    "maintenanceWindow": {
      "startDateTime": "2021-08-21 01:18",
      "expirationDateTime": "2221-05-19 03:30",
      "duration": "01:30",
      "timeZone": "India Standard Time",
      "recurEvery": "Day"
    },
    "visibility": "Custom",
    "installPatches": {
      "rebootSetting": "IfRequired",
      "windowsParameters": {
        "classificationsToInclude": [
          "Security",
          "Critical",
          "UpdateRollup"
        ]
      },
      "linuxParameters": {
        "classificationsToInclude": [
          "Other"
        ]
      }
    }
  }
}'

将 VM 与计划相关联

若要将 VM 与维护配置计划相关联,请指定以下 PUT 请求:

PUT on `<ARC or Azure VM resourceId>/providers/Microsoft.Maintenance/configurationAssignments/<configurationAssignment name>?api-version=2021-09-01-preview`

若要指定 PUT 请求,可以结合有效的参数和值使用以下 Azure REST API 调用。

PUT on '/subscriptions/0f55bb56-6089-4c7e-9306-41fb78fc5844/resourceGroups/atscalepatching/providers/Microsoft.Compute/virtualMachines/win-atscalepatching-1/providers/Microsoft.Maintenance/configurationAssignments/TestAzureInGuestAdv?api-version=2021-09-01-preview

{
  "properties": {
    "maintenanceConfigurationId": "/subscriptions/0f55bb56-6089-4c7e-9306-41fb78fc5844/resourcegroups/atscalepatching/providers/Microsoft.Maintenance/maintenanceConfigurations/TestAzureInGuestIntermediate2"
  },
  "location": "eastus2euap"
}'

从日程安排中删除计算机

若要从日程安排中移除计算机,请获取已创建的计算机的所有配置分配名称,以便将计算机与 Azure Resource Graph 中的当前日程安排相关联,如下所示:

maintenanceresources
| where type =~ "microsoft.maintenance/configurationassignments"
| where properties.maintenanceConfigurationId =~ "<maintenance configuration Resource ID>"
| where properties.resourceId =~ "<Machine Resource Id>"
| project name, id

从上面获取名称后,按照 DELETE 请求删除配置分配 -

DELETE on `<ARC or Azure VM resourceId>/providers/Microsoft.Maintenance/configurationAssignments/<configurationAssignment name>?api-version=2021-09-01-preview`

后续步骤

  • 要查看更新管理器生成的更新评估和部署日志,请参阅查询日志
  • 若要排查问题,请参阅故障排除更新管理器。