Udostępnij za pośrednictwem


Wprowadzenie do skalowania automatycznego w klastrach zarządzanych usługi Service Fabric

Skalowanie automatyczne zapewnia dużą elastyczność i umożliwia dodawanie lub zmniejszanie węzłów na żądanie w przypadku typu węzła pomocniczego. To zautomatyzowane i elastyczne zachowanie zmniejsza obciążenie związane z zarządzaniem i potencjalnym wpływem na działalność biznesową przez monitorowanie i optymalizowanie liczby węzłów obsługujących obciążenie. Reguły dla obciążenia można skonfigurować i umożliwić skalowanie automatyczne do obsługi reszty. Gdy te zdefiniowane progi zostaną spełnione, reguły autoskalowania podejmują działania w celu dostosowania pojemności typu węzła. Skalowanie automatyczne można włączać, wyłączać lub konfigurować w dowolnym momencie. W tym artykule przedstawiono przykładowe wdrożenie, sposób włączania lub wyłączania skalowania automatycznego oraz konfigurowania przykładowych zasad skalowania automatycznego.

Wymagania i obsługiwane metryki:

  • Wersja interfejsu API zasobów klastra zarządzanego usługi Service Fabric powinna mieć wartość 2022-01-01 lub nowszą.
  • Jednostka SKU klastra musi być w warstwie Standardowa.
  • Można skonfigurować tylko w typie węzła pomocniczego w klastrze.
  • Po włączeniu autoskalowania dla typu węzła należy skonfigurować vmInstanceCount właściwość do -1 podczas ponownego wdrażania zasobu.
  • Obsługiwane są tylko opublikowane metryki usługi Azure Monitor.

Uwaga

Jeśli używasz obrazu systemu operacyjnego Windows z włączoną rolą funkcji Hyper-V, tj. Maszyna wirtualna zostanie skonfigurowana do wirtualizacji zagnieżdżonej. Metryka dostępnej pamięci nie będzie dostępna, ponieważ sterownik pamięci dynamicznej na maszynie wirtualnej będzie w stanie zatrzymania.

Typowy scenariusz, w którym skalowanie automatyczne jest przydatne, polega na tym, że obciążenie określonej usługi różni się w czasie. Na przykład usługa taka jak brama może być skalowana na podstawie ilości zasobów niezbędnych do obsługi żądań przychodzących. Przyjrzyjmy się przykładowi tego, jak mogą wyglądać te reguły skalowania i użyjemy ich w dalszej części artykułu:

  • Jeśli wszystkie wystąpienia bramy używają średnio ponad 70%, przeprowadź skalowanie usługi bramy w poziomie przez dodanie dwóch kolejnych wystąpień. Zrób to co 30 minut, ale nigdy nie ma więcej niż dwudziestu wystąpień w sumie.
  • Jeśli wszystkie wystąpienia bramy używają średnio mniej niż 40% rdzeni, przeprowadź skalowanie usługi, usuwając jedno wystąpienie. Zrób to co 30 minut, ale nigdy nie ma mniej niż trzech wystąpień w sumie.

Przykładowe wdrożenie automatycznego skalowania

W tym przykładzie przedstawiono następujące kroki:

  • Tworzenie klastra zarządzanego usługi Service Fabric w warstwie Standardowa z dwoma typami węzłów NT1 i NT2 domyślnie.
  • Dodawanie reguł autoskalowania do typu węzła pomocniczego, NT2.

Uwaga

Automatyczne skalowanie typu węzła odbywa się na podstawie metryk hosta zarządzanego klastra VMSS. Zasób zestawu skalowania maszyn wirtualnych jest automatycznie rozsyłany w szablonie.

Poniższy krok po kroku przeprowadzi Cię przez proces konfigurowania klastra ze skonfigurowanym autoskalowaniem.

  1. Tworzenie grupy zasobów w regionie

    Login-AzAccount
    Select-AzSubscription -SubscriptionId $subscriptionid
    New-AzResourceGroup -Name $myresourcegroup -Location $location
    
  2. Tworzenie zasobu klastra

    Pobierz ten przykładowy przykładowy klaster zarządzany usługi Service Fabric w warstwie Standardowa, wykonaj to polecenie, aby wdrożyć zasób klastra:

    $parameters = @{ 
    clusterName = $clusterName
    adminPassword = $VmAdminPassword
    clientCertificateThumbprint = $clientCertificateThumbprint
    } 
    New-AzResourceGroupDeployment -Name "deploy_cluster" -ResourceGroupName $resourceGroupName -TemplateFile .\azuredeploy.json -TemplateParameterObject $parameters -Verbose
    
  3. Konfigurowanie i włączanie reguł skalowania automatycznego w typie węzła pomocniczego

    Pobierz przykładowy szablon automatycznego skalowania klastra zarządzanego, którego użyjesz do skonfigurowania skalowania automatycznego przy użyciu następujących poleceń:

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

Uwaga

Po zakończeniu tego wdrożenia przyszłe wdrożenia zasobów klastra powinny ustawić vmInstanceCount właściwość na -1 wartość w przypadku typów węzłów pomocniczych z włączonymi regułami automatycznego skalowania. Dzięki temu wdrożenia klastra nie powodują konfliktu z autoskalowaniem.

Włączanie lub wyłączanie skalowania automatycznego w typie węzła pomocniczego

Typy węzłów wdrożone przez klaster zarządzany usługi Service Fabric domyślnie nie umożliwiają skalowania automatycznego. Skalowanie automatyczne można włączać lub wyłączać w dowolnym momencie według typu węzła, które są skonfigurowane i dostępne.

Aby włączyć tę funkcję, skonfiguruj enabled właściwość w obszarze typu Microsoft.Insights/autoscaleSettings w szablonie usługi ARM, jak pokazano poniżej:

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

Aby wyłączyć skalowanie automatyczne, ustaw wartość na false

Usuwanie reguł skalowania automatycznego

Aby usunąć wszystkie ustawienia zasad skalowania automatycznego dla typu węzła, można uruchomić następujące polecenie programu PowerShell.

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

Ustawianie zasad skalowania automatycznego

Klaster zarządzany usługi Service Fabric domyślnie nie konfiguruje żadnych zasad skalowania automatycznego. Zasady skalowania automatycznego muszą być skonfigurowane, aby wszystkie akcje skalowania miały miejsce w zasobach bazowych.

Poniższy przykład ustawi zasady dla nodeType2Name co najmniej 3 węzłów, ale umożliwiają skalowanie do 20 węzłów. Spowoduje to wyzwolenie skalowania w górę, gdy średnie użycie procesora CPU wynosi 70% w ciągu ostatnich 30 minut z 1 minutą szczegółowości. Spowoduje to wyzwolenie skalowania w dół, gdy średnie użycie procesora CPU wynosi poniżej 40% w ciągu ostatnich 30 minut z 1 minutą szczegółowości.

    "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"
                                }
                            }
                            ]
                    }
                    ]
                }
            }
        
    ]                           

Możesz pobrać ten szablon usługi ARM, aby włączyć skalowanie automatyczne, które zawiera powyższy przykład

Wyświetlanie skonfigurowanych definicji automatycznego skalowania zasobu klastra zarządzanego

Skonfigurowane ustawienia skalowania automatycznego można wyświetlić przy użyciu eksploratora zasobów platformy Azure.

  1. Przejdź do Eksploratora zasobów platformy Azure

  2. Przejdź do subscriptions pozycji ->SubscriptionName ->>microsoft.insightsresource group ->autoscalesettings - - Nazwa> zasad autoskalowania: np. . sfmc01-NT2

    Zobaczysz coś podobnego do tego w drzewie nawigacji:

    Przykładowy widok drzewa usługi Azure Resource Explorer

  3. Po prawej stronie możesz wyświetlić pełną definicję tego ustawienia autoskalowania.

    W tym przykładzie skalowanie automatyczne jest konfigurowane przy użyciu reguły skalowania w poziomie opartego na procesorze CPU i skalowania w poziomie.

    Przykładowe szczegóły skalowania automatycznego typu węzła w usłudze Azure Resource Explorer

Rozwiązywanie problemów

Oto kilka rzeczy, które warto przemyśleć:

  • Przejrzyj zdarzenia autoskalowania wyzwalane względem typów węzłów pomocniczych klastrów zarządzanych

    1. Przejdź do dziennika aktywności klastra
    2. Przejrzyj dziennik aktywności dla ukończonej operacji skalowania automatycznego skalowania w górę/w dół
  • Ile maszyn wirtualnych jest skonfigurowanych dla typu węzła i czy obciążenie występuje na wszystkich z nich, czy tylko niektóre?

  • Czy progi skalowania i skalowania w poziomie są wystarczająco różne?

    Załóżmy, że ustawiono regułę skalowania w poziomie, gdy średnie użycie procesora CPU jest większe niż 50% w ciągu pięciu minut, i skalowanie w poziomie, gdy średnia wartość procesora CPU jest mniejsza niż 50%. To ustawienie spowodowałoby problem z "flappingiem", gdy użycie procesora CPU zbliża się do progu, a akcje skalowania stale rosną i zmniejszają rozmiar zestawu. Z powodu tego ustawienia usługa autoskalowania próbuje zapobiec "flappingowi", co może manifestować się jako nieskalowanie. Dlatego upewnij się, że progi skalowania w poziomie i skalowania w poziomie są wystarczająco różne, aby umożliwić pewne odstępy między skalowaniem.

  • Czy można skalować w poziomie lub w poziomie typ węzła? Dostosuj liczbę węzłów na poziomie typu węzła i upewnij się, że został on ukończony pomyślnie. Jak skalować typ węzła w klastrze zarządzanym

  • Sprawdź zasoby Microsoft.ServiceFabric/managedclusters/nodetypes i Microsoft.Insights w Eksploratorze zasobów platformy Azure

    Eksplorator zasobów platformy Azure to niezbędne narzędzie do rozwiązywania problemów, które pokazuje stan zasobów usługi Azure Resource Manager. Kliknij swoją subskrypcję i zapoznaj się z grupą zasobów, którą rozwiązujesz. W obszarze dostawcy ServiceFabric/managedclusters/clustername zasobów poszukaj NodeTypes utworzonych typów węzłów i sprawdź właściwości, aby zweryfikować provisioningState wartość .Succeeded Następnie przejdź do dostawcy zasobów Microsoft.Insights w obszarze clustername i sprawdź, czy reguły skalowania automatycznego wyglądają prawidłowo.

  • Czy emitowane wartości metryk są zgodnie z oczekiwaniami? Użyj modułu Get-AzMetric programu PowerShell, aby uzyskać wartości metryk zasobu i przejrzeć

Po wykonaniu tych kroków, jeśli nadal występują problemy ze skalowaniem automatycznym, możesz wypróbować następujące zasoby: Rejestrowanie wniosku o pomoc techniczną. Przygotuj się do udostępnienia szablonu i widoku danych wydajności.

Następne kroki