Introdução ao dimensionamento automático em clusters gerenciados do Service Fabric
O dimensionamento automático oferece grande elasticidade e permite a adição ou a redução de nós sob demanda em um tipo de nó secundário. Esse comportamento automatizado e elástico reduz a sobrecarga de gerenciamento e o possível impacto sobre os negócios monitorando e otimizando o número de nós que atendem à sua carga de trabalho. Você configura regras para a carga de trabalho e deixa o dimensionamento automático lidar com o resto. As regras de dimensionamento automático atuam para ajustar a capacidade do seu tipo de nó, quando esses limites definidos são atendidos. O dimensionamento automático pode ser habilitado, desabilitado ou configurado a qualquer momento. Este artigo fornece um exemplo de implantação, como habilitar ou desabilitar o dimensionamento automático e como configurar um exemplo de política de dimensionamento automático.
Requisitos e métricas com suporte:
- O recurso de cluster gerenciado do Service Fabric apiVersion deve ser 2022-01-01 ou posterior.
- A SKU do cluster deve ser Standard.
- Só pode ser configurado em um tipo de nó secundário em seu cluster.
- Depois de habilitar o dimensionamento automático para um tipo de nó, configure a propriedade
vmInstanceCount
como-1
ao reimplantar o recurso. - Há suporte apenas para métricas publicadas do Azure Monitor.
Observação
Se estiver usando a imagem do sistema operacional Windows com a função Hyper-V habilitada, ou seja, a VM será configurada para virtualização aninhada, a Métrica de Memória Disponível não estará disponível, pois o driver de memória dinâmica dentro da VM estará em um estado parado.
Um cenário comum em que o dimensionamento automático é útil ocorre quando a carga de um serviço específico varia ao longo do tempo. Por exemplo, um serviço, como um gateway, pode ser dimensionado com base na quantidade de recursos necessários para lidar com solicitações de entrada. Vamos dar uma olhada em um exemplo de como essas regras de dimensionamento poderiam parecer e as usaremos depois neste artigo:
- Se todas as instâncias do gateway estiverem usando em média mais de 70%, escale o serviço de gateway horizontalmente adicionando mais duas instâncias. Faça isso a cada 30 minutos, mas nunca tenha mais de vinte instâncias no total.
- Se todas as instâncias do meu gateway usarem em média menos de 40% de núcleos, escale o serviço removendo uma instância. Faça isso a cada 30 minutos, mas nunca tenha menos que três instâncias no total.
Exemplo de implantação de dimensionamento automático
Este exemplo dará o passo a passo:
- Criar um cluster gerenciado de SKU Standard do Service Fabric com dois tipos de nó,
NT1
eNT2
por padrão. - Adicionar regras de dimensionamento automático ao tipo de nó secundário,
NT2
.
Observação
O dimensionamento automático do tipo de nó é feito com base nas métricas de host da CPU do VMSS de cluster gerenciado. O recurso VMSS é resolvido automaticamente no modelo.
O seguinte o levará etapa por etapa pela instalação de um cluster com o dimensionamento automático configurado.
Criar grupo de recursos em uma região
Login-AzAccount Select-AzSubscription -SubscriptionId $subscriptionid New-AzResourceGroup -Name $myresourcegroup -Location $location
Criar recurso de cluster
Baixar este exemplo de cluster gerenciado de SKU Standard do Service Fabric Executar este comando para implantar o recurso de cluster:
$parameters = @{ clusterName = $clusterName adminPassword = $VmAdminPassword clientCertificateThumbprint = $clientCertificateThumbprint } New-AzResourceGroupDeployment -Name "deploy_cluster" -ResourceGroupName $resourceGroupName -TemplateFile .\azuredeploy.json -TemplateParameterObject $parameters -Verbose
Configurar e habilitar regras de dimensionamento automático em um tipo de nó secundário
Baixe o modelo de exemplo de dimensionamento automático do cluster gerenciado que será usado para configurar o dimensionamento automático com os seguintes comandos:
$parameters = @{ clusterName = $clusterName } New-AzResourceGroupDeployment -Name "deploy_autoscale" -ResourceGroupName $resourceGroupName -TemplateFile .\sfmc-deploy-autoscale.json -TemplateParameterObject $parameters -Verbose
Observação
Após a conclusão dessa implantação, as próximas implantações de recursos de cluster devem definir a propriedade vmInstanceCount
como -1
em tipos de nó secundários que têm regras de dimensionamento automático habilitadas. Isso garantirá que as implantações de cluster não entrem em conflito com o dimensionamento automático.
Habilitar ou desabilitar o dimensionamento automático em um tipo de nó secundário
Os tipos de nó implantados por cluster gerenciado do Service Fabric não habilitam o dimensionamento automático por padrão. O dimensionamento automático pode ser habilitado ou desabilitado a qualquer momento, por tipo de nó, que estão configurados e disponíveis.
Para habilitar esse recurso, configure a propriedade enabled
sob o tipo Microsoft.Insights/autoscaleSettings
em um modelo do ARM, conforme mostrado abaixo:
"resources": [
{
"type": "Microsoft.Insights/autoscaleSettings",
"apiVersion": "2015-04-01",
"name": "[concat(parameters('clusterName'), '-', parameters('nodeType2Name'))]",
"location": "[resourceGroup().location]",
"properties": {
"name": "[concat(parameters('clusterName'), '-', parameters('nodeType2Name'))]",
"targetResourceUri": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'), '/nodetypes/', parameters('nodeType2Name'))]",
"enabled": true,
...
Para desabilitar o dimensionamento automático, defina o valor como false
Excluir regras de dimensionamento automático
Para excluir uma configuração de política de dimensionamento automático para um tipo de nó, você pode executar o comando do PowerShell a seguir.
Remove-AzResource -ResourceId "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/microsoft.insights/autoscalesettings/$name" -Force
Definir políticas para dimensionamento automático
Um cluster gerenciado do Service Fabric não configura nenhuma política para dimensionamento automático por padrão. As políticas de dimensionamento automático devem ser configuradas para que ações de dimensionamento ocorram nos recursos subjacentes.
O exemplo a seguir definirá uma política para nodeType2Name
que seja pelo menos 3 nós, mas permitirá o dimensionamento de até 20 nós. Ele irá disparar a colocação em escala vertical quando a utilização média da CPU for de 70% nos últimos 30 minutos com granularidade de 1 minuto. Ele irá disparar a redução em escala quando a utilização média da CPU for menor de 40% nos últimos 30 minutos com granularidade de 1 minuto.
"resources": [
{
"type": "Microsoft.Insights/autoscaleSettings",
"apiVersion": "2015-04-01",
"name": "[concat(parameters('clusterName'), '-', parameters('nodeType2Name'))]",
"location": "[resourceGroup().location]",
"properties": {
"name": "[concat(parameters('clusterName'), '-', parameters('nodeType2Name'))]",
"targetResourceUri": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'), '/nodetypes/', parameters('nodeType2Name'))]",
"enabled": "[parameters('enableAutoScale')]",
"profiles": [
{
"name": "Autoscale by percentage based on CPU usage",
"capacity": {
"minimum": "3",
"maximum": "20",
"default": "3"
},
"rules": [
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricNamespace": "",
"metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/SFC_', reference(resourceId('Microsoft.ServiceFabric/managedClusters', parameters('clusterName')), '2022-01-01').clusterId,'/providers/Microsoft.Compute/virtualMachineScaleSets/',parameters('nodeType2Name'))]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT30M",
"timeAggregation": "Average",
"operator": "GreaterThan",
"threshold": 70
},
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "5",
"cooldown": "PT5M"
}
},
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricNamespace": "",
"metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/SFC_', reference(resourceId('Microsoft.ServiceFabric/managedClusters', parameters('clusterName')), '2022-01-01').clusterId,'/providers/Microsoft.Compute/virtualMachineScaleSets/',parameters('nodeType2Name'))]",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT30M",
"timeAggregation": "Average",
"operator": "LessThan",
"threshold": 40
},
"scaleAction": {
"direction": "Decrease",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
}
]
}
]
}
}
]
Você pode baixar este modelo do ARM para habilitar o dimensionamento automático, que contém o exemplo acima
Exibir definições de dimensionamento automático configuradas de seu recurso de cluster gerenciado
É possível exibir as configurações de dimensionamento automático definidas usando Azure Resource Explorer.
Vá até Azure Resource Explorer
Navegue até
subscriptions
->SubscriptionName
->resource group
->microsoft.insights
->autoscalesettings
-> nome da política de dimensionamento automático: por exemplo,sfmc01-NT2
.Você verá algo semelhante a isso na árvore de navegação:
No lado direito, você pode exibir a definição completa dessa configuração de dimensionamento automático.
Neste exemplo, o dimensionamento automático é configurado com uma regra de expansão e redução horizontal baseada em % da CPU.
Solução de problemas
Veja a seguir alguns itens que você deve levar em consideração:
Revisar os eventos de dimensionamento automático que estão sendo disparados em tipos de nó secundário de clusters gerenciados
- Ir para o log de atividades do cluster
- Revisar o log de atividades para escalar/reduzir verticalmente a operação concluída
Quantas VMs estão configuradas para o tipo de nó. A carga de trabalho ocorre em todas ou em apenas algumas delas?
Os limites de escala e redução são diferentes o suficiente?
Suponha que você definiu uma regra para escalar horizontalmente quando a CPU média for maior que 50% durante 50 minutos e reduzir horizontalmente quando a CPU média for menor que 50%. Essa configuração causará um problema de "oscilação" quando o uso da CPU estiver perto desse limite, com as ações de escala constantemente aumentando e diminuindo o tamanho do conjunto. Devido a essa configuração, o serviço de dimensionamento automático tenta impedir as "oscilações", que podem se manifestar como o impedimento do dimensionamento. Portanto, garanta que seus limites de expansão e redução sejam diferentes o suficiente para que exista algum espaço entre os dimensionamentos.
É possível escalar ou reduzir um tipo de nó? Ajuste a contagem de nós no nível do tipo de nó e verifique se ele foi concluído com êxito. Como escalar um tipo de nó em um cluster gerenciado
Verifique seus recursos Microsoft.ServiceFabric/managedclusters/nodetypes no Azure Resource Explorer
O Azure Resource Explorer é uma ferramenta indispensável de solução de problemas que mostra o estado dos seus recursos do Azure Resource Manager. Clique na sua assinatura e examine o Grupo de Recursos em que você está solucionando problemas. Em provedor de recursos
ServiceFabric/managedclusters/clustername
, procure emNodeTypes
por tipos de nós que você criou e verifique se as propriedades a serem validadasprovisioningState
sãoSucceeded
. Em seguida, vá ao provedor de recursos Microsoft.Insights emclustername
e verifique se as regras de dimensionamento automático estão corretas.Os valores de métrica emitidos são os esperados? Use o
Get-AzMetric
módulo do PowerShell para obter os valores de métrica de um recurso e uma revise
Depois de executar essas etapas, se ainda tiver problemas de dimensionamento automático, experimente os seguintes recursos: Registrar uma solicitação de suporte. Prepare-se para compartilhar o modelo e uma exibição dos dados de desempenho.