Utilizar políticas de redução horizontal personalizadas com Conjuntos de Dimensionamento de Máquinas Virtuais 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:
- Predefinido
- NewestVM
- OldestVM
Política de escalonamento padrão
Orquestração flexível
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:
- Balancear máquinas virtuais entre zonas de disponibilidade (se o conjunto de escala for implantado na configuração zonal)
- Equilibre máquinas virtuais entre domínios de falha (melhor esforço)
- 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.
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:
- Balancear máquinas virtuais entre zonas de disponibilidade (se o conjunto de escala for implantado na configuração zonal)
- Equilibre máquinas virtuais entre domínios de falha (melhor esforço)
- 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 Dimensionamento 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.
- Vá para Conjuntos de Dimensionamento de Máquina Virtual.
- Selecione + Adicionar para criar um novo conjunto de escalas.
- Vá para a guia Dimensionamento .
- Localize a seção Política de expansão .
- Selecione uma política de expansão na lista suspensa.
- 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 escalas 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.
- Em um Conjunto de Dimensionamento de Máquina Virtual existente, selecione Dimensionamento no menu à esquerda.
- Selecione a guia Política de Expansão.
- Selecione uma política de expansão na lista suspensa.
- 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:
- Proteja-se contra aumento de escala
- 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 escala) estiver protegida contra scale-in e o conjunto de escala 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 escala.
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
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.
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.