Usar políticas de dimensionamento personalizadas com os Conjuntos de Dimensionamento de Máquina Virtual do Azure

Uma implantação de Conjunto de Dimensionamento de Máquina Virtual pode ser dimensionada ou dimensionada com base em uma matriz de métricas, incluindo métricas personalizadas definidas pela plataforma e pelo usuário. Enquanto um aumento horizontal cria novas máquinas virtuais com base no modelo do conjunto de dimensionamento, uma redução horizontal afeta a execução das máquinas virtuais que possam ter configurações e/ou funções diferentes, à medida que a carga de trabalho do conjunto de dimensionamento evolui.

O recurso de política de dimensionamento fornece aos usuários uma maneira de configurar a ordem na qual as máquinas virtuais são dimensionadas, por meio de três configurações de expansão:

  1. Predefinição
  2. NewestVM
  3. OldestVM

Política de escalonamento padrão

Orquestração flexível

Com essa política, as máquinas virtuais são dimensionadas após o balanceamento entre zonas de disponibilidade (se o conjunto de escala estiver na configuração zonal) e a máquina virtual mais antiga é createdTime dimensionada primeiro. O balanceamento entre domínios de falha não está disponível na política padrão com o modo de orquestração flexível.

Orquestração uniforme

Por padrão, o Conjunto de Dimensionamento de Máquina Virtual aplica essa política para determinar em quais instâncias serão dimensionadas. Com a política Padrão, as VMs são selecionadas para expansão na seguinte ordem:

  1. Balancear máquinas virtuais entre zonas de disponibilidade (se o conjunto de escala for implantado na configuração zonal)
  2. Equilibre máquinas virtuais entre domínios de falha (melhor esforço)
  3. Excluir máquina virtual com o ID de instância mais alto

Os usuários não precisam especificar uma política de expansão se quiserem apenas que a ordem padrão seja seguida.

O balanceamento entre zonas de disponibilidade ou domínios de falha não move instâncias entre zonas de disponibilidade ou domínios de falha. O balanceamento é obtido por meio da exclusão de máquinas virtuais das zonas de disponibilidade desequilibradas ou domínios de falha até que a distribuição de máquinas virtuais se torne equilibrada.

Política de escalabilidade de VM mais recente

Essa política excluirá a máquina virtual mais recente ou criada mais recentemente no conjunto de dimensionamento, depois de balancear VMs entre zonas de disponibilidade (para implantações zonais). A habilitação dessa política requer uma alteração de configuração no modelo de Conjunto de Escala de Máquina Virtual.

Política de escalonamento de VM mais antiga

Essa política excluirá a máquina virtual criada mais antiga no conjunto de escala, depois de balancear VMs em zonas de disponibilidade (para implantações zonais). A habilitação dessa política requer uma alteração de configuração no modelo de Conjunto de Escala de Máquina Virtual.

Habilitando a política de expansão

Uma política de dimensionamento é definida no modelo de Conjunto de Escala de Máquina Virtual. Como observado nas seções anteriores, uma definição de política de expansão é necessária ao usar as políticas 'NewestVM' e 'OldestVM'. O Conjunto de Dimensionamento de Máquina Virtual usará automaticamente a política de dimensionamento 'Padrão' se não houver nenhuma definição de política de dimensionamento encontrada no modelo de conjunto de escala.

Uma política de dimensionamento pode ser definida no modelo de Conjunto de Dimensionamento de Máquina Virtual das seguintes maneiras:

Portal do Azure

As etapas a seguir definem a política de expansão ao criar um novo conjunto de escalas.

  1. Vá para Conjuntos de Dimensionamento de Máquina Virtual.
  2. Selecione + Adicionar para criar um novo conjunto de escalas.
  3. Vá para a guia Dimensionamento .
  4. Localize a seção Política de expansão .
  5. Selecione uma política de expansão na lista suspensa.
  6. Quando terminar de criar o novo conjunto de escalas, selecione o botão Rever + criar .

Utilizar a API

Execute um PUT no conjunto de escala de máquina virtual usando a API 2019-03-01:

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["OldestVM"]  
        } 
    }    
} 

Azure PowerShell

Importante

A partir de novembro de 2023, os conjuntos de dimensionamento de VM criados usando o PowerShell e a CLI do Azure assumirão como padrão o Modo de Orquestração Flexível se nenhum modo de orquestração for especificado. Para obter mais informações sobre essa alteração e quais ações você deve tomar, vá para Breaking Change for VMSS PowerShell/CLI Customers - Microsoft Community Hub

Crie um grupo de recursos e, em seguida, crie um novo conjunto de escala com a política de dimensionamento definida como OldestVM.

New-AzResourceGroup -ResourceGroupName "myResourceGroup" -Location "<VMSS location>"
New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "<VMSS location>" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -ScaleInPolicy “OldestVM”

CLI do Azure

Importante

A partir de novembro de 2023, os conjuntos de dimensionamento de VM criados usando o PowerShell e a CLI do Azure assumirão como padrão o Modo de Orquestração Flexível se nenhum modo de orquestração for especificado. Para obter mais informações sobre essa alteração e quais ações você deve tomar, vá para Breaking Change for VMSS PowerShell/CLI Customers - Microsoft Community Hub

O exemplo a seguir adiciona uma política de expansão ao criar um novo conjunto de escalas. Primeiro, crie um grupo de recursos e, em seguida, crie um novo conjunto de escala com a política de expansão como OldestVM.

az group create --name <myResourceGroup> --location <VMSSLocation>
az vmss create \
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --orchestration-mode flexible \
  --image Ubuntu2204 \
  --admin-username <azureuser> \
  --generate-ssh-keys \
  --scale-in-policy OldestVM

Usando o modelo

No seu modelo, em "propriedades", adicione a scaleInPolicy propriedade:

"scaleInPolicy": {  
      "rules": ["OldestVM"]  
}

Esses blocos de código especificam que o Conjunto de Dimensionamento de Máquina Virtual excluirá a VM mais antiga em um conjunto de escala com balanceamento de zona, quando uma escala for acionada (por meio de Autoscale ou exclusão manual).

Quando um Conjunto de Escala de Máquina Virtual não estiver balanceado por zona, o conjunto de escala primeiro excluirá as VMs na(s) zona(s) desequilibrada(s). Dentro das zonas desequilibradas, o conjunto de escala usa a política de dimensionamento especificada para determinar em qual VM deve ser dimensionada. Nesse caso, dentro de uma zona desequilibrada, o conjunto de escala selecionará a VM mais antiga dessa zona a ser excluída.

Para o Conjunto de Escala de Máquina Virtual não zonal, a política seleciona a VM mais antiga em todo o conjunto de escala para exclusão.

O mesmo processo se aplica ao usar a política de expansão 'NewestVM'.

Modificando políticas de expansão

A modificação da política de expansão segue o mesmo processo que a aplicação da política de expansão. Por exemplo, se pretender alterar a política de 'OldestVM' para 'NewestVM', pode fazê-lo da seguinte forma:

Portal do Azure

Você pode modificar a política de expansão de um conjunto de escala existente por meio do portal do Azure.

  1. Em um Conjunto de Dimensionamento de Máquina Virtual existente, selecione Dimensionamento no menu à esquerda.
  2. Selecione a guia Política de Expansão.
  3. Selecione uma política de expansão na lista suspensa.
  4. Quando tiver terminado, selecione Guardar.

Utilizar a API

Execute um PUT no conjunto de escala de máquina virtual usando a API 2019-03-01:

PUT
https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<myRG>/providers/Microsoft.Compute/virtualMachineScaleSets/<myVMSS>?api-version=2019-03-01 

{ 
"location": "<VMSS location>", 
    "properties": { 
        "scaleInPolicy": {  
            "rules": ["NewestVM"]  
        } 
    }    
}

Azure PowerShell

Atualize a política de expansão de um conjunto de escalas existente:

Update-AzVmss `
 -ResourceGroupName "myResourceGroup" `
 -VMScaleSetName "myScaleSet" `
 -ScaleInPolicy “OldestVM”

CLI do Azure

Segue-se um exemplo para atualizar a política de expansão de um conjunto de escalas existente:

az vmss update \  
  --resource-group <myResourceGroup> \
  --name <myVMScaleSet> \
  --scale-in-policy OldestVM

Usando o modelo

No seu modelo, em "propriedades", modifique-o como abaixo e reimplante:

"scaleInPolicy": {  
      "rules": ["NewestVM"]  
} 

O mesmo processo se aplica se você decidir alterar 'NewestVM' para 'Default' ou 'OldestVM'

Proteção de instâncias e política de escalabilidade

Os Conjuntos de Dimensionamento de Máquina Virtual fornecem dois tipos de proteção de instância:

  1. Proteja-se contra aumento de escala
  2. Proteja-se de ações definidas em escala

Uma máquina virtual protegida não é excluída por meio de uma ação de expansão, independentemente da política de expansão aplicada. Por exemplo, se VM_0 (VM mais antiga no conjunto de escalas) estiver protegida contra scale-in e o conjunto de escalas tiver a política de scale-in 'OldestVM' habilitada, VM_0 não será considerada para ser dimensionada, mesmo que seja a VM mais antiga do conjunto de escalas.

Uma máquina virtual protegida pode ser excluída manualmente pelo usuário a qualquer momento, independentemente da política de dimensionamento habilitada no conjunto de escalas.

Exemplos de utilização

Os exemplos abaixo demonstram como um Conjunto de Dimensionamento de Máquina Virtual seleciona VMs a serem excluídas quando um evento de dimensionamento é acionado. As máquinas virtuais com os IDs de instância mais altos são consideradas as VMs mais recentes no conjunto de escala e as VMs com os IDs de instância menores são consideradas as VMs mais antigas do conjunto de escala.

Política de escalonamento de VM mais antiga

Evento IDs de instância na Zona1 IDs de instância na Zona2 IDs de instância na Zona3 Seleção de escalonamento
Inicial 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8
Escalonamento 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8 Escolha entre a Zona 1 e a Zona 2, mesmo que a Zona 3 tenha a VM mais antiga. Exclua o VM2 da Zona 2, pois é a VM mais antiga dessa zona.
Escalonamento 3, 4, 5, 10 6, 9, 11 1, 7, 8 Escolha Zona 1 mesmo que a Zona 3 tenha a VM mais antiga. Exclua o VM3 da Zona 1, pois é a VM mais antiga dessa zona.
Escalonamento 4, 5, 10 6, 9, 11 1, 7, 8 As zonas são equilibradas. Exclua VM1 na Zona 3, pois é a VM mais antiga no conjunto de escala.
Escalonamento 4, 5, 10 6, 9, 11 7, 8 Escolha entre a Zona 1 e a Zona 2. Exclua o VM4 na Zona 1, pois é a VM mais antiga nas duas Zonas.
Escalonamento 5, 10 6, 9, 11 7, 8 Escolha Zona 2 mesmo que a Zona 1 tenha a VM mais antiga. Exclua o VM6 na Zona 1, pois é a VM mais antiga dessa zona.
Escalonamento 5, 10 9, 11 7, 8 As zonas são equilibradas. Exclua o VM5 na Zona 1, pois é a VM mais antiga do conjunto de escala.

Para Conjuntos de Escala de Máquina Virtual não zonal, a política seleciona a VM mais antiga em todo o conjunto de escala para exclusão. Qualquer VM "protegida" é ignorada para exclusão.

Política de escalabilidade de VM mais recente

Evento IDs de instância na Zona1 IDs de instância na Zona2 IDs de instância na Zona3 Seleção de escalonamento
Inicial 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8
Escalonamento 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8 Escolha entre a Zona 1 e a Zona 2. Exclua o VM11 da Zona 2, pois é a VM mais recente nas duas zonas.
Escalonamento 3, 4, 5, 10 2, 6, 9 1, 7, 8 Escolha Zona 1, pois ela tem mais VMs do que as outras duas zonas. Exclua o VM10 da Zona 1, pois é a VM mais recente nessa Zona.
Escalonamento 3, 4, 5 2, 6, 9 1, 7, 8 As zonas são equilibradas. Exclua o VM9 na Zona 2, pois é a VM mais recente no conjunto de escala.
Escalonamento 3, 4, 5 2, 6 1, 7, 8 Escolha entre a Zona 1 e a Zona 3. Exclua o VM8 na Zona 3, pois é a VM mais recente nessa Zona.
Escalonamento 3, 4, 5 2, 6 1, 7 Escolha Zona 1 mesmo que a Zona 3 tenha a VM mais recente. Exclua o VM5 na Zona 1, pois é a VM mais recente nessa Zona.
Escalonamento 3, 4 2, 6 1, 7 As zonas são equilibradas. Exclua o VM7 na Zona 3, pois é a VM mais recente no conjunto de escala.

Para Conjuntos de Escala de Máquina Virtual não zonal, a política seleciona a VM mais recente em todo o conjunto de escala para exclusão. Qualquer VM "protegida" é ignorada para exclusão.

Resolver problemas

  1. Falha ao ativar scaleInPolicy Se você receber um erro 'BadRequest' com uma mensagem de erro informando "Não foi possível encontrar o membro 'scaleInPolicy' no objeto do tipo 'properties'", verifique a versão da API usada para o Conjunto de Escala de Máquina Virtual. A versão da API 2019-03-01 ou superior é necessária para este recurso.

  2. Seleção incorreta de VMs para dimensionamento Consulte os exemplos neste documento. Se o Conjunto de Dimensionamento de Máquina Virtual for uma implantação zonal, a política de dimensionamento será aplicada primeiro às Zonas desequilibradas e, em seguida, em todo o conjunto de escalas, uma vez que a zona esteja equilibrada. Se a ordem de dimensionamento não for consistente com os exemplos documentados aqui, levante uma consulta com a equipe do Conjunto de Dimensionamento de Máquina Virtual para solução de problemas.

Próximos passos

Saiba como implantar seu aplicativo em conjuntos de dimensionamento de máquina virtual.