Compartilhar via


Tutorial: Modificar um conjunto de dimensionamento de máquinas virtuais Linux usando o PowerShell

Em todo o ciclo de vida de seus aplicativos, talvez seja necessário modificar ou atualizar o Conjunto de Dimensionamento de Máquinas Virtuais. Essas atualizações podem incluir como atualizar a configuração do conjunto de escala, ou alterar a configuração do aplicativo. Este artigo descreve como modificar um conjunto de dimensionamento existente usando o PowerShell.

Atualizar o modelo do conjunto de dimensionamento

Um conjunto de dimensionamento tem um "modelo de conjunto de dimensionamento" que captura o estado desejado do conjunto de dimensionamento como um todo. Para consultar o modelo de um conjunto de dimensionamento, você pode usar Get-AzVmss.

Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet

A apresentação exata da saída depende das opções que você fornecer para o comando. O exemplo a seguir mostra a saída de exemplo condensada 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

Você também pode usar Update-AzVmss para atualizar várias propriedades do conjunto de dimensionamento. Por exemplo, atualizando seu tipo de licença.

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

Atualizar instâncias de VM individuais em um conjunto de dimensionamento

Semelhante a como um conjunto de dimensionamento tem uma exibição de modelo, cada instância de VM no conjunto de dimensionamento tem sua própria exibição de modelo. Para consultar a exibição do modelo para uma determinada instância de máquina virtual em um conjunto de dimensionamento, você pode usar 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

Você também pode adicionar o sinalizador -Status para obter a Exibição 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

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

Você pode executar atualizações em instâncias de VM individuais em um conjunto de dimensionamento, assim como faria 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

Adicionar uma instância ao conjunto de dimensionamento

Há ocasiões em que talvez você queira adicionar uma nova VM ao conjunto de dimensionamento, mas deseja opções de configuração diferentes das listadas no modelo de conjunto de dimensionamento. As VMs podem ser adicionadas a um conjunto de dimensionamento durante a criação usando o comando Get-AzVmss e especificando o nome do conjunto de dimensionamento ao qual você deseja que a instância seja adicionada.

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   

Executando Get-AzVM novamente, podemos ver que a nova instância foi criada e adicionada ao conjunto de dimensionamento 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   

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

Observação

Atualmente, não há suporte para modos de atualização em Conjuntos de Dimensionamento de Máquinas Virtuais usando o modo de orquestração flexível.

Os conjuntos de dimensionamento têm uma "política de atualização" que determinam 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 escala não garante a ordem das VMs sendo interrompidas. O conjunto de dimensionamento pode interromper todas as VMs ao mesmo tempo.
  • Distribuição em lotes - neste modo, o conjunto de dimensionamento distribui a atualização em lotes com um tempo de pausa opcional entre os lotes.
  • Manual – neste modo, quando você atualiza o modelo do conjunto de dimensionamento, nada acontecerá nas VMs existentes até que uma atualização manual seja disparada.

Se o conjunto de dimensionamento estiver definido como atualizações manuais, você poderá disparar uma atualização manual usando Update-AzVmss.

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

Observação

Clusters do Service Fabric só podem usar o modo Automático, mas a atualização é tratada de maneira diferente. Para saber mais, veja Atualizações de aplicativos do Service Fabric.

Refazer a imagem de um conjunto de dimensionamento

Os Conjuntos de Dimensionamento de Máquinas Virtuais irão gerar um nome exclusivo para cada VM no conjunto de dimensionamento. A convenção de nomenclatura difere pelo 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 você precisa refazer a imagem de uma instância específica, use Set-AzVmss e especifique o nome da instância.

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

Para refazer a imagem de todas as instâncias em um conjunto de dimensionamento, basta especificar o nome do conjunto de dimensionamento e omitir quaisquer instanceIDs.

Set-AzVmssVM -Reimage -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet

Atualizar a imagem do SO para seu conjunto de dimensionamento

Você pode ter um conjunto de dimensionamento executando uma versão antiga do Ubuntu LTS 18.04. Você deseja atualizar para uma versão mais recente do Ubuntu LTS 16.04, como a versão 18.04.202210180. A propriedade da versão de referência da imagem não é parte de uma lista, logo você pode modificar diretamente essas propriedades 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

Como alternativa, você talvez queira alterar a imagem que seu conjunto de dimensionamento usa. Por exemplo, você talvez queira atualizar ou alterar uma imagem personalizada usada pelo seu conjunto de dimensionamento. Você pode alterar a imagem que seu conjunto de dimensionamento usa atualizando a propriedade da ID de referência da imagem. A propriedade da ID de referência da imagem não é parte de uma lista, logo você pode modificar diretamente essa propriedade 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 você estiver usando imagens de plataforma do Azure, poderá atualizar a imagem modificando o imageReference (mais informações na documentação da API REST).

Observação

Com imagens de plataforma, é comum especificar "mais recente" para a versão de referência de imagem. Ao criar, dimensionar e recriar a imagem, as VMs são criadas com a versão disponível mais recente. No entanto, isso não significa que a imagem do SO será atualizada automaticamente ao longo do tempo com o lançamento de novas versões da imagem. Um recurso separado fornece atualizações automáticas do SO. Para obter mais informações, confira a Documentação de Atualização Automática do SO.

Se você usar imagens personalizadas, poderá atualizar a imagem atualizando a ID do imageReference (mais informações na documentação da API REST).

Próximas etapas

Neste tutorial, você aprendeu a modificar vários aspectos do conjunto de dimensionamento e das instâncias individuais usando o PowerShell.

  • Atualizar o modelo do conjunto de dimensionamento
  • Atualizar uma instância de VM individual em um conjunto de dimensionamento
  • Adicionar uma instância ao conjunto de dimensionamento
  • Atualizar as VMs com o modelo mais recente do conjunto de dimensionamento
  • Refazer a imagem de um conjunto de dimensionamento
  • Atualizar a imagem do SO para seu conjunto de dimensionamento