Usar políticas de redução horizontal personalizadas com os Conjuntos de Dimensionamento de Máquinas Virtuais do Azure

Uma implantação de conjunto de dimensionamento de máquinas virtuais pode ser expandida ou reduzida horizontalmente com base em uma matriz de métricas, incluindo métricas da plataforma e métricas personalizadas definidas pelo usuário. Embora uma expansão crie novas máquinas virtuais com base no modelo do conjunto de dimensionamento, uma redução horizontal afeta a execução de máquinas virtuais que podem ter diferentes configurações e/ou funções à medida que a carga de trabalho do conjunto de dimensionamento evolui.

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

  1. Padrão
  2. NewestVM
  3. OldestVM

Política de redução horizontal 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 dimensionamento estiver na configuração zonal) e a máquina virtual mais antiga, conforme 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áquinas virtuais aplica essa política para determinar quais instâncias serão reduzidas. Com a política Padrão, as VMs são selecionadas para serem reduzidas horizontalmente na ordem a seguir:

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

Os usuários não precisam especificar uma política de redução horizontal se quiserem 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 de zonas de disponibilidade desbalanceadas ou domínios de falha, até que a distribuição de máquinas virtuais se torne equilibrada.

Política de redução horizontal NewestVM

Essa política excluirá a máquina virtual mais nova ou a criada mais recentemente no conjunto de dimensionamento, depois de balancear as VMs entre as zonas de disponibilidade (para implantações por zona). A habilitação desta política exige uma alteração de configuração no modelo do conjunto de dimensionamento de máquinas virtuais.

Política de redução horizontal OldestVM

Essa política excluirá a máquina virtual mais antiga criada no conjunto de dimensionamento, depois de balancear as VMs entre as zonas de disponibilidade (para implantações por zonas). A habilitação desta política exige uma alteração de configuração no modelo do conjunto de dimensionamento de máquinas virtuais.

Habilitando políticas de redução horizontal

Uma política de redução horizontal é definida no modelo do conjunto de dimensionamento de máquinas virtuais. Conforme observado nas seções acima, uma definição de política de redução horizontal é necessária ao usar as políticas ‘NewestVM’ e ‘OldestVM’. O conjunto de dimensionamento de máquinas virtuais usará automaticamente a política de redução horizontal ‘Padrão‘ se não houver nenhuma definição de política de redução horizontal encontrada no modelo do conjunto de dimensionamento.

Uma política de redução horizontal pode ser definida no modelo do conjunto de dimensionamento de máquinas virtuais das seguintes maneiras:

Portal do Azure

As etapas a seguir definem a política de redução horizontal ao criar um novo conjunto de dimensionamento.

  1. Acesse Conjuntos de Dimensionamento de Máquinas Virtuais.
  2. Selecione Adicionar+ para criar um novo conjunto de dimensionamento.
  3. Vá para a guia Dimensionamento.
  4. Encontre a seção política de redução horizontal.
  5. Selecione uma política de redução horizontal no menu suspenso.
  6. Quando terminar de criar o conjunto de dimensionamento, selecione o botão Examinar + criar.

Usando a API

Execute um PUT no conjunto de dimensionamento de máquinas virtuais 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"]  
        } 
    }    
} 

PowerShell do Azure

Importante

A partir de novembro de 2023, os conjuntos de dimensionamento de VM criados usando o PowerShell e a CLI do Azure serão padrão para 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 executar, acesse Alteração Interruptiva para Clientes PowerShell/CLI de VMSS – Hub de Comunidade da Microsoft

Crie um grupo de recursos e um novo conjunto de dimensionamento com a política de redução horizontal 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 serão padrão para 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 executar, acesse Alteração Interruptiva para Clientes PowerShell/CLI de VMSS – Hub de Comunidade da Microsoft

O exemplo a seguir adiciona uma política de redução ao criar um novo conjunto de dimensionamento. Primeiro crie um grupo de recursos e um novo conjunto de dimensionamento com a política de redução horizontal 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 um Modelo

No modelo, em “propriedades”, adicione a propriedade scaleInPolicy:

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

Esses blocos de código especificam que o conjunto de dimensionamento de máquinas virtuais excluirá a VM mais antiga em um conjunto de dimensionamento com balanceamento de zona, quando uma redução horizontal for disparada (por meio de dimensionamento automático ou exclusão manual).

Quando um conjunto de dimensionamento de máquinas virtuais não for balanceado por zona, o conjunto de dimensionamento excluirá primeiro as VMs em todas as zonas desbalanceadas. Dentro das zonas desbalanceadas, o conjunto de dimensionamento usa a política de redução horizontal especificada para determinar qual VM será reduzida horizontalmente. Nesse caso, em uma zona desbalanceada, o conjunto de dimensionamento selecionará a VM mais antiga nessa zona a ser excluída.

Para um conjunto de dimensionamento de máquinas virtuais sem zonas, a política seleciona a VM mais antiga no conjunto de dimensionamento para exclusão.

O mesmo processo se aplica ao usar a política de redução horizontal ‘NewestVM’.

Modificando políticas de redução horizontal

A modificação da política de redução horizontal segue o mesmo processo da aplicação da política de redução horizontal. Por exemplo, se você quiser alterar a política de ‘OldestVM’ para ‘NewestVM’, poderá fazer isso por meio do:

Portal do Azure

Você pode modificar a política de redução horizontal de um conjunto de dimensionamento existente por meio do portal do Azure.

  1. Em um conjunto de dimensionamento de máquinas virtuais existente, selecione Escala no menu à esquerda.
  2. Selecione a guia Política de redução horizontal.
  3. Selecione uma política de redução horizontal no menu suspenso.
  4. Quando terminar, selecione Salvar.

Usando a API

Execute um PUT no conjunto de dimensionamento de máquinas virtuais 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

Atualizar a política de redução horizontal em um conjunto de dimensionamento existente:

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

CLI do Azure

A seguir temos um exemplo de como atualizar a política de redução horizontal de um conjunto de dimensionamento existente:

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

Usando um Modelo

No modelo, em "Propriedades", modifique o modelo conforme abaixo e reimplante:

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

O mesmo processo será aplicado se você decidir alterar ‘NewestVM’ para ‘Padrão’ ou ‘OldestVM’

Proteção de instância e política de redução horizontal

Os conjuntos de dimensionamento de máquinas virtuais fornecem dois tipos de proteção de instância:

  1. Proteger contra redução horizontal
  2. Proteger contra as ações do conjunto de dimensionamento

Uma máquina virtual protegida não é excluída por meio de uma ação de redução horizontal, independentemente da política de redução horizontal aplicada. Por exemplo, se a VM_0 (VM mais antiga no conjunto de dimensionamento) estiver protegida da redução horizontal e o conjunto de dimensionamento tiver a política de redução horizontal ‘OldestVM’ habilitada, a VM_0 não será considerada para ser reduzida horizontalmente, mesmo que seja a VM mais antiga no conjunto de dimensionamento.

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

Exemplos de uso

Os exemplos abaixo demonstram como um conjunto de dimensionamento de máquinas virtuais seleciona as VMs a serem excluídas quando um evento de redução horizontal é disparado. As máquinas virtuais com as IDs de instância mais alta são consideradas as VMs mais novas no conjunto de dimensionamento e as VMs com as IDs de instância menores são consideradas as VMs mais antigas no conjunto de dimensionamento.

Política de redução horizontal OldestVM

Evento IDs de instância na Zona 1 IDs de instância na Zona 2 IDs de instância na Zona 3 Seleção de redução horizontal
Inicial 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8
Reduzir horizontalmente 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8 Escolha entre a Zona 1 e 2, mesmo que a Zona 3 tenha a VM mais antiga. Exclua a VM2 da Zona 2, pois ela é a VM mais antiga nessa zona.
Reduzir horizontalmente 3, 4, 5, 10 6, 9, 11 1, 7, 8 Escolha a Zona 1 embora a Zona 3 tenha a VM mais antiga. Exclua a VM3 da Zona 1, pois ela é a VM mais antiga nessa zona.
Reduzir horizontalmente 4, 5, 10 6, 9, 11 1, 7, 8 As zonas são balanceadas. Exclua a VM1 da Zona 3, pois ela é a VM mais antiga no conjunto de dimensionamento.
Reduzir horizontalmente 4, 5, 10 6, 9, 11 7, 8 Escolha entre a Zona 1 e a Zona 2. Exclua a VM4 da Zona 1, pois ela é a VM mais antiga entre as duas zonas.
Reduzir horizontalmente 5, 10 6, 9, 11 7, 8 Escolha a Zona 2, mesmo que a Zona 1 tenha a VM mais antiga. Exclua a VM6 da Zona 1, pois ela é a VM mais antiga nessa zona.
Reduzir horizontalmente 5, 10 9, 11 7, 8 As zonas são balanceadas. Exclua a VM5 da Zona 1, pois ela é a VM mais antiga no conjunto de dimensionamento.

Para os conjuntos de dimensionamento de máquinas virtuais sem zonas, a política seleciona a VM mais antiga no conjunto de dimensionamento para exclusão. Qualquer VM “protegida” será ignorada na exclusão.

Política de redução horizontal NewestVM

Evento IDs de instância na Zona 1 IDs de instância na Zona 2 IDs de instância na Zona 3 Seleção de redução horizontal
Inicial 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8
Reduzir horizontalmente 3, 4, 5, 10 2, 6, 9, 11 1, 7, 8 Escolha entre a Zona 1 e 2. Exclua a VM11 da Zona 2, pois ela é a VM mais nova entre as duas zonas.
Reduzir horizontalmente 3, 4, 5, 10 2, 6, 9 1, 7, 8 Escolha a Zona 1, pois ela tem mais VMs do que as outras duas zonas. Exclua a VM10 da Zona 1, pois ela é a VM mais nova nessa zona.
Reduzir horizontalmente 3, 4, 5 2, 6, 9 1, 7, 8 As zonas são balanceadas. Exclua a VM9 na Zona 2, pois ela é a VM mais nova no conjunto de dimensionamento.
Reduzir horizontalmente 3, 4, 5 2, 6 1, 7, 8 Escolha entre a Zona 1 e a Zona 3. Exclua a VM8 na Zona 3, pois ela é a VM mais nova nessa zona.
Reduzir horizontalmente 3, 4, 5 2, 6 1, 7 Escolha a Zona 1, mesmo que a Zona 3 tenha a VM mais nova. Exclua a VM5 na Zona 1, pois ela é a VM mais nova nessa zona.
Reduzir horizontalmente 3, 4 2, 6 1, 7 As zonas são balanceadas. Exclua a VM7 na Zona 3, pois ela é a VM mais nova no conjunto de dimensionamento.

Para os conjuntos de dimensionamento de máquinas virtuais sem zonas, a política seleciona a VM mais nova no conjunto de dimensionamento para exclusão. Qualquer VM “protegida” será ignorada na exclusão.

Solucionar problemas

  1. Falha ao habilitar a scaleInPolicy Se você receber o 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 dimensionamento de máquinas virtuais. Para este recurso é necessária a versão de API 2019-03-01 ou superior.

  2. Seleção errada de VMs para redução horizontal: consulte os exemplos neste documento. Se o conjunto de dimensionamento de máquinas virtuais for uma implantação por zona, a política de redução horizontal será aplicada primeiro às zonas desbalanceadas e depois em todo o conjunto de dimensionamento, assim que a zona for balanceada. Se a ordem da redução horizontal não for consistente com os exemplos documentados aqui, gere uma consulta com a equipe do conjunto de dimensionamento de máquinas virtuais para solução de problemas.

Próximas etapas

Aprenda como Implantar o aplicativo em Conjuntos de Dimensionamento de Máquinas Virtuais.