使用維護設定和 Azure CLI 來控制更新

適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集

您可以使用維護設定功能來控制何時將平臺更新套用至各種 Azure 資源。 本文涵蓋使用這項功能的 Azure CLI 選項。 如需使用維護組態的優點、其限制和其他管理選項的詳細資訊,請參閱 使用維護設定管理平臺更新。

重要

特定 範圍 支援特定電腦類型和排程。 請務必為您的虛擬機 (VM) 選取正確的範圍。

建立維護設定

建立維護設定的第一個步驟是建立資源群組作為組態的容器。 此範例會在eastus建立名為 myMaintenanceRG 的資源群組。 若已有要使用的資源群組,則可跳過此部分,且在其餘範例中以您自己的資源群組名稱來取代。

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

建立資源群組之後,請使用 az maintenance configuration create 來建立維護設定。

Host

此範例會建立名為 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"3Days"的值"Day"
  • 每周maintenance-window-recur-every"Week Saturday,Sunday"的值"3Weeks"
  • 每月:maintenance-window-recur-every"Month day23,day24""Month Last Sunday" 的值Month Fourth Monday

虛擬機器擴展集

此範例會建立名為 myConfig 的維護組態,其中虛擬機擴展集的 OS 映射範圍為 5 小時,每個月第四個星期一的排程時間範圍為 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 小時。 深入瞭解客體 VM 上的維護設定。

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

使用組態的標識碼,將設定套用至隔離的主機 VM。 指定 --resource-type virtualMachines。 提供的 VM --resource-name名稱、VM 的資源群組 --resource-group,以及的 --locationVM 位置。

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 參數是主機的識別碼。 您可以使用 az-vm-host-get-instance-view 來取得專用主機的識別碼。

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 的訂用帳戶標識碼。

如果沒有更新,命令會傳回包含文字 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} \
   --resourcegroup myMaintenanceRg \
   --resource-name myVM \
   --resource-type virtualMachines \
   --provider-name Microsoft.Compute \
   --output table

專用主機

檢查專用主機是否有擱置中更新。 在此範例中,輸出會格式化為資料表以供讀取。 以您自己的資源取代資源的值。

az maintenance update list \
   --subscription {subscription ID} \
   --resourcegroup 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 中虛擬機的維護。