自動スケーリングにより、優れた弾力性が得られ、セカンダリ ノード タイプでオンデマンドでノードを追加または縮小できるようになります。 この自動化された柔軟な動作により、ワークロードを処理するノードの数を監視および最適化することで、管理のオーバーヘッドと潜在的なビジネスへの影響が軽減されます。 ワークロードの規則を構成し、残りの部分を自動スケールによって処理できるようにします。 定義したしきい値に達すると、自動スケーリング規則が実行されてノード タイプの容量が調整されます。 自動スケールは、いつでも有効にしたり、無効にしたり、構成したりすることができます。 この記事では、デプロイの例、自動スケールを有効または無効にする方法、および自動スケール ポリシーの例を構成する方法について説明します。
要件とサポートされるメトリクス:
- 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 マネージド クラスター
NT1とNT2を既定で作成します。 - セカンダリ ノード タイプ
NT2に自動スケーリング規則を追加します。
注意
ノードの種類の自動スケールは、マネージド クラスターの 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
注意
このデプロイが完了した後、将来のクラスター リソースのデプロイでは、 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 を使用します。
Azure Resource Explorer に移動します
subscriptions->SubscriptionName->resource group->microsoft.insights->autoscalesettings-> 自動スケーリング ポリシー名 (sfmc01-NT2など) に移動します。ナビゲーション ツリーに次のような内容が表示されます。
右側に、この自動スケール設定の定義がすべて表示されます。
この例では、自動スケーリングの構成に CPU% ベースのスケールアウトとスケールイン規則が使用されています。
トラブルシューティング
以下の点を考慮してください。
マネージド クラスターのセカンダリ ノードの種類に対してトリガーされている自動スケール イベントを確認する
- クラスターのアクティビティ ログにアクセスする
- 自動スケールのスケールをアップ/ダウンする操作が完了したアクティビティログを確認する
ノードの種類に対して構成されている 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-AzMetricPowerShell モジュールを使用して、リソースのメトリック値を取得し、確認します。
これまでの手順を終えても、自動スケーリングに関する問題が解決しない場合は、「サポート リクエストを記録」リソースをご利用ください。 テンプレートと、パフォーマンス データのビューを共有できるように準備しておいてください。