オートスケーラーによる判断の理解

自動スケーリングでは、マネージド インスタンス グループ(MIG)に VM が自動的に追加(スケールアウト)または削除(スケールイン)されます。このドキュメントでは、オートスケーラーが MIG をスケーリングするタイミングの決定方法について説明します。

MIG にオートスケーラーを構成すると、オートスケーラーは継続的にグループをモニタリングし、グループの recommendedSize を、直近 10 分間のピーク負荷に対応するうえで必要な仮想マシン(VM)インスタンスの数に設定します。この直近の 10 分間は、安定化期間と呼ばれます。

スケールインの制御を使用して自動スケーリング ポリシーを設定した場合、recommendedSize はスケールインの制御によって制限されます。

オートスケーラーの推奨サイズに対する MIG のレスポンスは、オートスケーラーの mode をどのように構成したかによって変わります。

  • ON。MIG は targetSize を推奨サイズに設定し、グループはターゲット サイズに合うように自動的にスケーリングされます。
  • ONLY_SCALE_OUT。MIG のターゲット サイズは、推奨サイズの増加に応じてのみ増加できます。
  • OFF。ターゲット サイズは推奨サイズの影響を受けません。ただし、推奨サイズは引き続き計算されます。

オートスケーラーの構成が削除された場合、推奨サイズは計算されなくなります。

目標と実際の使用率のギャップ

自動スケーリングの処理時に、小規模なインスタンス グループではインスタンス グループの実際の使用率と目標使用率がかけ離れていることがあります。これは、オートスケーラーが、使用率データの解釈時や、追加または削除するインスタンス数の判断時に、値を切り上げまたは切り捨てることによって常に控え目に動作するためです。これにより、オートスケーラーがリソースを追加するときに、リソース不足や、必要以上のリソースの削除を避けることができます。

たとえば、目標使用率を 0.7 に設定していて、アプリケーションがその目標使用率を超えている場合、オートスケーラーは使用率を 0.7 前後に減らすために 1.5 台の仮想マシン(VM)の追加が必要と判断したとします。VM インスタンスを 1.5 台追加することはできないため、オートスケーラーは切り上げて 2 台のインスタンスを追加します。これにより、平均 CPU 使用率が 0.7 未満に低下することがありますが、アプリのリソースは十分に確保されます。

同様に、VM インスタンスを 1.5 台削除することで使用率を 0.7 に近くまで上げられると判断した場合には、インスタンスは 1 台のみ削除されます。

より多くの VM インスタンスがある大規模なグループでは、使用率は多数のインスタンスで分配され、VM インスタンスの追加または削除によってもたらされる実際の使用率と目標使用率とのギャップの変化は小さなものとなります。

リージョン MIG と不均一な VM 分散

ゾーンの障害や不均一に分散されたワークロードが原因で、リージョンのゾーン間でインスタンス数のバランスが崩れると、オートスケーラーは実際の使用率が平均よりも高いゾーンで、より多くのインスタンスを実行中の状態にします。Compute Engine はこの予防措置を取ることで、一部のゾーンに他のゾーンよりも高負荷がかかっているとしても、リージョン全体ならびに個々のゾーンすべてで高可用性を保証します。

スケールアウトの遅延

自動スケーリングを構成する際、VM の初期化にかかる時間を反映したクールダウン期間を指定します。クールダウン期間中、オートスケーラーは VM からの使用状況データを無視します。

インスタンスの初期化に要する時間よりも大幅に長いクールダウン期間を設定すると、オートスケーラーが適正な使用率データを無視して、グループに必要なサイズが過小評価される可能性があります。

スケールインの遅延

オートスケーラーはスケールインの目的で、直近の 10 分間におけるピーク負荷に基づいて適切なターゲット サイズを計算します。この直近の 10 分間は、安定化期間と呼ばれます。

直近の 10 分間の使用状況を監視することで、次のことが可能になります。

  • インスタンス グループから収集した使用状況情報が安定していることを確認できます。
  • オートスケーラーが連続して頻繁にインスタンスを追加または削除することを回避できます。
  • 直近 10 分間の負荷に小規模なグループサイズで対応できると判断した場合にのみ、インスタンスを削除できます。

この 10 分間の安定化期間は、スケールインの遅延のように見えることもありますが、実際には自動スケーリングの組み込み機能によるものです。この遅延により、新しいインスタンスがマネージド インスタンス グループに追加された場合、インスタンスはスケールインの対象になるまでに少なくとも 10 分間実行されます。

グループをスケールインするかどうかの判断時には、新規インスタンスに対するクールダウン期間は無視されます。

遅延の原因となるコネクション ドレイン

グループが属するバックエンド サービスコネクション ドレインが有効になっている場合は、コネクション ドレインが有効のタイムアウトが経過してから VM インスタンスが削除されるまでに 60 秒ほどかかることがあります。

スケールインの制御

オートスケーラーのスケールインの制御を構成する際、スケールインの速度を設定します。オートスケーラーにより、構成された速度よりも速くスケールインされることはありません。

スケールインの制御のあるオートスケーラーとないオートスケーラー。

  1. 負荷が減少すると、オートスケーラーは直近 10 分間(安定化期間)に観測されたピーク負荷を処理するために必要なレベルまでグループのサイズを調整します。これは、スケールインの制御の有無にかかわらず同じように動作します。
  2. スケールインの制御のないオートスケーラーは、直近で観測された負荷を処理するために必要なインスタンスのみを保持します。安定化期間後、オートスケーラーは不要なインスタンスをすべて一度に削除します。負荷が急激に低下すると、インスタンス グループのサイズが大幅に減少する場合があります。
  3. スケールインの制御のあるオートスケーラーは、構成された期間で削除できる VM インスタンスの数を制限します(この場合は 20 分間で 10 台の VM)。これにより、インスタンスの削除速度が低下します。
  4. 負荷が急増する場合、オートスケーラーは新しいインスタンスを追加することで負荷を処理します。しかし、初期化に時間がかかるため、新しい VM には負荷を処理するための準備ができていません。スケールインの制御がある場合、それまでのキャパシティが維持されるため、既存の VM でこのスパイクに対応できます。

スケールインの速度を制御するには、追跡時間枠内でのオートスケーラーの最大許容削減数を構成します。

  • 最大許容削減数maxScaledInReplicas: VM インスタンスの数または割合)。指定された追跡時間枠内においてワークロードで(グループのピークサイズから)削除できるインスタンスの数。このパラメータを使用して、グループをどれだけスケールインできるかを制限します。これにより、より多くのインスタンスがサービスを開始するまで、発生しうる負荷スパイクに引き続き対応できます。最大許容削減数が小さいほど、スケールインの速度は遅くなります。
  • 追跡時間枠timeWindowSec: 秒)一時的な負荷減少の後に負荷スパイクが発生する可能性が高く、最大許容削減数を超えてグループサイズをスケールインしたくない時間。このパラメータで、オートスケーラーが過去の負荷を処理するのに十分なピークサイズを決定する際の時間枠を定義します。オートスケーラーは、追跡時間枠で観測されたピークサイズから最大許容削減数を差し引いた値よりも小さいサイズにスケールインしません。追跡時間枠が長いほど、オートスケーラーは過去のピーク負荷を重視します。これにより、より慎重な安定したスケールインが可能になります。

スケールインの制御が設定されたオートスケーラーでは、スケールイン オペレーションが、追跡時間枠で観測されるピークサイズからの最大許容削減数に制限されます。オートスケーラーは次の手順を使用します。

  1. 追跡時間枠内で観測された過去のピークサイズを継続的にモニタリングします。
  2. 最大許容削減数を基に、制限付きのスケールイン サイズ(ピークサイズ: maxScaledInReplicas)を計算します。
  3. グループの推奨サイズを制限付きのスケールイン サイズに設定します。たとえば、オートスケーラーがインスタンス グループを 20 台の VM にサイズ変更しようとしても、スケールインの制限で許可されているサイズ変更が 40 台であった場合には、推奨サイズは 40 台に設定されます。

スケールインの制御が設定されている場合、オートスケーラーは、構成された追跡時間枠内のインスタンス グループのピークサイズを継続的にモニタリングし、直近の負荷に対応するのに十分なサイズを決定します。オートスケーラーは、観測されたピークサイズから測定された最大許容削減数を超えてスケールインしません。

スケールインの制御のあるオートスケーラー。

たとえば、上の図では、追跡時間枠が 30 分、VM の最大許容削減数が 20 台に構成されています。

  1. 負荷が減少すると、オートスケーラーによって 20 台の VM が削除されます。これは、スケールインの制御で構成されている最大許容削減数です。
  2. 負荷が増減すると、オートスケーラーは過去 30 分間の追跡時間枠を継続的にモニタリングし、直近の負荷を処理するのに十分なピークサイズを決定します。このピークサイズは、スケールインの制御の基準として使用され、スケールインの速度を制限します。過去 30 分間のピークサイズが 70 台の VM で、最大許容削減数が 20 台の VM に設定されている場合、オートスケーラーは VM を 50 台までスケールインできます。現在のサイズが 65 台の VM の場合、オートスケーラーは 15 台の VM のみを削除できます。
  3. 負荷が減少し続ける場合、オートスケーラーは VM インスタンスを削除し続けますが、スケールインの速度は、過去 30 分間に測定されたピーク インスタンス グループ サイズから最大 20 台の VM までに制限されます。

グループサイズの最大許容削減数の削除が一度に行われる可能性があるため、アプリケーションがその数のインスタンスを一度に失っても問題ないように最大許容削減数を構成する必要があります。最大許容削減数パラメータを使用して、アプリケーションが許容できる処理能力の削減量を指定します。

自動スケーリングで削除できる VM インスタンスの数を制限し、観測される追跡時間枠を増やすことで、負荷の急増や初期化時間の長期化が発生するアプリケーションで可用性が向上します。具体的には、インスタンス グループのサイズが負荷の大幅な減少に応じて一度に減少するのではなく、時間の経過とともに徐々に減少するようになります。スケールインの直後に負荷の急増が起こる場合でも、残りの VM 数で急増に対応し、許容範囲内に収められるはずです。また、急増に対応するために起動する VM の数も少なくなります。

スケールインの制御は、ゾーン MIG とリージョン MIG の両方の自動スケーリングの構成できます。どちらの場合も構成は同じです。どのようなグループサイズでも機能します。

スケールインの制御とオートスケーラーの安定化

スケールインの制御を構成しても、オートスケーラーの組み込み安定化メカニズムがオフになるわけではありません。オートスケーラーは常に、インスタンス グループのサイズを、直近 10 分間の安定化期間中に観測されたピーク負荷に対応するために必要なレベルに維持します。スケールインの制御を使用すると、インスタンス グループのサイズ変更速度を制御する別のメカニズムを追加できます。

オートスケーラーの組み込み:
安定化期間
スケールインの制御:
追跡時間枠
構成可能か。 構成不可 構成可能
モニタリング対象は何か。 直近 10 分間のピーク負荷 追跡時間枠で設定された直近の期間におけるインスタンス グループのピークサイズ
どのように役立つか。 インスタンス グループのサイズが、過去 10 分間に観測されたピーク負荷を十分に処理できるようにする。 指定された時間枠で負荷が急増した場合に、ワークロードが許容できる数を超える VM インスタンス数のインスタンス グループのサイズ縮小が行われないようにする。

オートスケーラー モードによるスケールインの制御

MIG が自動スケーリングされていない場合に自動スケーリングを有効にする場合、ほぼ同じ内容ながら一部の異なるシナリオが 2 つ考えられます。これらは、自動スケーリングを初めて構成する場合と、自動スケーリングが構成されているが一時的に制限されているかオフになっている場合で異なります。

オートスケーラーの初回構成

自動スケーリングされていない MIG があり、自動スケーリングを初めて構成する場合、オートスケーラーは現在の MIG サイズを開始点として使用します。スケールインする前に、オートスケーラーは安定化期間に基づき、スケールインの制御を使用してスケールイン速度を制限します。

オートスケーラーの初回構成。

オートスケーラー モードの変更

自動スケーリング モードでは、自動スケーリング アクティビティを一時的にオフにしたり、制限したりできます。オートスケーラーの構成は維持され、オートスケーラーはオフまたは制限されている間もバックグラウンドで計算を継続します。オートスケーラーは、オフまたは制限モードのとき、バックグラウンド計算でスケールインの制御を考慮します。すべての自動スケーリング アクティビティは、自動スケーリングを再度オンにしたとき、または制限を解除したときに、最新の計算を使用して再開されます。

スケールインの制御のあるオートスケーラーの再開。

  1. オンになっているオートスケーラーは通常どおりに動作します(この場合はスケールインの制御を使用)。
  2. オートスケーラーをオフにしても、負荷に基づいて推奨インスタン グループのサイズが計算されます。オートスケーラーの計算では、引き続きスケールインの制御が考慮されます。ただし、オートスケーラーがオフの場合、オートスケーラーはサイズ計算を適用しません。インスタンス グループのサイズは、オートスケーラーが再びオンになるまで一定になります。
  3. オートスケーラーを再度オンにすると、以前に計算されたサイズがすぐに適用されます。これにより、適切なサイズにすばやくスケーリングできます。オートスケーラーを再度有効にすると、急激なスケールイン(この場合は、VM インスタンスの数が 80 台から 40 台)が発生する可能性がありますが、バックグラウンド計算はすでにスケールインの制御を考慮しているため、これは安全です。

インスタンスの停止準備

スケールインする場合、オートスケーラーはシャットダウンする必要がある VM インスタンスの数を決定し、そのインスタンス グループから使用率の低い VM インスタンスを選択して、削除します。インスタンスを停止する前に、既存の接続の切断、アプリやアプリサーバーの正常なシャットダウン、ログのアップロードなど、特定のタスクを実行する必要があります。シャットダウン スクリプトを使用すると、それらのタスクを実行するようにインスタンスに指示できます。

シャットダウン スクリプトは、停止リクエストの発行からインスタンスの実際の停止までの短い期間にベスト エフォート型で実行されます。この期間中に、Compute Engine はシャットダウン スクリプトを実行して、スクリプトで指定されたタスクを実行しようとします。

これは、マネージド インスタンス グループで負荷分散を使用している場合に特に役に立ちます。インスタンスが正常でない状態になった場合、そのインスタンスが正常でないことをロードバランサが認識するまでに時間がかかることがあるために、ロードバランサはそのインスタンスに新しいリクエストを送信し続けることがあります。シャットダウン スクリプトを使用すれば、そのインスタンスはシャットダウン時に正常でないことを報告できるため、ロードバランサはそのインスタンスへのトラフィックの送信を停止できます。詳細については、負荷分散のドキュメントにある正常でないインスタンスの処理をご覧ください。

シャットダウン スクリプトの詳細については、シャットダウン スクリプトをご覧ください。

インスタンスのシャットダウンについての詳細は、インスタンスの停止または削除に関するドキュメントをご覧ください。

使用率の自動スケーリング グラフの表示

自動スケーリングされているマネージド インスタンス グループがある場合、Compute Engine は、任意の時点での合計使用率と自動スケーリングされたインスタンスの数を示す自動スケーリング グラフを提供します。Google Cloud Console で、このグラフにアクセスできます。

  1. Cloud Console で、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. 表示する自動スケーリングされたマネージド インスタンス グループの名前をクリックします。このグループは、CPU 使用率に基づく自動スケーリングを使用している必要があります(他の自動スケーリング指標はまだサポートされていません)。
  3. マネージド インスタンス グループの詳細ページで、[モニタリング] タブを選択します(選択されていない場合)。

    [モニタリング] タブ。

  4. プルダウン リストで [自動スケーリングされたサイズ] が選択されていることを確認します。

グラフでは、CPU 使用率の上にインスタンス数が表示されます。次の情報を利用してグラフを確認してください。

  • 上のグラフの青色の線は、マネージド インスタンス グループ内のインスタンス数を示しています。
  • 下のグラフの青色の線は、グループの合計 CPU 使用率を示しています。
  • 下のグラフの緑色の線は、マネージド インスタンス グループの残りの使用可能容量を示しています。
    • 緑色の線が青色の線より上にある場合、使用可能容量が大きく、VM インスタンスが十分に活用されていない可能性があります。
    • 緑色の線が青色の線より下にある場合、残りの容量はほとんどなく、インスタンス グループにインスタンスを追加する必要があります。
  • 容量が低下すると、インスタンス グループのサイズが減少していると考えられ、上のグラフの青色の線も降下します。同様に、容量が上昇すると、インスタンス グループのサイズも増加すると考えられます。

たとえば次のグラフは、自動スケーリングされるマネージド インスタンス グループが容量に達したことで、オートスケーラーが VM インスタンスをグループに追加し、グループの容量が増加する様子をとらえたものです。

使用率が容量を超えると、オートスケーラーによってインスタンスが追加されます。
              使用率が 10 分間低下すると、オートスケーラーによってインスタンスが削除されます。
自動スケーリング グラフ

ステータス メッセージの表示

オートスケーラーでスケーリングの問題が発生した場合、警告またはエラー メッセージが返されます。これらのステータス メッセージは、次の 2 つの方法のいずれかにより確認できます。

[インスタンス グループ] ページでステータス メッセージを表示する

ステータス メッセージは、Google Cloud Console の [インスタンス グループ] ページで直接確認できます。

  1. Google Cloud Console で、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. 注意アイコン(!)があるインスタンス グループを探します。たとえば、次のようなものです。

    [インスタンス グループ] ページのステータス メッセージ。

  3. ステータス アイコンの上にカーソルを置くと、ステータス メッセージの詳細が表示されます。

[インスタンス グループの詳細] ページでステータス メッセージを表示する

特定のインスタンス グループの詳細ページに直接移動することにより、関連するステータス メッセージを表示できます。

  1. Cloud Console で、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] ページに移動

  2. ステータス メッセージを表示するインスタンス グループをクリックします。
  3. 詳細ページの [メンバー] タブでステータス メッセージを確認します。例:

    [インスタンス グループの詳細] ページのステータス メッセージ。

よく返されるステータス メッセージ

オートスケーラーでスケーリングの問題が発生した場合、警告またはエラー メッセージが返されます。以下に、よく返されるメッセージとその意味を示します。

All instances in the instance group are unhealthy (not in RUNNING state). If this is an error, check the instances.
インスタンス グループ内のすべてのインスタンスが、RUNNING 以外の状態になっています。これが意図した状態である場合、このメッセージを無視してかまいません。意図している状態ではない場合、インスタンス グループのトラブルシューティングを行ってください。
The number of instances has reached the maxNumReplicas. The autoscaler cannot add more instances.
オートスケーラーを作成したときに、インスタンス グループが維持できるインスタンスの最大数を指定しています。オートスケーラーは現在、需要を満たすためにインスタンス グループのサイズのスケールアウトを試行していますが、maxNumReplicas に達しました。maxNumReplicas をより大きい数に更新するには、オートスケーラーの更新をご覧ください。
The monitoring metric that was specified does not exist or does not have the required labels. Check the metric.
Cloud Monitoring の指標を使用して自動スケーリングを行っていますが、指定した指標が存在しないか、必要なラベルが欠如しています。標準指標またはカスタム指標のどちらを使用するかに応じて、必要なラベルが異なります。詳細は、モニタリング指標に基づくスケーリングのドキュメントをご覧ください。
Quota for some resources is exceeded. Increase the quota or delete resources to free up more quota.
利用可能な割り当ての情報については、Google Cloud Console の割り当てのページをご覧ください。
Autoscaling does not work with an HTTP/S load balancer configured for maxRate.
インスタンス グループが maxRate の構成を使用して負荷分散されていますが、オートスケーラーがこのモードをサポートしていません。構成を変更するか、自動スケーリングを無効にします。maxRate の詳細については、負荷分散のドキュメントの制限とガイドラインをご覧ください。
The autoscaler is configured to scale based on a load balancing signal but the instance group has not received any queries from the load balancer. Check that the load balancing configuration is working.
インスタンス グループは負荷分散されていますが、グループに受信クエリがありません。サービスがアイドル状態になっている可能性がありますが、その場合心配する必要はありません。ただし、このメッセージは構成ミスでも生じる可能性があります。たとえば、自動スケーリングされたインスタンス グループは、サポートされていない複数のロードバランサのターゲットになることがあります。ガイドラインの一覧については、負荷分散のドキュメントの制限とガイドラインをご覧ください。