Condividi tramite


Introduzione alla scalabilità automatica nei cluster gestiti di Service Fabric

La scalabilità automatica offre un'elevata elasticità e consente l'aggiunta o la riduzione dei nodi su richiesta in un tipo di nodo secondario. Questo comportamento automatizzato ed elastico riduce il sovraccarico di gestione e il potenziale impatto aziendale monitorando e ottimizzando il numero di nodi che consentono di gestire il carico di lavoro. È possibile configurare le regole per il carico di lavoro e consentire la gestione automatica del resto. Quando vengono soddisfatte le soglie definite, le regole di scalabilità automatica agiscono per regolare la capacità del tipo di nodo. La scalabilità automatica può essere abilitata, disabilitata o configurata in qualsiasi momento. Questo articolo fornisce un esempio di distribuzione, come abilitare o disabilitare la scalabilità automatica e come configurare un criterio di scalabilità automatica di esempio.

Requisiti e metriche supportate:

  • La versione API della risorsa cluster gestito di Service Fabric deve essere 2022-01-01 o successiva.
  • Lo SKU del cluster deve essere Standard.
  • Può essere configurato solo in un tipo di nodo secondario nel cluster.
  • Dopo aver abilitato la scalabilità automatica per un tipo di nodo, configurare la proprietà vmInstanceCount su -1 durante la ridistribuzione della risorsa.
  • Sono supportate solo le metriche pubblicate di Monitoraggio di Azure.

Nota

Se si usa l'immagine del sistema operativo Windows con il ruolo Hyper-V abilitato, ad esempio. La macchina virtuale verrà configurata per la virtualizzazione annidata, la metrica memoria disponibile non sarà disponibile, perché il driver di memoria dinamica all'interno della macchina virtuale sarà in uno stato arrestato.

Uno scenario comune in cui la scalabilità automatica è utile è quando il carico su un determinato servizio varia nel tempo. Ad esempio, un servizio quale un gateway può essere ridimensionato in base all'ammontare delle risorse necessarie per gestire le richieste in ingresso. Di seguito è riportato un esempio dell'aspetto delle regole di ridimensionamento che verranno usate più avanti nell'articolo:

  • Se tutte le istanze del gateway usano in media più del 70%, ridimensionare il servizio gateway aggiungendo altre due istanze. Eseguire questa operazione ogni 30 minuti, ma non avere mai più di venti istanze in totale.
  • Se tutte le istanze del gateway usano in media meno del 40% di core, ridimensionare il servizio rimuovendo un'istanza. Eseguire questa operazione ogni 30 minuti, ma non avere mai meno di tre istanze in totale.

Distribuzione di scalabilità automatica di esempio

Questo esempio illustra in dettaglio:

  • Creazione di un cluster gestito di Service Fabric SKU Standard con due tipi di nodo, NT1 e NT2 per impostazione predefinita.
  • Aggiunta di regole di scalabilità automatica al tipo di nodo secondario, NT2.

Nota

La scalabilità automatica del tipo di nodo viene eseguita in base alle metriche dell'host DELLA CPU del cluster gestito. La risorsa VMSS viene risolta in modo automatico nel modello.

Di seguito vengono fornite istruzioni dettagliate per la configurazione di un cluster con scalabilità automatica configurata.

  1. Creare un gruppo di risorse in un'area

    Login-AzAccount
    Select-AzSubscription -SubscriptionId $subscriptionid
    New-AzResourceGroup -Name $myresourcegroup -Location $location
    
  2. Creare la risorsa Cluster

    Scaricare questo esempio di cluster gestito di Service Fabric SKU Standard Eseguire questo comando per distribuire la risorsa cluster:

    $parameters = @{ 
    clusterName = $clusterName
    adminPassword = $VmAdminPassword
    clientCertificateThumbprint = $clientCertificateThumbprint
    } 
    New-AzResourceGroupDeployment -Name "deploy_cluster" -ResourceGroupName $resourceGroupName -TemplateFile .\azuredeploy.json -TemplateParameterObject $parameters -Verbose
    
  3. Configurare e abilitare le regole di scalabilità automatica in un tipo di nodo secondario

    Scaricare il modello di esempio di scalabilità automatica del cluster gestito che verrà usato per configurare la scalabilità automatica con i comandi seguenti:

    $parameters = @{ 
    clusterName = $clusterName
    }
    New-AzResourceGroupDeployment -Name "deploy_autoscale" -ResourceGroupName $resourceGroupName -TemplateFile .\sfmc-deploy-autoscale.json -TemplateParameterObject $parameters -Verbose 
    

Nota

Al termine della distribuzione, le distribuzioni future delle risorse cluster devono impostare la proprietà vmInstanceCount su -1 nei tipi di nodo secondari con regole di scalabilità automatica abilitate. In questo modo, le distribuzioni del cluster non sono in conflitto con la scalabilità automatica.

Abilitare o disabilitare la scalabilità automatica in un tipo di nodo secondario

I tipi di nodo distribuiti dal cluster gestito di Service Fabric non abilitano la scalabilità automatica per impostazione predefinita. La scalabilità automatica può essere abilitata o disabilitata in qualsiasi momento, per tipo di nodo, configurata e disponibile.

Per abilitare questa funzionalità, configurare la proprietà enabled nel tipo Microsoft.Insights/autoscaleSettings in un modello di Resource Manager, come illustrato di seguito:

    "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,
            ...

Per disabilitare la scalabilità automatica, impostare il valore su false

Eliminare le regole di scalabilità automatica

Per eliminare qualsiasi configurazione dei criteri di scalabilità automatica per un tipo di nodo, è possibile eseguire il comando di PowerShell seguente.

Remove-AzResource -ResourceId "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/microsoft.insights/autoscalesettings/$name" -Force

Impostare i criteri per la scalabilità automatica

Un cluster gestito di Service Fabric non configura alcun criterio per la scalabilità automatica per impostazione predefinita. I criteri di scalabilità automatica devono essere configurati per qualsiasi azione di ridimensionamento nelle risorse sottostanti.

L'esempio seguente imposta un criterio affinché nodeType2Name sia almeno 3 nodi, ma consente il ridimensionamento fino a 20 nodi. Verrà attivata la scalabilità verticale quando l'utilizzo medio della CPU è del 70% negli ultimi 30 minuti con granularità di 1 minuto. Verrà attivato il ridimensionamento quando l'utilizzo medio della CPU è inferiore al 40% per gli ultimi 30 minuti con granularità di 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"
                                }
                            }
                            ]
                    }
                    ]
                }
            }
        
    ]                           

È possibile scaricare questo modello di Resource Manager per abilitare la scalabilità automatica che contiene l'esempio precedente

Visualizzare le definizioni di scalabilità automatica configurate della risorsa cluster gestita

È possibile visualizzare le impostazioni di scalabilità automatica configurate usando Esplora risorse di Azure.

  1. Passare a Esplora risorse di Azure

  2. Passare a subscriptions ->SubscriptionName ->resource group ->microsoft.insights ->autoscalesettings ->Nome dei criteri di scalabilità automatica, ad esempio.sfmc01-NT2

    Nell'albero di spostamento verrà visualizzato un aspetto simile al seguente:

    Visualizzazione albero di esempio di Esplora risorse di Azure

  3. Sul lato destro è possibile visualizzare la definizione completa di questa impostazione di ridimensionamento automatico.

    In questo esempio la scalabilità automatica viene configurata con una regola di scalabilità orizzontale e scalabilità orizzontale basata sulla CPU.

    Dettagli della scalabilità automatica del tipo di nodo di esempio di Esplora risorse di Azure

Risoluzione dei problemi

Alcuni aspetti da considerare:

  • Esaminare gli eventi di scalabilità automatica attivati nei tipi di nodo secondari dei cluster gestiti

    1. Passare al log attività del cluster
    2. Esaminare il log attività per l'operazione di aumento/riduzione della scalabilità automatica completata
  • Quante macchine virtuali sono configurate per il tipo di nodo e il carico di lavoro si verifica su tutti o solo alcuni?

  • Le soglie di aumento e riduzione del numero di istanze sono sufficientemente diverse?

    Si supponga di impostare una regola per aumentare il numero di istanze quando l'uso medio della CPU è superiore al 50% in cinque minuti e per ridurre il numero di istanze quando l'uso medio della CPU è inferiore al 50%. Questa impostazione può provocare un problema di instabilità quando l'uso della CPU si avvicina a tale soglia e le azioni di ridimensionamento devono aumentare e ridurre costantemente le dimensioni del set. Il servizio di scalabilità automatica prova quindi a risolvere l'instabilità e questo può risolversi in un mancato ridimensionamento. Assicurarsi che le soglie di aumento e riduzione del numero di istanze siano sufficientemente diverse per consentire le azioni di ridimensionamento.

  • È possibile aumentare o ridurre il numero di istanze di un tipo di nodo? Modificare il numero di nodi a livello di tipo di nodo e assicurarsi che venga completato correttamente. Come ridimensionare un tipo di nodo in un cluster gestito

  • Controllare le risorse Microsoft.ServiceFabric/managedclusters/nodetypes e Microsoft.Insights in Esplora risorse di Azure

    Esplora risorse di Azure è uno strumento di risoluzione dei problemi indispensabile che mostra lo stato delle risorse di Azure Resource Manager. Fare clic sulla sottoscrizione ed esaminare il gruppo di risorse di cui si sta provando a risolvere i problemi. Nel provider di risorse ServiceFabric/managedclusters/clustername cercare in NodeTypes i tipi di nodo creati e controllare le proprietà per verificare che provisioningState sia Succeeded. Accedere quindi al provider di risorse Microsoft.Insights in clustername e verificare lo stato delle regole di scalabilità automatica.

  • I valori delle metriche vengono generati come previsto? Usare il Get-AzMetric modulo powerShell per ottenere i valori delle metriche di una risorsa ed esaminare

Dopo aver eseguito questi passaggi, se si verificano ancora problemi di scalabilità automatica, è possibile provare le risorse seguenti: Registrare una richiesta di supporto. Sarà necessario, condividere il modello e la visualizzazione dei dati sulle prestazioni.

Passaggi successivi