Service Fabric マネージド クラスターでの自動スケールの概要
自動スケーリングにより、優れた弾力性が得られ、セカンダリ ノード タイプでオンデマンドでノードを追加または縮小できるようになります。 この自動化された柔軟な動作により、ワークロードを処理するノードの数を監視および最適化することで、管理のオーバーヘッドと潜在的なビジネスへの影響が軽減されます。 ワークロードの規則を構成し、残りの部分を自動スケールによって処理できるようにします。 定義したしきい値に達すると、自動スケーリング規則が実行されてノード タイプの容量が調整されます。 自動スケールは、いつでも有効にしたり、無効にしたり、構成したりすることができます。 この記事では、デプロイの例、自動スケールを有効または無効にする方法、および自動スケール ポリシーの例を構成する方法について説明します。
要件とサポートされるメトリクス:
- Service Fabric マネージド クラスター リソースの apiVersion は、2022-01-01 以降である必要があります。
- クラスター SKU は Standard である必要があります。
- は、クラスター内のセカンダリ ノード タイプでのみ構成できます。
- ノードの種類に対して自動スケーリングを有効にした後、リソースを再デプロイするときに
vmInstanceCount
プロパティを-1
に構成します。 - 発行された Azure Monitor メトリクスのみがサポートされます。
Note
Hyper-V の役割が有効になっている Windows OS イメージを使っている場合、つまり VM が入れ子になった仮想化用に構成される場合は、VM 内の動的メモリ ドライバーが停止状態になるため、使用可能なメモリ メトリックは使用できません。
自動スケーリングが役に立つ一般的なシナリオは、特定のサービスにかかる負荷が時間の経過と共に変化する場合です。 たとえば、ゲートウェイなどのサービスは、着信要求を処理するために必要なリソースの量に基づいてスケーリングできます。 これらのスケーリング ルールの例を見てみましょう。これらのルールは、記事の後半で使用します。
- ゲートウェイのすべてのインスタンスが平均して 70% を超えて使用されている場合、インスタンスを 2 つ追加して、ゲートウェイ サービスをスケールアウトします。 これは 30 分ごとに実行されますが、合計で 20 個を超えるインスタンスを持つことはできません。
- ゲートウェイのすべてのインスタンスが平均して 40% 未満のコアを使用している場合は、インスタンスを 1 つ削除することで、サービスをスケールインします。 この操作を 30 分ごとに行いますが、インスタンスの合計数が 3 つより少なくなることはありません。
自動スケーリング デプロイの例
この例では、次の手順を実行します。
- 標準 SKU を作成するには、2 つのノード タイプを持つ Service Fabric マネージド クラスター
NT1
とNT2
を既定で作成します。 - セカンダリ ノード タイプ
NT2
に自動スケーリング規則を追加します。
Note
ノードの種類の自動スケールは、マネージド クラスターの VMSS CPU ホスト メトリックに基づいて行われます。 VMSS リソースは、テンプレートで自動解決されます。
次に、自動スケールが構成されたクラスターの設定手順について説明します。
リージョンにリソース グループを作成する
Login-AzAccount Select-AzSubscription -SubscriptionId $subscriptionid New-AzResourceGroup -Name $myresourcegroup -Location $location
クラスター リソースを作成する
このサンプルの Standard SKU Service Fabric マネージド クラスターのサンプルをダウンロードします。次のコマンドを実行して、クラスター リソースをデプロイします。
$parameters = @{ clusterName = $clusterName adminPassword = $VmAdminPassword clientCertificateThumbprint = $clientCertificateThumbprint } New-AzResourceGroupDeployment -Name "deploy_cluster" -ResourceGroupName $resourceGroupName -TemplateFile .\azuredeploy.json -TemplateParameterObject $parameters -Verbose
セカンダリ ノード タイプで自動スケーリング規則を構成して有効にする
次のコマンドを使用して、自動スケーリングを構成するために使用する、マネージド クラスターの自動スケーリングのサンプル テンプレートをダウンロードします。
$parameters = @{ clusterName = $clusterName } New-AzResourceGroupDeployment -Name "deploy_autoscale" -ResourceGroupName $resourceGroupName -TemplateFile .\sfmc-deploy-autoscale.json -TemplateParameterObject $parameters -Verbose
Note
このデプロイが完了した後、将来のクラスター リソースのデプロイでは、自動スケーリング規則が有効になっているセカンダリ ノード タイプで vmInstanceCount
プロパティを -1
に設定する必要があります。 これにより、クラスター デプロイが自動スケールと競合しないようになります。
セカンダリ ノード タイプで自動スケールを有効または無効にする
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 ノードまでスケールアップできます。 これは、過去 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 Resource Explorer を使用します。
Azure Resource Explorer に移動します
subscriptions
->SubscriptionName
->resource group
->microsoft.insights
->autoscalesettings
-> 自動スケーリング ポリシー名 (sfmc01-NT2
など) に移動します。ナビゲーション ツリーには次のような内容が表示されます。
右側に、この自動スケール設定の定義がすべて表示されます。
この例では、自動スケーリングの構成に CPU% ベースのスケールアウトとスケールイン規則が使用されています。
トラブルシューティング
以下の点を考慮してください。
マネージド クラスターのセカンダリ ノードの種類に対してトリガーされている自動スケール イベントを確認する
- クラスターのアクティビティ ログにアクセスする
- 自動スケールのスケールアップまたはダウン完了操作のアクティビティ ログを確認する
ノードの種類に対して構成されている VM の数はいくつでしょうか。それらのすべてでワークロードが発生しているか、一部のみでしょうか。
スケールインとスケールアウトのしきい値の間に十分な差を確保していますか。
たとえば、平均 CPU 使用率が 5 分間にわたって 50% を超えた場合にスケールアウトし、平均 CPU 使用率が 50% を割り込んだときにスケールインする規則を設定したとします。 この設定は、CPU 使用率がこのしきい値に近付くと、スケール アクションによってセットのサイズが絶え間なく増減される "フラッピング" 問題をよく引き起こします。 この設定が原因で、自動スケーリング サービスはこの "フラッピング" を防止しようとするため、自動スケーリングが実行されなくなる場合があります。 そのため、スケールアウトとスケールインのしきい値の間に十分な差を付けて、自動スケーリングが実行される余裕を確保する必要があります。
ノードの種類をスケールインまたはスケールアウトできますか。 ノードの種類レベルでノードの数を調整し、正常に完了することを確認します。 マネージド クラスターでノードの種類をスケールする方法
Microsoft ServiceFabric/managedclusters/nodetypes と Microsoft を確認します。Azure Resource Explorer 内のリソースのインサイト
Azure Resource Explorer は Azure Resource Manager リソースの状態を表示できるため、トラブルシューティングには欠かせません。 サブスクリプションをクリックし、トラブルシューティングを行うリソース グループを表示します。
ServiceFabric/managedclusters/clustername
リソース プロバイダーの下で、作成したノードの種類のNodeTypes
の下を確認し、検証するprovisioningState
プロパティがSucceeded
であることを確認します。 次に、clustername
の下の Microsoft.Insights リソース プロバイダーに移動し、自動スケーリング規則が適切かどうかを確認します。生成されたメトリック値は期待どおりですか。
Get-AzMetric
PowerShell モジュールを使用して、リソースのメトリック値を取得し、確認します。
これまでの手順を終えても、自動スケーリングに関する問題が解決しない場合は、「サポート リクエストを記録」リソースをご利用ください。 テンプレートと、パフォーマンス データのビューを共有できるように準備しておいてください。