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

自動スケーリングでは、マネージド インスタンス グループのスケーリングがユーザーに代わって自動的に実行されます。このドキュメントを読むと、オートスケーラーが MIG をスケーリングする際に行う判断について理解できます。

MIG のオートスケーラーを構成すると、オートスケーラーによるグループのモニタリングが常時行われ、グループの recommendedSize が、直近 10 分間の負荷のピークを処理するために必要なインスタンスの数に設定されます。この直近 10 分間は、安定化期間と呼ばれます。

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

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

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

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

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

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

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

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

スケールダウンの遅延

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

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

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

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

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

遅延の原因となる接続ドレイン

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

スケールアップの遅延

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

たとえば、CPU 使用率に基づいてスケーリングするとします。また、インスタンスの CPU 使用率が初期化後に増加するとします。CPU 使用率が増加すると、スケールアップが必要になります。しかし、インスタンスがクールダウン期間中であれば、CPU 使用率の増加は無視されるため、グループはスケールアップされません。

スケールアップの遅延を回避するには、インスタンスが初期化に要する時間とほぼ一致するクールダウン期間を設定します。

インスタンス終了の準備

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

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

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

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

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

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

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

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

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

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

    [モニタリング] タブ。

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

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

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

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

自動スケーリング グラフのスクリーンショット

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

オートスケーラーでスケーリングの問題が発生した場合、警告またはエラー メッセージが返されます。これらのステータス メッセージは、次の 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.
Stackdriver 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.
インスタンス グループは負荷分散されていますが、グループに受信クエリがありません。サービスがアイドル状態になっている可能性がありますが、その場合心配する必要はありません。ただし、このメッセージは構成ミスでも生じる可能性があります。たとえば、自動スケーリングされたインスタンス グループは、サポートされていない複数のロードバランサのターゲットになることがあります。ガイドラインの一覧については、負荷分散のドキュメントの制限とガイドラインをご覧ください。