Tutorial: Modificar um conjunto de escala de máquina virtual usando o PowerShell
Durante todo o ciclo de vida de seus aplicativos, talvez seja necessário modificar ou atualizar seu Conjunto de Dimensionamento de Máquina Virtual. 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 escala existente usando o PowerShell.
Atualizar o modelo do conjunto de escalas
Um conjunto de escalas tem um "modelo de conjunto de escalas" que captura o estado desejado do conjunto de escalas como um todo. Para consultar o modelo para um conjunto de escala, você pode usar Get-AzVmss.
Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
A apresentação exata da saída depende das opções fornecidas ao 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 seu conjunto de escala. 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
Atualizando instâncias de VM individuais em um conjunto de escala
Semelhante a como um conjunto de escala tem uma exibição de modelo, cada instância de VM no conjunto de escala tem sua própria exibição de modelo. Para consultar a exibição de modelo para uma instância de VM específica em um conjunto de escala, 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 escala, não a configuração do conjunto de escala como um todo.
Você pode executar atualizações para instâncias de VM individuais em um conjunto de escala como faria com uma VM autônoma. Por exemplo, anexando 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 seu conjunto de escala
Há momentos em que você pode querer adicionar uma nova VM ao seu conjunto de escala, mas deseja opções de configuração diferentes das listadas no modelo de conjunto de escala. As VMs podem ser adicionadas a um conjunto de escala durante a criação usando o comando Get-AzVmss e especificando o nome do conjunto de escala ao qual você deseja 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 executar Get-AzVM novamente, podemos ver que a nova instância foi criada e adicionada ao conjunto de escala 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 de conjunto de escala mais recente
Nota
Atualmente, os modos de atualização não são suportados em Conjuntos de Dimensionamento de Máquina Virtual usando o modo de orquestração flexível.
Os conjuntos de escala têm uma "política de atualização" que determina como as VMs são atualizadas com o modelo de conjunto de escala mais recente. Os três modos para a política de atualização são:
- Automático - Neste modo, o conjunto de escala não garante a ordem das VMs que estão sendo derrubadas. O conjunto de escala pode derrubar todas as VMs ao mesmo tempo.
- Rolagem - Neste modo, o conjunto de escala distribui a atualização em lotes com um tempo de pausa opcional entre lotes.
- Manual - Neste modo, quando você atualiza o modelo de conjunto de escalas, nada acontece com as VMs existentes até que uma atualização manual seja acionada.
Se o conjunto de dimensionamento estiver definido como atualizações manuais, você poderá acionar uma atualização manual usando Update-AzVmss.
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet
Nota
Os clusters do Service Fabric só 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.
Recriar a imagem de um conjunto de escalas
Os Conjuntos de Escala de Máquina Virtual gerarão um nome exclusivo para cada VM no conjunto de escala. A convenção de nomenclatura difere de acordo com 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 você precisa criar uma nova 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 criar uma nova imagem de todas as instâncias em um conjunto de escalas, basta especificar o nome do conjunto de escala e omitir quaisquer IDs de instância.
Set-AzVmssVM -Reimage -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet
Atualizar a imagem do SO para o seu conjunto de escalas
Você pode ter um conjunto de escala que executa 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 de versão de referência de imagem não faz parte de uma lista, portanto, 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ê pode querer alterar a imagem que seu conjunto de escala usa. Por exemplo, talvez você queira atualizar ou alterar uma imagem personalizada usada pelo seu conjunto de escalas. Você pode alterar a imagem usada pelo conjunto de escalas atualizando a propriedade ID de referência da imagem. A propriedade ID de referência de imagem não faz parte de uma lista, portanto, 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ê usar imagens da plataforma Azure, poderá atualizar a imagem modificando o imageReference (mais informações, consulte a documentação da API REST).
Nota
Com imagens de plataforma, é comum especificar "mais recente" para a versão de referência da imagem. Quando você cria, dimensiona e recria imagens, as VMs são criadas com a versão mais recente disponível. No entanto, isso não significa que a imagem do sistema operacional é atualizada automaticamente ao longo do tempo à medida que novas versões de imagem são lançadas. Um recurso separado fornece atualizações automáticas do sistema operacional. Para obter mais informações, consulte a documentação Atualizações automáticas do sistema operacional.
Se você usar imagens personalizadas, poderá atualizá-la atualizando o ID imageReference (para obter mais informações, consulte a documentação da API REST).
Próximos passos
Neste tutorial, você aprendeu como modificar vários aspetos do seu conjunto de escala e instâncias individuais usando o PowerShell.
- Atualizar o modelo do conjunto de escalas
- Atualizar uma instância de VM individual em um conjunto de escala
- Adicionar uma instância ao seu conjunto de escala
- Atualize as VMs com o modelo de conjunto de escala mais recente
- Recriar a imagem de um conjunto de escalas
- Atualizar a imagem do SO para o seu conjunto de escalas