Введение в автомасштабирование на управляемых кластерах Service Fabric

Автомасштабирование предоставляет большую эластичность и позволяет добавлять или удалять узлы по запросу на узле дополнительного типа. Подобная автоматическая гибкая реакция на событие снижает расходы на управление и потенциальные последствия для бизнеса за счет мониторинга и оптимизации количества узлов, обслуживающих рабочую нагрузку. Вы настраиваете правила для рабочей нагрузки, а автомасштабирование занимается всем остальным. При достижении определенных порогов задействуются правила автомасштабирования для настройки емкости типа узла. Автомасштабирование можно включить, отключить или настроить в любой момент. В этой статье приводится пример развертывания, включения и отключения автомасштабирования, а также настройки политики автомасштабирования.

Требования и поддерживаемые метрики.

  • Для ресурса управляемого кластера Service Fabric параметр apiVersion должен иметь значение 2022-01-01 или выше.
  • Кластер должен быть ценовой категории "Стандартный".
  • Можно настроить только на дополнительном типе узла в кластере.
  • Включив автомасштабирование для типа узла, задайте для свойства vmInstanceCountзначение -1 при повторном развертывании ресурса.
  • Поддерживаются только метрики Azure Monitor.

Примечание

Если вы используете образ ОС Windows со включенной ролью Hyper-V, то есть эта виртуальная машина будет использовать вложенную виртуализацию, метрика доступной памяти будет недоступна, так как драйвер динамической памяти на виртуальной машине будет находиться в остановленном состоянии.

Автомасштабирование необходимо выполнять, если нагрузка на конкретную службу изменяется со временем. Например, такая служба, как шлюз, может масштабироваться на основе количества ресурсов, необходимых для обработки входящих запросов. Рассмотрим пример таких правила масштабирования и будем использовать их далее в этой статье.

  • Если все экземпляры шлюза используют в среднем более 70 %, масштабируйте службу шлюза, добавив еще два экземпляра. Делайте это каждые 30 минут, но не создавайте более двадцати экземпляров.
  • Если все экземпляры шлюза в среднем используют менее 40 % ядер, масштабируйте службу, удалив один экземпляр. Удаляйте экземпляр каждые 30 минут, оставляя при этом не менее трех экземпляров.

Пример развертывания с автомасштабированием

В этом примере мы рассмотрим:

  • создание стандартного номера SKU управляемого кластера Service Fabric с двумя типами узлов NT1 и NT2 по умолчанию.
  • Добавление правил автомасштабирования для дополнительного типа узла NT2.

Примечание

Автомасштабирование типа узла осуществляется на основе метрик узла ЦП VMSS управляемого кластера. Ресурс VMSS автоматически разрешается в шаблоне.

Ниже представлены пошаговые инструкции по настройке кластера с настроенным автомасштабированием.

  1. Создание группы ресурсов в регионе

    Login-AzAccount
    Select-AzSubscription -SubscriptionId $subscriptionid
    New-AzResourceGroup -Name $myresourcegroup -Location $location
    
  2. Создание кластерного ресурса

    Скачайте этот пример управляемого кластера Service Fabric с номером SKU "Стандартный". Выполните эту команду, чтобы развернуть кластерный ресурс:

    $parameters = @{ 
    clusterName = $clusterName
    adminPassword = $VmAdminPassword
    clientCertificateThumbprint = $clientCertificateThumbprint
    } 
    New-AzResourceGroupDeployment -Name "deploy_cluster" -ResourceGroupName $resourceGroupName -TemplateFile .\azuredeploy.json -TemplateParameterObject $parameters -Verbose
    
  3. Настройка и включение правил автомасштабирования для дополнительного типа узла

    Скачайте пример шаблона автомасштабирования управляемого кластера, который будет использоваться для настройки автомасштабирования с помощью следующих команд:

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

Примечание

После завершения этого развертывания дальнейшие развертывания кластерных ресурсов должны задавать для свойства vmInstanceCount значение -1 на дополнительных типах узлов, на которых включены правила автомасштабирования. Это позволит избежать конфликтов развертываний кластеров с автомасштабированием.

Включение или отключение автомасштабирования на дополнительном типе узла

Типы узлов, развернутые управляемым кластером Service Fabric, по умолчанию не позволяют включать автомасштабирование. Автомасштабирование можно включить или отключить в любой момент для каждого типа узла, который настроен и доступен.

Чтобы включить эту функцию, настройте свойство enabled под типом Microsoft.Insights/autoscaleSettings в шаблоне ARM, как показано ниже:

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

Чтобы отключить автомасштабирование, установите значение false.

Удаление правил автомасштабирования

Чтобы удалить политики автомасштабирования для типа узла, можно выполнить следующую команду PowerShell.

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

Настройка политик для автомасштабирования

По умолчанию управляемый кластер Service Fabric не настраивает политики автомасштабирования. Политики автомасштабирования необходимо настроить для любых действий масштабирования, которые могут выполняться на базовых ресурсах.

В следующем примере будет задана политика, согласно которой тип узла должен иметь не менее 3 узлов, но допускать масштабирование до 20 узлов. Она активирует увеличение масштаба, если средний объем использования ресурсов ЦП составляет 70 % за последние 30 минут со степенью детализации в 1 минуту. Она активирует уменьшение масштаба, если средний объем использования ресурсов ЦП составляет менее 40 % за последние 30 минут со степенью детализации в 1 минуту.

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

Можно скачать этот шаблон ARM, чтобы включить автомасштабирование. Это шаблон содержит представленный выше пример.

Просмотр настроенных определений автомасштабирования ресурса управляемого кластера

Просмотреть настроенные параметры автомасштабирования можно с помощью обозревателя ресурсов Azure.

  1. Откройте обозреватель ресурсов Azure.

  2. Перейдите к subscriptions ->SubscriptionName ->resource group ->microsoft.insights ->autoscalesettings -> имя политики автомасштабирования: например, sfmc01-NT2.

    В дереве навигации отобразится примерно следующее:

    Представление в виде дерева в обозревателе ресурсов Azure

  3. Справа можно просмотреть полное определение этой конфигурации автомасштабирования.

    В данном примере в конфигурации автомасштабирования используется правило горизонтального увеличения и умеьшения масштаба на основе загрузки ЦП в процентах.

    Сведения об автомасштабировании примера типа узла в обозревателе ресурсов Azure

Устранение неполадок

Необходимо учитывать следующие факторы.

  • Просмотрите события автомасштабирования, которые запускаются для дополнительных типов узлов управляемых кластеров.

    1. Перейдите к журналу действий кластера.
    2. Просмотрите журнал действий для завершенной операции автомасштабирования.
  • Сколько виртуальных машин настроено для типа узла? Выполняется ли рабочая нагрузка на всех узлах или только на некоторых?

  • Отличаются ли пороговые значения для увеличения и уменьшения масштаба?

    Предположим, что вы установили такие правила: горизонтально увеличивать масштаб, если средняя загрузка ЦП в течение пяти минут превышает 50 %; горизонтально уменьшать масштаб, если средняя загрузка ЦП меньше 50 %. Такая конфигурация приводит к нестабильности. Когда загрузка ЦП приблизится к пороговому значению, действия по увеличению и уменьшению масштаба будут выполняться постоянно, непрерывно изменяя размер набора. Служба автомасштабирования пытается предотвратить такое поведение, и в результате масштабирование может не выполняться вовсе. Поэтому убедитесь, что пороговые значения для действий по увеличению и уменьшению масштаба ощутимо отличаются.

  • Можно ли горизонтально уменьшить масштаб типа узла? Настройте количество узлов на уровне типа узла и убедитесь, что операция успешно завершена. Масштабирование типа узла в управляемом кластере

  • Проверьте ресурсы Microsoft.ServiceFabric/managedclusters/nodetypes и Microsoft.Insights в обозревателе ресурсов Azure.

    Обозреватель ресурсов Azure — это незаменимый инструмент для устранения неполадок, в котором отображается состояние ресурсов Azure Resource Manager. Откройте свою подписку и обратите внимание на группу ресурсов, в которой вы устраняете неполадки. В области поставщика ресурсов ServiceFabric/managedclusters/clustername найдите в разделе NodeTypes созданные вами типы узлов проверьте их свойства. Свойство provisioningState должно иметь значение Succeeded. Затем перейдите к поставщику ресурса Microsoft.Insights в clustername и проверьте, правильно ли там указаны правила автомасштабирования.

  • Соответствуют ли сформированные значения метрик ожиданиям? Используйте Get-AzMetricмодуль PowerShell для получения значений метрик ресурса и проверки.

Если после выполнения этих действий по-прежнему возникают проблемы автомасштабирования, можно попробовать найти решение в следующих ресурсах: Регистрация запроса на поддержку. Подготовьте шаблон и представление данных о производительности, чтобы предоставить их.

Дальнейшие действия