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

使用维护配置和 Azure CLI 来控制更新

适用于:✔️ Linux VM ✔️ Windows VM ✔️ 灵活规模集 ✔️ 统一规模集

可以使用维护配置功能来控制何时将平台更新应用到各种 Azure 资源。 本文介绍了用于使用此功能的 Azure CLI 选项。 若要详细了解使用维护配置的好处、该功能的限制以及其他管理选项,请参阅使用维护配置管理平台更新

重要

特定的范围支持特定的机器类型和计划。 请务必为虚拟机 (VM) 选择正确的范围。

创建维护配置

创建维护配置的第一步是创建一个资源组作为你的配置的容器。 此示例在 eastus 中创建一个名为 myMaintenanceRG 的资源组。 如果你已有一个可供使用的资源组,则可跳过此部分,并在其余示例中将资源组名称替换为你自己的名称。

az group create \
   --location eastus \
   --name myMaintenanceRG

创建该资源组后,使用 az maintenance configuration create 创建维护配置。

主机

此示例创建一个名为 myConfig 的维护配置,该配置的作用域为主机,其计划时段为每月第四个星期一的 5 个小时

az maintenance configuration create \
   --resource-group myMaintenanceRG \
   --resource-name myConfig \
   --maintenance-scope host \
   --location eastus \
   --maintenance-window-duration "05:00" \
   --maintenance-window-recur-every "Month Fourth Monday" \
   --maintenance-window-start-date-time "2020-12-30 08:00" \
   --maintenance-window-time-zone "Pacific Standard Time" 

使用 --maintenance-scope host 可确保使用维护配置来控制对主机基础结构的更新。 如果尝试创建同名但位于不同位置的配置,则会收到错误。 配置名称对于资源组必须是唯一的。

若要检查是否已成功创建了维护配置,可以使用 az maintenance configuration list 来查询可用的维护配置:

az maintenance configuration list 
   --query "[].{Name:name, ID:id}" 
   --output table 

可以将维护重复周期表示为每日、每周或每月。 以下是一些示例:

  • 每日maintenance-window-recur-every 值为 "Day""3Days"
  • 每周maintenance-window-recur-every 值为 "3Weeks""Week Saturday,Sunday"
  • 每月maintenance-window-recur-every 值为 "Month day23,day24""Month Last Sunday"Month Fourth Monday

虚拟机规模集

此示例创建一个名为 myConfig 的维护配置,该配置的作用域为虚拟机规模集的操作系统映像,其计划时段为每月第四个星期一的 5 个小时:

az maintenance configuration create \
   --resource-group myMaintenanceRG \
   --resource-name myConfig \
   --maintenance-scope osimage \
   --location eastus \
   --maintenance-window-duration "05:00" \
   --maintenance-window-recur-every "Month Fourth Monday" \
   --maintenance-window-start-date-time "2020-12-30 08:00" \
   --maintenance-window-time-zone "Pacific Standard Time" 

来宾 VM

此示例创建一个名为 myConfig 的维护配置,该配置的作用域为来宾计算机(VM 和已启用 Azure Arc 的服务器),其计划时段为每 20 天 2 个小时。 详细了解来宾虚拟机的维护配置

az maintenance configuration create \
   --resource-group myMaintenanceRG \
   --resource-name myConfig \
   --maintenance-scope InGuestPatch \
   --location eastus \
   --maintenance-window-duration "02:00" \
   --maintenance-window-recur-every "20days" \
   --maintenance-window-start-date-time "2022-12-30 07:00" \
   --maintenance-window-time-zone "Pacific Standard Time" \
   --install-patches-linux-parameters package-name-masks-to-exclude="ppt" package-name-masks-to-include="apt" classifications-to-include="Other" \
   --install-patches-windows-parameters kb-numbers-to-exclude="KB123456" kb-numbers-to-include="KB123456" classifications-to-include="FeaturePack" \
   --reboot-setting "IfRequired" \
   --extension-properties InGuestPatchMode="User"

分配配置

使用 az maintenance assignment create 将配置分配给你的计算机。

隔离的 VM

使用此配置的 ID 将配置应用于独立主机 VM。 指定 --resource-type virtualMachines。 为 --resource-name 提供 VM 的名称,为 --resource-group 提供 VM 的资源组,为 --location 提供 VM 的位置。

az maintenance assignment create \
   --resource-group myMaintenanceRG \
   --location eastus \
   --resource-name myVM \
   --resource-type virtualMachines \
   --provider-name Microsoft.Compute \
   --configuration-assignment-name myConfig \
   --maintenance-configuration-id "/subscriptions/{subscription ID}/resourcegroups/myMaintenanceRG/providers/Microsoft.Maintenance/maintenanceConfigurations/myConfig"

专用主机

若要将配置应用到专用主机,需要包含 --resource-type hosts、带主机组名称的 --resource-parent-name,以及 --resource-parent-type hostGroups

参数 --resource-id 是主机的 ID。 可以使用 az-vm-host-get-instance-view 获取专用主机的 ID。

az maintenance assignment create \
   --resource-group myDHResourceGroup \
   --resource-name myHost \
   --resource-type hosts \
   --provider-name Microsoft.Compute \
   --configuration-assignment-name myConfig \
   --maintenance-configuration-id "/subscriptions/{subscription ID}/resourcegroups/myDhResourceGroup/providers/Microsoft.Maintenance/maintenanceConfigurations/myConfig" \
   --location eastus \
   --resource-parent-name myHostGroup \
   --resource-parent-type hostGroups 

虚拟机规模集

az maintenance assignment create \
   --resource-group myMaintenanceRG \
   --location eastus \
   --resource-name myVMSS \
   --resource-type virtualMachineScaleSets \
   --provider-name Microsoft.Compute \
   --configuration-assignment-name myConfig \
   --maintenance-configuration-id "/subscriptions/{subscription ID}/resourcegroups/myMaintenanceRG/providers/Microsoft.Maintenance/maintenanceConfigurations/myConfig"

来宾 VM

az maintenance assignment create \
   --resource-group myMaintenanceRG \
   --location eastus \
   --resource-name myVM \
   --resource-type virtualMachines \
   --provider-name Microsoft.Compute \
   --configuration-assignment-name myConfig \
   --maintenance-configuration-id "/subscriptions/{subscription ID}/resourcegroups/myMaintenanceRG/providers/Microsoft.Maintenance/maintenanceConfigurations/myConfig"

检查配置

可以验证是否正确应用了配置,或者使用 az maintenance assignment list 来检查当前应用了哪种配置。

隔离的 VM

az maintenance assignment list \
   --provider-name Microsoft.Compute \
   --resource-group myMaintenanceRG \
   --resource-name myVM \
   --resource-type virtualMachines \
   --query "[].{resource:resourceGroup, configName:name}" \
   --output table

专用主机

az maintenance assignment list \
   --resource-group myDHResourceGroup \
   --resource-name myHost \
   --resource-type hosts \
   --provider-name Microsoft.Compute \
   --resource-parent-name myHostGroup \
   --resource-parent-type hostGroups \
   --query "[].{ResourceGroup:resourceGroup,configName:name}" \
   --output table

虚拟机规模集

az maintenance assignment list \
   --provider-name Microsoft.Compute \
   --resource-group myMaintenanceRG \
   --resource-name myVMSS \
   --resource-type virtualMachines \
   --query "[].{resource:resourceGroup, configName:name}" \
   --output table

来宾 VM

az maintenance assignment list \
   --provider-name Microsoft.Compute \
   --resource-group myMaintenanceRG \
   --resource-name myVM \
   --resource-type virtualMachines \
   --query "[].{resource:resourceGroup, configName:name}" \
   --output table

检查挂起的更新

使用 az maintenance update list 查看是否存在挂起的更新。 将 --subscription 更新为包含 VM 的订阅的 ID。

如果没有更新,该命令会返回一条错误消息,其中包含文本:Resource not found...StatusCode: 404

如果存在更新,即使多个更新处于待执行状态,该命令也仅返回一个更新。 此更新的数据在对象中返回:

[
  {
    "impactDurationInSec": 9,
    "impactType": "Freeze",
    "maintenanceScope": "Host",
    "notBefore": "2020-03-03T07:23:04.905538+00:00",
    "resourceId": "/subscriptions/9120c5ff-e78e-4bd0-b29f-75c19cadd078/resourcegroups/DemoRG/providers/Microsoft.Compute/hostGroups/demoHostGroup/hosts/myHost",
    "status": "Pending"
  }
]

隔离的 VM

检查隔离的 VM 的挂起更新。 在此示例中,输出的格式为表格,方便你阅读:

az maintenance update list \
   --subscription {subscription ID} \
   --resource-group myMaintenanceRg \
   --resource-name myVM \
   --resource-type virtualMachines \
   --provider-name Microsoft.Compute \
   --output table

专用主机

检查专用主机的挂起更新。 在此示例中,输出的格式为表格,方便你阅读。 将资源的值替换为你自己的值。

az maintenance update list \
   --subscription {subscription ID} \
   --resource-group myHostResourceGroup \
   --resource-name myHost \
   --resource-type hosts \
   --provider-name Microsoft.Compute \
   --resource-parentname myHostGroup \
   --resource-parent-type hostGroups \
   --output table

应用更新

使用 az maintenance apply update 来应用挂起的更新。 成功后,此命令返回包含更新详细信息的 JSON。 应用更新调用可能需要长达 2 小时才能完成。

隔离的 VM

创建向独立 VM 应用更新的请求:

az maintenance applyupdate create \
   --subscription {subscriptionID} \
   --resource-group myMaintenanceRG \
   --resource-name myVM \
   --resource-type virtualMachines \
   --provider-name Microsoft.Compute

专用主机

将更新应用到专用主机:

az maintenance applyupdate create \
   --subscription {subscriptionID} \
   --resource-group myHostResourceGroup \
   --resource-name myHost \
   --resource-type hosts \
   --provider-name Microsoft.Compute \
   --resource-parent-name myHostGroup \
   --resource-parent-type hostGroups

虚拟机规模集

将更新应用于规模集:

az maintenance applyupdate create \
   --subscription {subscriptionID} \
   --resource-group myMaintenanceRG \
   --resource-name myVMSS \
   --resource-type virtualMachineScaleSets \
   --provider-name Microsoft.Compute

检查应用更新的状态

可以使用 az maintenance applyupdate get 检查更新进度。

若要查看上次更新的结果,请使用 default 作为更新名称。 或者将 myUpdateName 替换为运行 az maintenance applyupdate create 时返回的更新的名称。

Status         : Completed
ResourceId     : /subscriptions/12ae7457-4a34-465c-94c1-17c058c2bd25/resourcegroups/TestShantS/providers/Microsoft.Comp
ute/virtualMachines/DXT-test-04-iso
LastUpdateTime : 1/1/2020 12:00:00 AM
Id             : /subscriptions/12ae7457-4a34-465c-94c1-17c058c2bd25/resourcegroups/TestShantS/providers/Microsoft.Comp
ute/virtualMachines/DXT-test-04-iso/providers/Microsoft.Maintenance/applyUpdates/default
Name           : default
Type           : Microsoft.Maintenance/applyUpdates

LastUpdateTime 是更新完成的时间,不管是你发起的更新,还是平台因为你没有使用自行维护时段而发起的更新。 如果从未通过维护配置应用更新,则 LastUpdateTime 会显示默认值。

隔离的 VM

az maintenance applyupdate get \
   --subscription {subscriptionID} \ 
   --resource-group myMaintenanceRG \
   --resource-name myVM \
   --resource-type virtualMachines \
   --provider-name Microsoft.Compute \
   --apply-update-name myUpdateName \
   --query "{LastUpdate:lastUpdateTime, Name:name, ResourceGroup:resourceGroup, Status:status}" \
   --output table

专用主机

az maintenance applyupdate get \
   --subscription {subscriptionID} \ 
   --resource-group myMaintenanceRG \
   --resource-name myHost \
   --resource-type hosts \
   --provider-name Microsoft.Compute \
   --resource-parent-name myHostGroup \ 
   --resource-parent-type hostGroups \
   --apply-update-name myUpdateName \
   --query "{LastUpdate:lastUpdateTime, Name:name, ResourceGroup:resourceGroup, Status:status}" \
   --output table

虚拟机规模集

az maintenance applyupdate get \
   --subscription {subscriptionID} \ 
   --resource-group myMaintenanceRG \
   --resource-name myVMSS \
   --resource-type virtualMachineScaleSets \
   --provider-name Microsoft.Compute \
   --apply-update-name myUpdateName \
   --query "{LastUpdate:lastUpdateTime, Name:name, ResourceGroup:resourceGroup, Status:status}" \
   --output table

删除维护配置

若要删除维护配置,请使用 az maintenance configuration delete。 删除配置时,会从关联的资源中删除维护控制。

az maintenance configuration delete \
   --subscription 1111abcd-1a11-1a2b-1a12-123456789abc \
   -resource-group myResourceGroup \
   --resource-name myConfig

后续步骤

若要了解详细信息,请参阅 Azure 中虚拟机的维护