Service Fabric マネージド クラスターでの自動スケールの概要

自動スケーリングにより、優れた弾力性が得られ、セカンダリ ノード タイプでオンデマンドでノードを追加または縮小できるようになります。 この自動化された柔軟な動作により、ワークロードを処理するノードの数を監視および最適化することで、管理のオーバーヘッドと潜在的なビジネスへの影響が軽減されます。 ワークロードの規則を構成し、残りの部分を自動スケールによって処理できるようにします。 定義したしきい値に達すると、自動スケーリング規則が実行されてノード タイプの容量が調整されます。 自動スケールは、いつでも有効にしたり、無効にしたり、構成したりすることができます。 この記事では、デプロイの例、自動スケールを有効または無効にする方法、および自動スケール ポリシーの例を構成する方法について説明します。

要件とサポートされるメトリクス:

  • Service Fabric マネージド クラスター リソースの apiVersion は、2022-01-01 以降である必要があります。
  • クラスター SKU は Standard である必要があります。
  • は、クラスター内のセカンダリ ノード タイプでのみ構成できます。
  • ノード タイプの自動スケーリングを有効にした後、次の nodetype テンプレートを変更して、現在のノード タイプの VM 数が上書きされないようにします。
    • リソースを再デプロイするときにvmInstanceCountするように -1 プロパティを構成します。
    • sku.capacity プロパティを省略します。
  • 発行された Azure Monitor メトリクスのみがサポートされます。

注意

Hyper-V ロールが有効な Windows OS イメージを使用している場合、つまり、仮想マシン (VM) が入れ子になった仮想化用に構成されている場合、VM 内の動的メモリ ドライバーは停止状態になるため、使用可能なメモリ メトリックは使用できません。

自動スケーリングが役に立つ一般的なシナリオは、特定のサービスにかかる負荷が時間の経過と共に変化する場合です。 たとえば、ゲートウェイなどのサービスは、着信要求を処理するために必要なリソースの量に基づいてスケーリングできます。 これらのスケーリング ルールの例を見てみましょう。この記事の後半で使用します。

  • ゲートウェイのすべてのインスタンスで平均で 70 を超える% を使用している場合は、さらに 2 つのインスタンスを追加してゲートウェイ サービスをスケールアウトします。 これは 30 分ごとに実行しますが、合計で 20 個を超えるインスタンスはありません。
  • ゲートウェイのすべてのインスタンスが平均して 40% 未満のコアを使用している場合は、インスタンスを 1 つ削除することで、サービスをスケールインします。 この操作を 30 分ごとに行いますが、インスタンスの合計数が 3 つより少なくなることはありません。

自動スケーリング デプロイの例

この例では、次の手順を実行します。

  • 標準 SKU を作成するには、2 つのノード タイプを持つ Service Fabric マネージド クラスター NT1NT2 を既定で作成します。
  • セカンダリ ノード タイプ NT2 に自動スケーリング規則を追加します。

注意

ノードの種類の自動スケールは、マネージド クラスターの VMSS CPU ホスト メトリックに基づいて行われます。 VMSS リソースは、テンプレートで自動解決されます。

次に、自動スケールが構成されたクラスターの設定手順について説明します。

  1. リージョンにリソース グループを作成する

    Login-AzAccount
    Select-AzSubscription -SubscriptionId $subscriptionid
    New-AzResourceGroup -Name $myresourcegroup -Location $location
    
  2. クラスター リソースを作成する

    このサンプルの Standard 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 のポリシーを少なくとも 3 つのノードに設定しますが、最大 20 個のノードをスケールアップできます。 平均 CPU 使用率が直近 30 分で 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 Resource Explorer を使用します。

  1. Azure Resource Explorer に移動します

  2. subscriptions ->SubscriptionName ->resource group ->microsoft.insights ->autoscalesettings -> 自動スケーリング ポリシー名 (sfmc01-NT2 など) に移動します。

    ナビゲーション ツリーに次のような内容が表示されます。

    Azure Resource Explorer ツリービューの例

  3. 右側に、この自動スケール設定の定義がすべて表示されます。

    この例では、自動スケーリングの構成に CPU% ベースのスケールアウトとスケールイン規則が使用されています。

    Azure Resource Explorer の例: ノード タイプの自動スケールの詳細

トラブルシューティング

以下の点を考慮してください。

  • マネージド クラスターのセカンダリ ノードの種類に対してトリガーされている自動スケール イベントを確認する

    1. クラスターのアクティビティ ログにアクセスする
    2. 自動スケールのスケールをアップ/ダウンする操作が完了したアクティビティログを確認する
  • ノードの種類に対して構成されている VM の数はいくつでしょうか。それらのすべてでワークロードが発生しているか、一部のみでしょうか。

  • スケールインとスケールアウトのしきい値の間に十分な差を確保していますか。

    たとえば、平均 CPU 使用率が 5 分間にわたって 50% を超えた場合にスケールアウトし、平均 CPU 使用率が 50% を割り込んだときにスケールインする規則を設定したとします。 この設定は、CPU 使用率がこのしきい値に近付くと、スケール アクションによってセットのサイズが絶え間なく増減される "フラッピング" 問題をよく引き起こします。 この設定により、自動スケーリング サービスは"フラッピング"を防ぐように試みます。これはスケーリングが発生しない状態として現れることがあります。 そのため、スケールアウトとスケールインのしきい値の間に十分な間隔を設けて、スケーリングに余裕を持たせる必要があります。

  • ノードの種類をスケールインまたはスケールアウトできますか。 ノードの種類レベルでノードの数を調整し、正常に完了することを確認します。 マネージド クラスターでノードの種類をスケールする方法

  • Azure Resource Explorer 内で Microsoft.ServiceFabric/managedclusters/nodetypes と Microsoft.Insights のリソースを確認します。

    Azure Resource Explorer は Azure Resource Manager リソースの状態を表示できるため、トラブルシューティングには欠かせません。 サブスクリプションを選択し、トラブルシューティングを行っているリソース グループを確認します。 ServiceFabric/managedclusters/clustername リソース プロバイダーの下で、作成したノードの種類の NodeTypes の下を確認し、検証する provisioningState プロパティが Succeeded であることを確認します。 次に、clustername の下の Microsoft.Insights リソース プロバイダーに移動し、自動スケーリング規則が適切かどうかを確認します。

  • 出力されたメトリック値は期待どおりですか。 Get-AzMetric PowerShell モジュールを使用して、リソースのメトリック値を取得し、確認します。

これまでの手順を終えても、自動スケーリングに関する問題が解決しない場合は、「サポート リクエストを記録」リソースをご利用ください。 テンプレートと、パフォーマンス データのビューを共有できるように準備しておいてください。

次の手順