Tutorial: Modificar um Conjunto de Escala de Máquina Virtual usando PowerShell

Ao longo do ciclo de vida das suas aplicações, poderá precisar de modificar ou atualizar o seu Conjunto de Escala da Máquina Virtual. Estas atualizações podem incluir como atualizar a configuração do conjunto de escalas ou alterar a configuração da aplicação. Este artigo descreve como modificar um conjunto de escalas existente usando o PowerShell.

Atualizar o modelo do conjunto de dimensionamento

Um conjunto de dimensionamento tem um "modelo do conjunto de dimensionamento" que capta o estado desejado do conjunto de dimensionamento como um todo. Para consultar o modelo de um conjunto de dimensionamento, pode utilizar Get-AzVmss.

Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet

A apresentação exata da saída depende das opções que fornece ao comando. O exemplo seguinte mostra a saída condensada de amostras do 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

Também pode usar o Update-AzVmss para atualizar várias propriedades do seu conjunto de escala. Por exemplo, atualizar o tipo de carta de condução.

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

Atualização de instâncias individuais de VM num conjunto de escalas

Tal como um conjunto de escalas tem uma vista de modelo, cada instância de VM no conjunto de escala tem a sua própria vista de modelo. Para consultar a visualização do modelo para uma instância de VM específica num conjunto de escala, pode usar o 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

Também podes adicionar a -Status flag para obter a Vista de Instância, que fornece mais detalhes sobre a 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

Estas propriedades descrevem a configuração de uma instância de VM dentro de um conjunto de escala, não a configuração do conjunto de escalas como um todo.

Podes fazer atualizações a instâncias individuais de VM num conjunto de escala, tal como farias com uma VM autónoma. Por exemplo, anexar um novo disco de dados à instância 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

Adiciona uma Instância ao teu conjunto de escalas

Há momentos em que pode querer adicionar uma nova VM ao seu conjunto de escala, mas querer opções de configuração diferentes das listadas no modelo de escala. As VMs podem ser adicionadas a um conjunto de escalas durante a criação usando o comando Get-AzVmss e especificando o nome do conjunto de escala ao qual se quer adicionar a instância.

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   

Ao correr novamente o Get-AzVM , podemos ver que a nova instância foi criada e adicionada ao conjunto de escalas existente.

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   

Atualize as VMs com o modelo mais recente do conjunto de dimensionamento

Note

Os modos de atualização não são atualmente suportados em Conjuntos de Dimensionamento de Máquinas Virtuais que utilizam o modo de orquestração flexível.

Os conjuntos de dimensionamento têm uma "política de atualização" que determina como as VMs são atualizadas com o modelo mais recente do conjunto de dimensionamento. Os três modos da política de atualização são:

  • Automático - Neste modo, o conjunto de escalas não garante a ordem em que as VMs serão desativadas. O conjunto de escalas pode desativar todas as VMs ao mesmo tempo.
  • Rolling - Neste modo, o conjunto de escalas lança a atualização em lotes com um tempo de pausa opcional entre lotes.
  • Manual - Neste modo, quando atualizas o modelo de conjunto, nada acontece às VMs existentes até ser ativada uma atualização manual.

Se o teu conjunto de escalas estiver configurado para melhorias manuais, podes ativar uma atualização manual usando o Update-AzVmss.

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

Note

Os clusters do Service Fabric apenas podem usar o modo Automático, mas a atualização é tratada de forma diferente. Para obter mais informações, consulte Atualizações de aplicativos do Service Fabric.

Reimaginar um conjunto de escalas

Conjuntos de Dimensionamento de Máquinas Virtuais geram um nome único para cada VM do conjunto de escalas. A convenção de nomenclatura difere consoante o modo de orquestração:

  • Modo de Orquestração Flexível: {scale-set-name}_{8-char-guid}
  • Modo de orquestração uniforme: {scale-set-name}_{instance-id}

Nos casos em que precisas de reimaginar uma instância específica, usa o Set-AzVmss e especifica o nome da instância.

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

Para reimaginar todas as instâncias num conjunto de escalas, especifique o nome do conjunto de escalas e omita quaisquer IDs de instância.

Set-AzVmssVM -Reimage -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet

Atualiza a imagem do sistema operativo para o teu conjunto de escalas

Podes ter um conjunto de escalas que corre uma versão antiga do Ubuntu LTS 18.04. Deves atualizar para uma versão mais recente do Ubuntu LTS 16.04, como a versão 18.04.202210180. A propriedade de versão de referência da imagem não faz parte de uma lista, por isso pode modificar diretamente essas propriedades usando o 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

Em alternativa, pode querer mudar a imagem que o seu conjunto de escalas utiliza. Por exemplo, pode querer atualizar ou alterar uma imagem personalizada usada pelo seu conjunto de escalas. Pode alterar a imagem que o seu conjunto de escala usa atualizando a propriedade ID de referência da imagem. A propriedade ID de referência da imagem não faz parte de uma lista, por isso pode modificar diretamente esta propriedade usando o 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 utilizar imagens da plataforma Azure, pode atualizar a imagem modificando a imageReference (para obter mais informações, consulte a documentação da API REST).

Note

No caso das imagens de plataforma, é comum especificar "latest" para a versão de referência da imagem. Quando crias, escalas e reimaginas, as VMs são criadas com a versão mais recente disponível. No entanto, isso não significa que a imagem do SO seja automaticamente atualizada ao longo do tempo à medida que novas versões são lançadas. Uma funcionalidade separada fornece atualizações automáticas do sistema operativo. Para mais informações, consulte a documentação de Atualizações Automáticas do SO.

Se usar imagens personalizadas, pode atualizar a imagem atualizando o imageReference ID (para mais informações, consulte a documentação da API REST).

Passos seguintes

Neste tutorial, aprendeste a modificar vários aspetos do teu conjunto de escalas e instâncias individuais usando o PowerShell.

  • Atualizar o modelo do conjunto de dimensionamento
  • Atualizar uma instância individual de VM num conjunto de escalas
  • Adiciona uma instância ao teu conjunto de escalas
  • Atualize as VMs com o modelo mais recente do conjunto de dimensionamento
  • Reimaginar um conjunto de escalas
  • Atualiza a imagem do sistema operativo para o teu conjunto de escalas