共用方式為


教學課程:使用 PowerShell 修改虛擬機器擴展集

在應用程式的整個生命週期中,您可能需要修改或更新您的虛擬機器擴展集。 這些更新可能包括如何更新擴展集的組態,或者變更應用程式組態。 本文說明如何使用 PowerShell 修改現有的擴展集。

更新擴展集模型

擴展集具有「擴展集模型」,可擷取擴展集整體的「預期」狀態。 若要查詢擴展集的模型,您可以使用 Get-AzVmss

Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet

確切的輸出呈現內容取決於您提供給命令的選項。 下列範例會示範 PowerShell 的扼要範例輸出:

Sku                                         : 
  Name                                      : Standard_DS1_v2
  Tier                                      : Standard
  Capacity                                  : 2
ProvisioningState                           : Succeeded
SinglePlacementGroup                        : False
Id                                          : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet
Name                                        : myScaleSet
Type                                        : Microsoft.Compute/virtualMachineScaleSets
Location                                    : eastus
VirtualMachineProfile                       : 
    ComputerNamePrefix                      : myScaleSe
      ProvisionVMAgent                      : True
      EnableAutomaticUpdates                : True
        PatchMode                           : AutomaticByOS
        AssessmentMode                      : ImageDefault
      EnableVMAgentPlatformUpdates          : False
    AllowExtensionOperations                : True
  StorageProfile                            : 
      Publisher                             : MicrosoftWindowsServer
      Offer                                 : WindowsServer
      Sku                                   : 2016-Datacenter
      Version                               : latest
    OsDisk                                  : 
      Caching                               : None
      CreateOption                          : FromImage
      DiskSizeGB                            : 127
      OsType                                : Windows
        StorageAccountType                  : Premium_LRS
      DeleteOption                          : Delete
  NetworkProfile                            : 
    NetworkInterfaceConfigurations[0]       : 
      Name                                  : myScaleSet
      Primary                               : True
      DisableTcpStateTracking               : False
        Name                                : myScaleSet
        Subnet                              : 
          Id                                : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSet/subnets/myScaleSet
        PrivateIPAddressVersion             : IPv4
        LoadBalancerBackendAddressPools[0]  : 
/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSet/backendAddressPools/myScaleSet
      EnableIPForwarding                    : False
      DeleteOption                          : Delete
    NetworkApiVersion                       : 2020-11-01
OrchestrationMode                           : Flexible
TimeCreated                                 : 12/2/2022 5:41:21 PM

您也可使用 Update-AzVmss 來更新擴展集的各種屬性。 例如,更新您的授權類型。

$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -LicenseType Windows_Server

更新擴展集中的個別 VM 執行個體

就像擴展集有模型檢視一樣,擴展集內的每個 VM 執行個體也有自己的模型檢視。 若要查詢擴展集中特定 VM 執行個體的模型檢視,您可以使用 Get-AzVM

Get-AzVM -ResourceGroupName myResourceGroup -name MyScaleSet_Instance1
ResourceGroupName      : myResourceGroup
Id                     : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1
Name                   : myScaleSet_Instance1
Type                   : Microsoft.Compute/virtualMachines
Location               : eastus
Extensions             : {MicrosoftMonitoringAgent}
HardwareProfile        : {VmSize}
NetworkProfile         : {NetworkInterfaces}
OSProfile              : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState      : Succeeded
StorageProfile         : {ImageReference, OsDisk, DataDisks}
VirtualMachineScaleSet : {Id}
TimeCreated            : 12/2/2022 5:41:23 PM

您也可以新增 -Status 旗標來取得執行個體檢視,其提供 VM 的詳細資料。

Get-AzVM -ResourceGroupName myResourceGroup -name MyScaleSet_Instance1 -Status                                    
ResourceGroupName       : myResourceGroup
Name                    : MyScaleSet_Instance1
OsName                  : Windows Server 2016 Datacenter
OsVersion               : 10.0.14393.5501
HyperVGeneration        : V1
Disks[0]                : 
  Name                  : myScaleSet_Instance1_disk1_cab60acccff7414b81d60572eeecb9e3
  Statuses[0]           : 
    Code                : ProvisioningState/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Time                : 12/2/2022 5:41:25 PM
Disks[1]                : 
  Name                  : disk1
  Statuses[0]           : 
    Code                : ProvisioningState/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Time                : 12/2/2022 6:33:36 PM
Extensions[0]           : 
  Name                  : MicrosoftMonitoringAgent
  Type                  : Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent
  TypeHandlerVersion    : 1.0.18067.0
  Statuses[0]           : 
    Code                : ProvisioningState/succeeded
    Level               : Info
    DisplayStatus       : Provisioning succeeded
    Message             : Latest configuration has been applied to the Microsoft Monitoring Agent.
VMAgent                 : 
  VmAgentVersion        : 2.7.41491.1071
  ExtensionHandlers[0]  : 
    Type                : Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent
    TypeHandlerVersion  : 1.0.18067.0
    Status              : 
      Code              : ProvisioningState/succeeded
      Level             : Info
      DisplayStatus     : Ready
      Message           : This virtual machine has successfully connected to Azure Log Analytics.
  Statuses[0]           : 
    Code                : ProvisioningState/succeeded
    Level               : Info
    DisplayStatus       : Ready
    Message             : GuestAgent is running and processing the extensions.
    Time                : 12/2/2022 6:34:55 PM
Statuses[0]             : 
  Code                  : ProvisioningState/succeeded
  Level                 : Info
  DisplayStatus         : Provisioning succeeded
  Time                  : 12/2/2022 6:33:42 PM
Statuses[1]             : 
  Code                  : PowerState/running
  Level                 : Info
  DisplayStatus         : VM running

這些屬性會描述擴展集內 VM 執行個體的設定,而非整個擴展集的設定。

您可以像對獨立虛擬機器一樣,對擴展集中的個別虛擬機器執行個體執行更新。 例如,將新的資料磁碟連結至執行個體 1:

$VirtualMachine = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myScaleSet_Instance1".
Add-AzVMDataDisk -VM $VirtualMachine -Name "disk1" -LUN 0 -Caching ReadOnly -DiskSizeinGB 128 -CreateOption Empty
Update-AzVM -ResourceGroupName "myResourceGroup" -VM $VirtualMachine

將執行個體新增至擴展集

有時候您可能會想要將新的 VM 新增至擴展集,但又想要不同於擴展集模型中所列的組態選項。 建立虛擬機器時,可以使用 Get-AzVmss 命令並指定要新增執行個體的擴展集名稱,將虛擬機器新增至擴展集。

New-AzVM -Name myNewInstance -ResourceGroupName myResourceGroup -image Ubuntu2204 -VmssId /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet
ResourceGroupName        : myResourceGroup                                                                              
Id                       : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance
Name                     : myNewInstance                                                                                
Type                     : Microsoft.Compute/virtualMachines                                                            
Location                 : eastus                                                                                       
Tags                     : {}                                                                                           
HardwareProfile          : {VmSize}                                                                                     
NetworkProfile           : {NetworkInterfaces}                                                                          
OSProfile                : {ComputerName, AdminUsername, LinuxConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState        : Succeeded                                                                                    
StorageProfile           : {ImageReference, OsDisk, DataDisks}                                                          
FullyQualifiedDomainName : mynewinstance-21bc01.eastus.cloudapp.azure.com                                               
VirtualMachineScaleSet   : {Id}                                                                                         
TimeCreated              : 12/2/2022 6:40:20 PM   

藉由再次執行 Get-AzVM,我們可看到已建立新執行個體並新增至現有的擴展集。

Get-AzVm -ResourceGroupName myResourceGroup 
ResourceGroupName   Name                   Location   VmSize            OsType     NIC                  ProvisioningState 
-----------------   ----                   --------   ------            ------     ---                  ----------------- 
myResourceGroup     myNewInstance          eastus     Standard_D2s_v3   Linux      myNewInstance         Succeeded     
myResourceGroup     myScaleSet_Instance1   eastus     Standard_DS1_v2   Windows    myScaleSet-a9f1d54c   Succeeded     
myResourceGroup     myScaleSet_Instance2   eastus     Standard_DS1_v2   Windows    myScaleSet-4dc708e5   Succeeded   

使用最新的擴展集模型將 VM 更新至最新狀態

注意

使用彈性協調流程模式的虛擬機器擴展集目前不支援升級模式。

擴展集具有「升級原則」,可決定藉由最新擴展集模型將 VM 更新至最新狀態的方式。 升級原則的三個模式為:

  • 自動 - 在此模式下,擴展集不保證虛擬機器的關閉順序。 擴展集可能同時關閉所有 VM。
  • 輪流 - 在此模式下,擴展集會分批進行更新,批次之間會有選擇性的暫停時間。
  • 手動 - 在此模式下,當您更新擴展集模型時,除非觸發手動更新,否則現有的虛擬機器將不受影響。

如果您的擴展集設定為手動升級,您可使用 Update-AzVmss 觸發手動升級。

$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet

注意

Service Fabric 叢集只能使用「自動」模式,但處理更新的方式不同。 如需詳細資訊,請參閱 Service Fabric 應用程式升級

重新安裝擴展集的映像

虛擬機器擴展集將會為擴展集中的每個 VM 產生唯一的名稱。 命名慣例會因協調流程模式而有所不同:

  • 彈性協調流程模式: {scale-set-name}_{8-char-guid}
  • 統一協調流程模式:{scale-set-name}_{instance-id}

在您需要重新安裝特定執行個體映像的情況下,請使用 Set-AzVmss 並指定執行個體名稱。

Set-AzVmssVM -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet -InstanceId myScaleSet_Instance1 -Reimage

若要重新安裝擴展集中所有執行個體的映像,只需指定擴展集名稱並省略任何 instanceID。

Set-AzVmssVM -Reimage -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet

更新擴展集的 OS 映像

您可能有執行舊版 Ubuntu LTS 18.04 的擴展集。 您想要更新為較新版本的 Ubuntu LTS 16.04 (例如,版本 18.04.202210180)。 映像參考版本屬性不是清單的一部分,因此您可使用 Update-AzVmss 直接修改這些屬性。

$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet      
  
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -ImageReferenceVersion virtualMachineProfile.storageProfile.imageReference.version=18.04.202210180

或者,您可能想要變更擴展集使用的映像。 例如,您可能要更新或變更擴展集使用的自訂映像。 您可以藉由更新映像參考識別碼屬性,來變更擴展集使用的映像。 映像參考識別碼屬性不是清單的一部分,因此您可以使用 Update-AzVmss 直接修改此屬性。

$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet     
   
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -ImageReferenceVersion virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage

如果您使用 Azure 平台映像,您可以修改 imageReference (如需詳細資訊,請參閱 REST API 文件) 來更新映像。

注意

使用平台映像時,通常會指定 "latest" 作為映像參考版本。 當您建立、擴增及重新安裝映像時,會使用最新可用版本來建立虛擬機器。 不過,這並不意謂著作業系統映像會隨著時間在新映像版本發行時自動更新。 獨立功能可提供自動作業系統升級。 如需詳細資訊,請參閱 自動作業系統升級文件

如果您使用自訂映像,您可以更新 imageReference 識別碼 (如需詳細資訊,請參閱 REST API 文件) 來更新映像。

下一步

在本教學課程中,您已了解如何使用 PowerShell 來修改擴展集和個別執行個體的各個層面。

  • 更新擴展集模型
  • 更新擴展集中的個別 VM 執行個體
  • 將執行個體新增至擴展集
  • 使用最新的擴展集模型將 VM 更新至最新狀態
  • 重新安裝擴展集的映像
  • 更新擴展集的 OS 映像