Azure 仮想マシンスケールセット 自動水平スケール

スポンサーリンク

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

通知の動作確認

スケールアウトまたはスケールインが発生するような負荷状態にします。しばらく待ちメールを受信した事を確認します。

スケールアウトの通知 02

補足

垂直スケール

このページで紹介したのは、仮想マシンの台数を増減させるスケールアウト・スケールインと呼ばれる手法です。別の性能増減方法で、仮想マシンの性能を上下させるスケールアップ・スケールダウンと呼ばれる手法もあります。これらの手法は、前者は水平スケール(horizontal scaling)と、後者は垂直スケール(vertical scaling)と呼ばれます。

Microsoft Azureは垂直スケールもできます。垂直スケールは水平スケールに比べると考慮する事も多く実装のハードルも高いですが、「仮想マシン スケール セットを使用した垂直方向の自動スケール」に実装方法が掲載されています。

タイトルとURLをコピーしました