Microsoft Azureの仮想マシンスケールセットは、負荷に応じたスケールアウト(台数増)とスケールイン(台数減)が可能です。このページではスケールアウトとスケールインの設定方法を説明します。
前提
公式ドキュメント
参考になる公式ドキュメントを以下に示します。
事前設定
以下、リソースグループを作成します。
az group create --name MyResourceGroup --location japaneast
以下、仮想マシンスケールセットを作成します。
az vmss create \ --resource-group MyResourceGroup \ --name MyScaleSet01 \ --image UbuntuLTS \ --vm-sku Standard_B1s \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys
スケールアウト
スケールアウトの設定
オートスケールの基本的な設定をします。仮想マシンスケールセット「MyScaleSet01」に対して、「Autoscale01」名前で最小と最大の仮想マシン数を定義します。
az monitor autoscale create \ --resource-group MyResourceGroup \ --resource-type Microsoft.Compute/virtualMachineScaleSets \ --resource MyScaleSet01 \ --name Autoscale01 \ --min-count 2 \ --max-count 10 \ --count 2
CPU使用率が5分間継続して70%を超えた場合に、仮想マシンを2台追加するスケールアウトのルールを設定します。
5分未満のメトリックに基づいたスケールイン・スケールアウトを試みると警告が発生されます。Microspft Azureは極端な短時間での台数増減を推奨していません。
az monitor autoscale rule create \ --resource-group MyResourceGroup \ --autoscale-name Autoscale01 \ --condition "Percentage CPU > 70 avg 5m" \ --scale out 2
スケールアウトの動作確認
仮想マシンに負荷をかけてスケールアウトの動作確認をします。まずは仮想マシンへの接続情報を確認します。
$ az vmss list-instance-connection-info \ --resource-group MyResourceGroup \ --name MyScaleSet01 { "instance 0": "20.89.89.99:50000", "instance 2": "20.89.89.99:50002" }
仮想マシンへログインし、stressコマンドを使って仮想マシンに負荷をかけます。
ssh azureuser@<IPアドレス> -p <ポート番号> sudo apt-get update sudo apt-get -y install stress sudo stress --cpu <CPU数> --timeout <負荷継続時間(秒)>
topコマンドなどを用いて、確かに負荷がかかっている事を確認します。
top - 04:26:30 up 12 min, 1 user, load average: 0.65, 0.19, 0.09 Tasks: 111 total, 3 running, 55 sleeping, 0 stopped, 0 zombie %Cpu(s):100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 934800 total, 279288 free, 150728 used, 504784 buff/cache KiB Swap: 0 total, 0 free, 0 used. 637560 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2487 root 20 0 8244 96 0 R 49.8 0.0 0:09.61 stress 2488 root 20 0 8244 96 0 R 49.5 0.0 0:09.60 stress 2492 azureus+ 20 0 44536 3888 3296 R 0.7 0.4 0:00.02 top 1 root 20 0 159904 9160 6624 S 0.0 1.0 0:03.52 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 5 root 20 0 0 0 0 I 0.0 0.0 0:00.44 kworker/0:0+
仮想マシンの台数が2台から4台へと増えた事を確認します。
az vmss list-instances \ --resource-group MyResourceGroup \ --name MyScaleSet01 \ --query "[].name" [ "MyScaleSet01_0", "MyScaleSet01_2", "MyScaleSet01_5", "MyScaleSet01_6" ] また、ポータルからも台数増減に関するログを閲覧できます。「すべてのサービス」から辿る場合は、「コンピューティング」「Virtual Machine Scale Sets」「仮想マシンスケールセット名(MyScaleSet01)」「スケーリング」「実行履歴」の順に画面遷移します。 <img src="https://changineer.info/wp-content/uploads/2022/04/azure_compute_scale_horizontal_001.png" alt="スケールアウトのログ確認 01" width="1552" height="898" class="alignnone size-full wp-image-10151" /> 画面下へスクロールさせると、台数増減に関するログを閲覧できます。 <img src="https://changineer.info/wp-content/uploads/2022/04/azure_compute_scale_horizontal_002.png" alt="スケールアウトのログ確認 02" width="1552" height="898" class="alignnone size-full wp-image-10152" /> <h2>スケールイン</h2> <h3>スケールインの設定</h3> CPU使用率が5分間継続して20%を下回った場合に、仮想マシンを1台削減するスケールインのルールを設定します。 az monitor autoscale rule create \ --resource-group MyResourceGroup \ --autoscale-name Autoscale01 \ --condition "Percentage CPU < 20 avg 5m" \ --scale in 1
スケールインのルール一覧は以下のコマンドで確認します。
$ az monitor autoscale rule list \ --resource-group MyResourceGroup \ --autoscale-name Autoscale01 [ { "index": 0, "metricTrigger": { "dimensions": [], "dividePerInstance": false, "metricName": "Percentage CPU", "metricNamespace": "", "metricResourceLocation": null, "metricResourceUri": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/MyScaleSet01", "operator": "GreaterThan", "statistic": "Average", "threshold": 70.0, "timeAggregation": "Average", "timeGrain": "0:01:00", "timeWindow": "0:05:00" }, "scaleAction": { "cooldown": "0:05:00", "direction": "Increase", "type": "ChangeCount", "value": "2" } }, { "index": 1, "metricTrigger": { "dimensions": [], "dividePerInstance": false, "metricName": "Percentage CPU", "metricNamespace": "", "metricResourceLocation": null, "metricResourceUri": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/MyScaleSet01", "operator": "LessThan", "statistic": "Average", "threshold": 20.0, "timeAggregation": "Average", "timeGrain": "0:01:00", "timeWindow": "0:05:00" }, "scaleAction": { "cooldown": "0:05:00", "direction": "Decrease", "type": "ChangeCount", "value": "1" } } ]
az monitor autoscale ruleコマンドにはupdateが用意されていませんので、もし、誤った設定を投入した場合は、delete/createする事で操作できます。操作例は以下の通りです。
az monitor autoscale rule delete \ --resource-group MyResourceGroup \ --autoscale-name Autoscale01 \ --index 1 az monitor autoscale rule create \ --resource-group MyResourceGroup \ --autoscale-name Autoscale01 \ --condition "Percentage CPU < 10 avg 5m" \ --scale in 1
スケールインの動作確認
しばらく待ち仮想マシンの台数が4台から3台へ減った事を確認します。
az vmss list-instances \ --resource-group MyResourceGroup \ --name MyScaleSet01 \ --query "[].name" [ "MyScaleSet01_0", "MyScaleSet01_2", "MyScaleSet01_5" ] <h2>通知</h2> <h3>通知の設定</h3> 仮想マシンの増減はEメールやWebhookでの通知ができます。ポータルでは「コンピューティング」「Virtual Machine Scale Sets」「仮想マシンスケールセット名(MyScaleSet01)」「スケーリング」「通知」の順に画面遷移すると設定画面が現れます。 <img src="https://changineer.info/wp-content/uploads/2022/04/azure_compute_scale_horizontal_011.png" alt="スケールアウトの通知 01" width="1552" height="898" class="alignnone size-full wp-image-10153" /> CLIならばaz monitor autoscale updateコマンドで指定します。引数email-administratorは「管理者」への通知有無を指定し、引数email-coadministratorsは「共同管理者」への通信有無を指定します。「管理者」「共同管理者」以外へ通知したい場合は、引数add-actionで指定します。 az monitor autoscale update \ --resource-group MyResourceGroup \ --name Autoscale01 \ --email-administrator false \ --email-coadministrators true \ --add-action email bob@contoso.com ann@contoso.com
通知の動作確認
スケールアウトまたはスケールインが発生するような負荷状態にします。しばらく待ちメールを受信した事を確認します。
補足
垂直スケール
このページで紹介したのは、仮想マシンの台数を増減させるスケールアウト・スケールインと呼ばれる手法です。別の性能増減方法で、仮想マシンの性能を上下させるスケールアップ・スケールダウンと呼ばれる手法もあります。これらの手法は、前者は水平スケール(horizontal scaling)と、後者は垂直スケール(vertical scaling)と呼ばれます。
Microsoft Azureは垂直スケールもできます。垂直スケールは水平スケールに比べると考慮する事も多く実装のハードルも高いですが、「仮想マシン スケール セットを使用した垂直方向の自動スケール」に実装方法が掲載されています。