Esercitazione: Modificare un set di scalabilità di macchine virtuali con PowerShell

Durante tutto il ciclo di vita delle applicazioni, potrebbe essere necessario modificare o aggiornare il set di scalabilità di macchine virtuali. Questi aggiornamenti possono includere come aggiornare la configurazione del set di scalabilità o modificare la configurazione dell'applicazione. Questo articolo descrive come modificare un set di scalabilità esistente usando PowerShell.

Aggiornare il modello del set di scalabilità

Un set di scalabilità ha un "modello" che acquisisce lo stato desiderato del set di scalabilità nel suo insieme. Per eseguire query sul modello per un set di scalabilità, è possibile usare Get-AzVmss.

Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet

La presentazione esatta dell'output dipende dalle opzioni fornite al comando. L'esempio seguente mostra l'output di esempio condensato di 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

È anche possibile usare Update-AzVmss per aggiornare varie proprietà del set di scalabilità. Ad esempio, l'aggiornamento del tipo di licenza.

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

Aggiornamento di singole istanze di vm in un set di scalabilità

Come un set di scalabilità ha una visualizzazione modello, così anche ogni istanza di macchina virtuale nel set di scalabilità ha una propria visualizzazione modello. Per eseguire una query sulla vista del modello per una determinata istanza di macchina virtuale in un set di scalabilità, è possibile usare 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

È anche possibile aggiungere il -Status flag per ottenere la visualizzazione istanza, che fornisce altri dettagli sulla macchina virtuale.

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

Queste proprietà descrivono la configurazione di un'istanza della macchina virtuale all'interno di un set di scalabilità e non quella del set di scalabilità nel suo insieme.

È possibile eseguire aggiornamenti a singole istanze di macchina virtuale in un set di scalabilità esattamente come si farebbe con una macchina virtuale autonoma. Ad esempio, il collegamento di un nuovo disco dati all'istanza 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

Aggiungere un'istanza al set di scalabilità

In alcuni casi potrebbe essere necessario aggiungere una nuova macchina virtuale al set di scalabilità, ma si desiderano opzioni di configurazione diverse rispetto a quelle elencate nel modello del set di scalabilità. Le macchine virtuali possono essere aggiunte a un set di scalabilità durante la creazione usando il comando Get-AzVmss e specificando il nome del set di scalabilità a cui si vuole aggiungere l'istanza.

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   

Eseguendo nuovamente Get-AzVM , è possibile vedere che la nuova istanza è stata creata e aggiunta al set di scalabilità esistente.

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   

Aggiornare le macchine virtuali con il modello del set di scalabilità più recente

Nota

Le modalità di aggiornamento non sono attualmente supportate in set di scalabilità di macchine virtuali tramite la modalità di orchestrazione flessibile.

I set di scalabilità hanno un "criterio di aggiornamento" che determina il modo in cui le macchine virtuali vengono aggiornate con l'ultima versione del modello del set di scalabilità. Le tre modalità del criterio di aggiornamento sono:

  • Automatico: in questa modalità il set di scalabilità non offre alcuna garanzia sull'ordine in cui le macchine virtuali vengono arrestate. Potrebbe arrestarle tutte contemporaneamente.
  • In sequenza: in questa modalità il set di scalabilità implementa l'aggiornamento in batch con una pausa facoltativa fra i singoli batch.
  • Manuale : in questa modalità, quando si aggiorna il modello del set di scalabilità, non accade nulla alle macchine virtuali esistenti fino a quando non viene attivato un aggiornamento manuale.

Se il set di scalabilità è impostato su aggiornamenti manuali, è possibile attivare un aggiornamento manuale usando Update-AzVmss.

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

Nota

I cluster di Service Fabric possono usare solo la modalità automatica , ma l'aggiornamento viene gestito in modo diverso. Per altre informazioni, vedere Aggiornamenti delle applicazioni di Service Fabric.

Ricreazione dell'immagine di un set di scalabilità

set di scalabilità di macchine virtuali genererà un nome univoco per ogni macchina virtuale nel set di scalabilità. La convenzione di denominazione è diversa dalla modalità di orchestrazione:

  • Modalità di orchestrazione flessibile: {scale-set-name}_{8-char-guid}
  • Modalità di orchestrazione uniforme: {scale-set-name}_{instance-id}

Nei casi in cui è necessario creare un'immagine di un'istanza specifica, usare Set-AzVmss e specificare il nome dell'istanza.

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

Per ricreare l'immagine di tutte le istanze in un set di scalabilità, è sufficiente specificare il nome del set di scalabilità e omettere eventuali ID istanza.

Set-AzVmssVM -Reimage -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet

Aggiornare l'immagine del sistema operativo per il set di scalabilità

Potrebbe essere disponibile un set di scalabilità che esegue una versione precedente di Ubuntu LTS 18.04. Si vuole eseguire l'aggiornamento a una versione più recente di Ubuntu LTS 16.04, ad esempio la versione 18.04.202210180. La proprietà della versione di riferimento dell'immagine non fa parte di un elenco, quindi è possibile modificare direttamente queste proprietà usando 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

In alternativa è possibile modificare l'immagine usata dal set di scalabilità. Ad esempio è possibile aggiornare o modificare un'immagine personalizzata usata dal set di scalabilità. È possibile modificare l'immagine usata dal set di scalabilità aggiornando la proprietà dell'ID di riferimento all'immagine. La proprietà ID riferimento immagine non fa parte di un elenco, quindi è possibile modificare direttamente questa proprietà usando 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

Se si usano immagini della piattaforma di Azure, è possibile aggiornare l'immagine modificando la proprietà imageReference. Per altre informazioni, vedere la documentazione relativa all'API REST.

Nota

Con le immagini della piattaforma si specifica solitamente "latest" come versione del riferimento all'immagine. Quando si crea, si aumenta il numero di istanze e si ricrea l'immagine, le macchine virtuali vengono create con l'ultima versione disponibile. Non significa però che l'immagine del sistema operativo viene aggiornata automaticamente nel tempo man mano che vengono rilasciate nuove versioni dell'immagine. Una funzionalità separata fornisce aggiornamenti automatici del sistema operativo. Per altre informazioni, consultare la documentazione relativa agli aggiornamenti automatici del sistema operativo.

Se si usano immagini personalizzate, è possibile aggiornare l'immagine aggiornando l'ID della proprietà imageReference. Per altre informazioni, vedere la documentazione relativa all'API REST.

Passaggi successivi

In questa esercitazione si è appreso come modificare vari aspetti del set di scalabilità e delle singole istanze usando PowerShell.

  • Aggiornare il modello del set di scalabilità
  • Aggiornare una singola istanza di macchina virtuale in un set di scalabilità
  • Aggiungere un'istanza al set di scalabilità
  • Aggiornare le macchine virtuali con il modello del set di scalabilità più recente
  • Ricreazione dell'immagine di un set di scalabilità
  • Aggiornare l'immagine del sistema operativo per il set di scalabilità