Service Fabric 受控叢集自動調整簡介

自動縮放 提供極大的彈性,並允許在次要節點類型上隨時新增或減少節點數量。 這種自動化且彈性的行為透過監控與優化服務您的工作負載節點數量,降低管理負擔及潛在的業務影響。 你要為你的工作負載設定規則,剩下的則讓自動擴展處理。 當這些定義的門檻達到時,自動縮放規則會採取行動調整節點類型的容量。 自動縮放可以隨時啟用、停用或設定。 本文提供一個部署範例,說明如何啟用或停用自動擴展,以及如何設定自動擴展政策範例。

需求與支援指標:

  • Service Fabric 受控叢集資源 apiVersion 應為 2022-01-01 或更新版本。
  • 叢集 SKU 必須是「標準」。
  • 只能在叢集的次要節點類型上配置。
  • 啟用節點類型的自動縮放後,請對以下節點類型範本進行修改,以避免覆蓋目前的節點類型虛擬機數量:
    • 重新部署資源時,將 vmInstanceCount 屬性設為 -1。
    • 省略該 sku.capacity 屬性。
  • 僅支援 Azure 監視器 發佈的指標 。

備註

若使用 Windows 作業系統映像檔啟用 Hyper-V 角色,也就是虛擬機(VM)設定為巢狀虛擬化,則可用記憶體指標將無法使用,因為虛擬機內的動態記憶體驅動程式將處於停止狀態。

自動擴展常見的情境是當特定服務的負載隨時間變化時。 例如,像閘道這樣的服務可以根據處理來電請求所需的資源量進行擴展。 讓我們來看看這些縮放規則可能長什麼樣子,並在文章後面使用它們:

  • 如果我所有閘道實例平均都使用超過 70%,那就透過增加兩個實例來擴展閘道服務。 每 30 分鐘做一次,但總共不要超過 20 次。
  • 如果我所有的閘道實例平均使用不到 40 個% 核心,那就透過移除一個實例來擴展服務。 每30分鐘做一次,但總次數絕不少於三次。

自動擴展部署範例

這個範例說明如下:

  • 建立一個標準 SKU Service Fabric 管理叢集,預設有兩種節點類型 NT1NT2 。
  • 將自動縮放規則加入次要節點類型。 NT2

備註

節點類型的自動擴展是根據管理叢集 VMSS CPU 主機指標來進行的。 範本中的 VMSS 資源會自動解析。

以下將一步步帶你設定一個已設定為自動縮放的叢集。

  1. 在區域內建立資源群組

    Login-AzAccount
    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,並針對已啟用自動調整規則的次要節點類型省略 sku.capacity 屬性,以避免覆寫該節點類型目前的 VM 計數。

啟用或停用次要節點類型的自動縮放

由 Service Fabric 管理叢集部署的節點類型預設不會啟用自動擴展。 自動縮放可以隨時啟用或停用,並且可以針對已配置且可用的節點類型進行設置。

要啟用此功能,請在 ARM 範本中於類型 enabled 下設定屬性 Microsoft.Insights/autoscaleSettings,如下所示:

    "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個節點。 當過去 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資源探索器

  2. 導覽至 subscriptions ->SubscriptionName ->resource group ->microsoft.insights ->autoscalesettings -> 自動調整策略名稱:例如 sfmc01-NT2。

    你應該會在導航樹上看到類似的東西:

    Azure Resource Explorer 範例樹狀圖

  3. 在右側邊,您可以查看此自動調整設定的完整定義。

    在此範例中,自動調整已設定以 CPU% 為基礎的相應增加與相應減少規則。

    Azure 資源瀏覽器範例節點類型自動調整詳細資訊

Troubleshooting

有幾點需要考慮:

  • 檢閱針對受控叢集次要節點類型所觸發的自動調整事件

    1. - 移至叢集活動日誌
    2. 檢閱 Autoscale 相應增加/減少完成作業的活動記錄
  • 有多少台虛擬機器被配置給該節點類型?工作負載是發生在所有虛擬機器上,還是只有某些虛擬機器上?

  • 你們的縮減與擴容門檻有足夠差異嗎?

    假設您設定一個規則:當五分鐘內的平均 CPU 大於 50% 時相應增加,而當五分鐘內的平均 CPU 小於 50% 時相應減少。 當 CPU 使用率接近臨界值時,這個設定會造成「抖動」問題,縮放動作不斷增加或減少集合大小。 由於這項設定,自動調整服務會盡量避免「flapping」,其表現可能是未進行調整。 因此,請確保你的縮放與增量閾值有足夠差異,以留出縮放間的空間。

  • 你能擴展或縮小一個節點類型嗎? 在節點類型層級調整節點數量,並確保成功完成。 如何在受管理叢集上擴展節點類型

  • 請在 Azure 資源總管中檢查你的 Microsoft.ServiceFabric/managedclusters/nodetypes 以及 Microsoft.Insights 的資源

    Azure 資源總管是一個不可或缺的故障排除工具,能顯示你 Azure 資源管理器資源的狀態。 選擇你的訂閱,然後查看你正在排除問題的資源群組。 在 ServiceFabric/managedclusters/clustername 資源提供者下,查找您建立的節點類型 NodeTypes ,然後檢查屬性以驗證 provisioningState 是否為 Succeeded。 接著,進入 clustername 下的 Microsoft.Insights 資源提供者,並檢查自動調整規則是否正確。

  • 你發射的公制值是否如預期? 使用 Get-AzMetricPowerShell 模組取得資源的指標值 並檢視

完成這些步驟後,如果自動縮放仍有問題,可以嘗試以下資源:提交支援請求。 請準備分享範本和您的績效數據概覽。

下一步