Service Fabric 托管群集上的自动缩放简介

自动缩放可提供极佳的弹性,并可在辅助节点类型上按需添加或减少节点。 通过监视和优化为工作负载提供服务的节点数量,此自动和弹性行为可减少管理开销和潜在的业务影响。 你只需为工作负载配置规则,其余由自动缩放处理。 当满足这些定义的阈值时,自动缩放规则会采取操作来调整节点类型的容量。 可随时启用、禁用或配置自动缩放。 本文提供示例部署,如何启用或禁用自动缩放,以及如何配置示例自动缩放策略。

要求和支持的指标:

  • Service Fabric 托管群集资源 apiVersion 应为 2022-01-01 或更高版本。
  • 群集 SKU 必须为标准。
  • 仅可在群集中的辅助节点类型上配置。
  • 为节点类型启用自动缩放后,在重新部署资源时将 vmInstanceCount 属性配置为 -1
  • 仅支持 Azure Monitor 已发布的指标

注意

如果使用启用了 Hyper-V 角色的 Windows OS 映像,即将为嵌套虚拟化配置 VM,可用内存指标将不可用,因为 VM 内的动态内存驱动程序将进入停止状态。

特定服务上的负载随时间变化是自动缩放非常实用的一个常见场景。 例如,网关等服务可根据处理传入请求所需的资源量进行缩放。 让我们看看这些缩放规则的外观示例,我们将在本文的后面部分使用它们:

  • 如果所有网关实例平均使用 70% 以上,则通过再添加两个实例来扩大网关服务。 每 30 分钟执行一次,但总实例数不能超过 20 个。
  • 如果我的网关的所有实例平均使用少于 40% 核心,则通过删除一个实例来缩小服务。 每 30 分钟执行一次,但总实例数不能少于 3 个。

自动缩放部署示例

此示例将指导完成:

  • 默认情况下,创建具有两个节点类型的标准 SKU Service Fabric 托管群集NT1NT2
  • 向辅助节点类型添加自动缩放规则,NT2

注意

节点类型的自动缩放是根据托管群集 VMSS CPU 主机指标来完成的。 VMSS 资源在模板中为自动解决。

下面将逐步介绍如何设置已配置自动缩放的群集。

  1. 在区域中创建资源组

    Connect-AzAccount -Environment AzureChinaCloud
    Select-AzSubscription -SubscriptionId $subscriptionid
    New-AzResourceGroup -Name $myresourcegroup -Location $location
    
  2. 创建群集资源

    下载此示例标准 SKU Service Fabric 托管群集示例 执行以下命令以部署群集资源:

    $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 托管群集部署的节点类型不启用自动缩放。 可随时启用或禁用自动缩放,每个节点类型已配置且可用。

若要启用此功能,请在 ARM 模板中的类型Microsoft.Insights/autoscaleSettings下配置enabled属性,如下所示:

    "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 个节点。 在过去 30 分钟内的平均 CPU 使用率为 70% 且粒度为 1 分钟时,将触发纵向扩展。 在过去 30 分钟内的平均 CPU 使用率低于 40% 且粒度为 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 资源浏览器
  1. 导航到 subscriptions ->SubscriptionName ->resource group ->microsoft.insights ->autoscalesettings -> 自动缩放策略名称:例如 sfmc01-NT2

    导航树中将显示类似于下面的内容:

    Azure Resource Explorer example tree view

  2. 在右侧可以查看此自动缩放设置的完整定义。

    在此示例中,自动缩放基于横向扩展和横向缩减规则配置了 CPU%。

    Azure Resource Explorer example node type autoscale details

疑难解答

应考虑的一些事项:

  • 查看针对托管群集的辅助节点类型触发的自动缩放事件

    1. 转到群集活动日志
    2. 查看自动缩放的活动日志纵向扩展/缩减已完成操作
  • 为节点类型配置了多少个虚拟机,工作负载在所有 VM 还是只是部分 VM 上发生?

  • 缩小和扩大阈值的差值是否足够大?

    假设你设置了一个规则,指示当平均 CPU 在 5 分钟内超过 50% 时横向扩展,当平均 CPU 低于 50% 时横向缩减。 在 CPU 使用率接近此阈值时,此设置会导致“摇摆”问题,缩放操作不断地增加和减少集的大小。 由于此设置,自动缩放服务会尝试防止“摇摆”的发生,这可能表现为不缩放。 因此,请确保扩大和缩小阈值的差值要足够大,以允许在缩放之间存在一些空间。

  • 是否可以横向扩展或缩减节点类型? 调整节点类型级别的节点计数,并确保其成功完成。 如何在托管群集上缩放节点类型

  • 在Azure 资源浏览器中查看 ServiceFabric/managedclusters/nodetypes 和 Microsoft.Insights 资源

    Azure 资源浏览器是一个不可或缺的疑难解答工具,它显示 Azure 资源管理器资源的状态。 单击订阅并查看要对其进行故障排除的资源组。 在ServiceFabric/managedclusters/clustername资源提供程序下,查看NodeTypes下创建的节点类型并检查属性,以验证provisioningState是否为Succeeded。 然后,转到clustername下的 Microsoft.Insights 资源提供程序并检查自动缩放规则是否一切正常。

  • 是否按预期发出了指标值? 使用 Get-AzMetricPowerShell 模块来获取资源的指标值并查看

完成这些步骤后,如果仍然存在自动缩放问题,则可以尝试使用以下资源:记录支持请求。 准备共享模板和性能数据的视图。

后续步骤