Partilhar via


Introdução ao dimensionamento automático em clusters gerenciados do Service Fabric

O dimensionamento automático proporciona grande elasticidade e permite a adição ou 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 potencial impacto nos negócios, monitorando e otimizando o número de nós que atendem sua carga de trabalho. Você configura regras para sua carga de trabalho e permite que o dimensionamento automático lide com o resto. Quando esses limites definidos são atingidos, as regras de dimensionamento automático tomam medidas para ajustar a capacidade do seu tipo de nó. O dimensionamento automático pode ser ativado, desativado 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 suportadas:

  • O recurso de cluster gerenciado do Service Fabric apiVersion deve ser 2022-01-01 ou posterior.
  • A SKU do cluster deve ser Padrão.
  • Só pode ser configurado em um tipo de nó secundário no cluster.
  • Depois de habilitar o dimensionamento automático para um tipo de nó, configure vmInstanceCount a propriedade para -1 ao reimplantar o recurso.
  • Apenas as métricas publicadas do Azure Monitor são suportadas.

Nota

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, uma vez que o driver de memória dinâmica dentro da VM estará em um estado interrompido.

Um cenário comum em que o dimensionamento automático é útil é quando a carga em um determinado serviço 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 vamos usá-las mais adiante no artigo:

  • Se todas as instâncias do meu gateway estiverem usando mais de 70% em média, dimensione o serviço de gateway 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 estiverem usando menos de 40% de núcleos em média, dimensione o serviço removendo uma instância. Faça isso a cada 30 minutos, mas nunca tenha menos de três instâncias no total.

Exemplo de implantação em escala automática

Este exemplo explicará:

  • Criação de um cluster gerenciado do SKU Service Fabric padrão com dois tipos NT1 de nó e NT2 por padrão.
  • Adicionando regras de dimensionamento automático ao tipo de nó secundário, NT2.

Nota

O dimensionamento automático do tipo de nó é feito com base nas métricas de host da CPU VMSS do cluster gerenciado. O recurso VMSS é resolvido automaticamente no modelo.

O seguinte irá levá-lo passo a passo através da configuração de um cluster com autoscale configurado.

  1. Criar grupo de recursos em uma região

    Login-AzAccount
    Select-AzSubscription -SubscriptionId $subscriptionid
    New-AzResourceGroup -Name $myresourcegroup -Location $location
    
  2. Criar recurso de cluster

    Baixe este exemplo Exemplo de cluster gerenciado do SKU Standard Service Fabric Execute 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
    
  3. Configurar e habilitar regras de dimensionamento automático em um tipo de nó secundário

    Baixe o modelo de exemplo de dimensionamento automático de cluster gerenciado que você usará 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 
    

Nota

Após a conclusão dessa implantação, as futuras implantações de recursos de cluster deverão definir a vmInstanceCount propriedade como -1 em tipos de nó secundário que tenham 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 pelo cluster gerenciado do Service Fabric não habilitam o dimensionamento automático por padrão. O dimensionamento automático pode ser ativado ou desativado a qualquer momento, por tipo de nó, que estejam configurados e disponíveis.

Para habilitar esse recurso, configure a enabled propriedade sob o tipo Microsoft.Insights/autoscaleSettings em um modelo 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 desativar o dimensionamento automático, defina o valor como false

Excluir regras de dimensionamento automático

Para excluir qualquer configuração de políticas de dimensionamento automático para um tipo de nó, você pode executar o seguinte comando do PowerShell.

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 de dimensionamento automático por padrão. As políticas de dimensionamento automático devem ser configuradas para que quaisquer ações de dimensionamento ocorram nos recursos subjacentes.

O exemplo a seguir definirá uma política para nodeType2Name ser pelo menos 3 nós, mas permitirá o dimensionamento de até 20 nós. Ele acionará o escalonamento quando o uso médio da CPU for de 70% nos últimos 30 minutos com granularidade de 1 minuto. Ele acionará a redução quando o uso médio da CPU estiver abaixo 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 ARM para habilitar o dimensionamento automático que contém o exemplo acima

Exibir definições configuradas de dimensionamento automático do recurso de cluster gerenciado

Você pode exibir as configurações de dimensionamento automático definidas usando o Gerenciador de Recursos do Azure.

  1. Ir para o Azure Resource Explorer

  2. 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:

    Vista de árvore de exemplo do Azure Resource Explorer

  3. No lado direito, você pode visualizar 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 expansão baseada em % de CPU.

    Detalhes de escala automática do tipo de nó de exemplo do Azure Resource Explorer

Resolução de Problemas

Alguns aspetos a ter em conta:

  • Revisar eventos de dimensionamento automático que estão sendo acionados em tipos de nó secundário de clusters gerenciados

    1. Ir para o registo de atividades do cluster
    2. Revisar o log de atividades para aumentar ou diminuir a escala automática da operação concluída
  • Quantas VMs estão configuradas para o tipo de nó e a carga de trabalho está ocorrendo em todas elas ou apenas em algumas?

  • Os seus limiares de expansão e de expansão são suficientemente diferentes?

    Suponha que você defina uma regra para expandir quando a CPU média for maior que 50% em cinco minutos e para dimensionar quando a CPU média for inferior a 50%. Essa configuração causaria um problema de "batimento" quando o uso da CPU está perto do limite, com 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 evitar o "batimento", que pode se manifestar como não dimensionamento. Portanto, certifique-se de que seus limites de expansão e expansão sejam suficientemente diferentes para permitir algum espaço entre o dimensionamento.

  • É possível dimensionar ou reduzir um tipo de nó? Ajuste a contagem de nós no nível do tipo de nó e certifique-se de que ela seja concluída com êxito. Como dimensionar um tipo de nó em um cluster gerenciado

  • Verifique os recursos Microsoft.ServiceFabric/managedclusters/nodetypes e Microsoft.Insights no Azure Resource Explorer

    O Azure Resource Explorer é uma ferramenta de solução de problemas indispensável que mostra o estado dos recursos do Azure Resource Manager. Clique na sua subscrição e veja o Grupo de Recursos que está a resolver. ServiceFabric/managedclusters/clustername No provedor de recursos, procure os NodeTypes tipos de nó que você criou e verifique as propriedades para validar provisioningState é Succeeded. Em seguida, vá para o provedor de recursos Microsoft.Insights em clustername e verifique se as regras de dimensionamento automático parecem corretas.

  • Os valores métricos emitidos estão conforme o esperado? Use o Get-AzMetric módulo PowerShell para obter os valores métricos de um recurso e revisar

Depois de passar por essas etapas, se ainda estiver tendo problemas de dimensionamento automático, tente os seguintes recursos: Registrar uma solicitação de suporte. Esteja preparado para compartilhar o modelo e uma exibição de seus dados de desempenho.

Próximos passos