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

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

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

  • Для ресурса управляемого кластера Service Fabric параметр apiVersion должен иметь значение 2022-01-01 или выше.
  • SKU кластера должен быть 'Стандартный'.
  • Можно настроить только на дополнительном типе узла в кластере.
  • После включения автомасштабирования для типа узла измените следующий шаблон типа узла, чтобы избежать перезаписи текущего количества виртуальных машин типа узла:
    • vmInstanceCount Настройте свойство -1 для повторного развертывания ресурса.
    • Пропустите свойство sku.capacity.
  • Поддерживаются только метрики Azure Monitor.

Примечание.

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

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

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

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

В этом примере описано следующее:

  • Создание управляемого кластера Service Fabric стандартной конфигурации SKU с двумя типами узлов, 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 и не указывать свойство sku.capacity для вторичных типов узлов, для которых включены правила автомасштабирования, чтобы не перезаписать текущее количество виртуальных машин для этого типа узла.

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

Типы узлов, развернутые управляемым кластером 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 не настраивает политики автоматического масштабирования по умолчанию. Политики автомасштабирования необходимо настроить для любых действий масштабирования, которые могут выполняться на базовых ресурсах.

В следующем примере устанавливается политика, согласно которой nodeType2Name должно быть как минимум три узла, и допускается масштабирование до 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 для получения значений метрик ресурса и проверки

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

Следующие шаги