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
iNT2
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.
Tworzenie grupy zasobów w regionie
Login-AzAccount Select-AzSubscription -SubscriptionId $subscriptionid New-AzResourceGroup -Name $myresourcegroup -Location $location
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
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.
Przejdź do Eksploratora zasobów platformy Azure
Przejdź do
subscriptions
pozycji ->SubscriptionName
->>microsoft.insights
resource group
->autoscalesettings
- - Nazwa> zasad autoskalowania: np. .sfmc01-NT2
Zobaczysz coś podobnego do tego w drzewie nawigacji:
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.
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
- Przejdź do dziennika aktywności klastra
- 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 poszukajNodeTypes
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 obszarzeclustername
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.