Поделиться через


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

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

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

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

Примечание.

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

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

  • Если все экземпляры моего шлюза в среднем используют более 70 %, масштабируйте службу шлюза, добавив два дополнительных экземпляра. Делайте это каждые 30 минут, но не более двадцати раз в общей сложности.
  • Если все экземпляры шлюза в среднем используют менее 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 на дополнительных типах узлов, на которых включены правила автомасштабирования. Это обеспечит отсутствие конфликта развертываний кластеров с автомасштабированием.

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

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

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

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