インスタンスのグループの自動スケーリング


マネージド インスタンス グループ(MIG)には、負荷の増減に基づいて、MIG から仮想マシン(VM)インスタンスを自動的に追加または削除できる自動スケーリング機能が備わっています。自動スケーリングによって、トラフィックの増加をアプリで適切に処理できると同時に、リソースの必要性が低下した場合は費用を削減できます。自動スケーリング ポリシーを定義すると、測定された負荷と構成したオプションに基づいてオートスケーラーが自動スケーリングを実行します。

自動スケーリングでは、負荷が大きくなると MIG に VM が追加され(スケールアウト)、VM の必要性が低下すると VM が削除されます(スケールイン)。

前提条件

オートスケーラーは、Compute Engine サービス エージェントを使用して、グループ内のインスタンスを追加および削除します。Compute Engine API が有効になっている場合、Google Cloud はこのサービス アカウントと、Compute Engine サービス エージェント ロールへの IAM ポリシー バインディングを自動的に作成します。

プロジェクトにこのアカウントがない場合(たとえば、アカウントを削除した場合)は、手動で追加できます。

コンソール

  1. Google Cloud コンソールの [IAM] ページに移動します。

    [IAM] に移動

  2. [アクセス権を付与] をクリックします。

  3. [新しいプリンシパル] フィールドに「service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com」と入力します。

  4. [Compute Engine サービス エージェント] ロールを選択します。

  5. [保存] をクリックします。

gcloud

gcloud projects add-iam-policy-binding PROJECT_ID \
   --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
   --role roles/compute.serviceAgent

基礎知識

自動スケーリングでは、以下の基本的な概念とサービスが使用されます。

マネージド インスタンス グループ

自動スケーリングはマネージド インスタンス グループ(MIG)の機能です。マネージド インスタンス グループは、共通のインスタンス テンプレートから作成された仮想マシン(VM)インスタンスの集まりです。オートスケーラーは、グループの自動スケーリング ポリシーに基づいて、マネージド インスタンス グループからインスタンスを追加または削除します。Compute Engine にはマネージド インスタンス グループと非マネージド インスタンス グループがありますが、オートスケーラーで使用できるのはマネージド インスタンス グループだけです。

マネージド インスタンス グループと非マネージド インスタンス グループの違いについては、インスタンス グループをご覧ください。

マネージド インスタンス グループの作成方法については、MIG の作成をご覧ください。

自動スケーリング ポリシー

グループに自動スケーリング ポリシーを定義する場合、オートスケーラーがグループのスケーリングに使用するシグナルを 1 つ以上指定します。ポリシーで複数のシグナルを設定すると、オートスケーラーは、各シグナルの推奨 VM 数を計算し、グループの推奨サイズを最大数に設定します。

自動スケーリング ポリシーには、少なくとも 1 つのスケーリング シグナルが必要です。MIG で自動スケーリングを有効にすると、デフォルトでは、オートスケーラーによって CPU 使用率シグナルが追加されます。このデフォルト シグナルは編集できます。また、ポリシー内の他の信号を削除、追加できます。

以下のセクションでは、ターゲット使用率の指標に基づくシグナルの概要と、スケジュールに基づくシグナルについて説明します。

目標使用率の指標

インスタンス グループの負荷を反映する以下の指標に基づいて自動スケーリングできます。

  • 平均 CPU 使用率
  • HTTP ロード バランシング処理能力
  • Cloud Monitoring の指標

オートスケーラーは、選択された使用率の指標に基づいて使用状況情報を継続的に収集して、実際の使用率と目標使用率を比較し、その情報を使ってグループでインスタンスの削除(スケールイン)、追加(スケールアウト)のいずれが必要であるかを決定します。

目標使用率レベルは、仮想マシン(VM)インスタンスで維持するレベルです。たとえば、CPU 使用率に基づいてスケーリングする場合、目標使用率レベルを 75% に設定すると、オートスケーラーは、指定されたインスタンス グループの CPU 使用率を 75% 前後で維持します。各指標の使用率レベルは、自動スケーリングのポリシーに基づいて、異なった方法で解釈されます。

目標使用率の指標に基づくスケーリングの詳細については、次のページをご覧ください。

スケジュール

スケジュール ベースの自動スケーリングを使用すると、予想される負荷に対して容量を割り当てることができます。インスタンス グループごとに最大 128 のスケーリング スケジュールを設定できます。スケーリング スケジュールごとに次の項目を指定します。

  • 容量: 最低限必要な VM インスタンス
  • スケジュール: 開始時間、期間、繰り返し(例: 1 回のみ、毎日、毎週、毎月)

各スケーリング スケジュールは、開始時間から構成された期間中アクティブになります。この間、オートスケーラーはスケーリング スケジュールで定義された数のインスタンス数を持つようにグループをスケーリングします。

詳しくは、スケジュールに基づくスケーリングをご覧ください。

初期化期間

初期化期間(旧称クールダウン期間)は、VM インスタンスでアプリケーションが初期化されるのにかかる時間です。アプリケーションがインスタンスで初期化されている間に、インスタンスの使用状況は通常の状況を反映していない可能性があります。オートスケーラーは、次の方法で初期化期間を使用してスケーリングを決定します。

  • スケールインを判断する場合、初期化期間中であっても、オートスケーラーはすべてのインスタンスの使用状況データを考慮します。すべてのインスタンスの平均使用率がターゲット使用率を下回っている場合、オートスケーラーはインスタンスの削除を推奨します。
  • スケールアウトを判断する場合、オートスケーラーは初期化期間中のインスタンスの使用状況データを無視します。
  • 予測モードを有効にすると、初期化期間により、予測される負荷が発生する前に予測オートスケーラーがスケールアウトされます。これにより、アプリケーションは負荷が発生したときに初期化されます。たとえば、初期化期間を 300 秒に設定した場合、予測オートスケーラーは予測負荷の 5 分前に VM を作成します。

初期化期間のデフォルト値は 60 秒です。実際の初期化時間はさまざまな要因によって異なります。アプリケーションの初期化にかかる時間をテストすることをおすすめします。そのためには、インスタンスを作成し、インスタンスが RUNNING ステータスになってからアプリケーションの準備が完了するまでの起動プロセスにかかる時間を測定します。

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

安定化期間

CPU 使用率などの自動スケーリング シグナルはあまり安定しておらず、急激に変化する可能性があります。負荷が増減すると、オートスケーラーはシグナルを安定させて VM の連続した削除と作成を防ぐ必要があります。オートスケーラーは、十分な VM 容量を維持することでシグナルを安定させ、安定化期間中に観測されるピーク負荷に対応します。

安定化期間は、10 分または設定した初期化期間のいずれか長い方と同じ時間になります。安定化期間は、オートスケーラーが VM を削除する必要がある場合にスケールインを決定する目的でのみ使用されます。

負荷が低下しても、オートスケーラーは VM をすぐに削除しません。オートスケーラーは、安定化期間に必要な容量をモニタリングし続け、ピーク負荷に対応するのに十分な容量がある場合にのみ VM を削除します。これはスケールインの遅延のように見えることもありますが、自動スケーリングの組み込み機能によるものです。

新しい VM でアプリケーションの初期化に 10 分以上かかる場合、オートスケーラーはデフォルトの 10 分間の安定化期間ではなく初期化期間を使用して VM が削除されるまで待機します。これにより、VM を削除するオートスケーラーの決定は、処理能力を回復するのにかかる時間を考慮したものになります。

負荷が増加すると、オートスケーラーは安定期間を使用せずに需要を満たすために必要な数の VM をすぐに作成します。

自動スケーリング モード

オートスケーラーによる操作が行われない状態でグループを調査または構成する必要がある場合は、一時的に自動スケーリング アクティビティを無効化または制限できます。無効になっている間や制限されている間もオートスケーラーの構成は保持され、再び有効にするか、制限を解除すると、すべての自動スケーリング アクティビティが再開されます。

予測自動スケーリング

可用性の目的で MIG を最適化するために予測自動スケーリングを有効にすると、オートスケーラーは過去のデータに基づいて予測し、予測される負荷の前に MIG をスケールアウトします。これにより、負荷が発生したときに新しいインスタンスがサービスを提供できるようになります。

予測自動スケーリングは、ワークロードが次の基準を満たしている場合に最適に機能します。

  • アプリケーションの初期化に時間がかかる。たとえば、初期化期間を 2 分以上に設定している場合などです。
  • ワークロードが日単位または週単位のサイクルによって変動すると予測される。

詳しくは、予測に基づくスケーリングをご覧ください。

スケールインの制御

ワークロードの初期化に時間がかかる場合(インストール タスクが長いなど)、スケールイン制御を構成することで、急激なスケールイン イベントによるレスポンスのレイテンシのリスクを軽減できます。具体的には、負荷が減少した直後に急増が予想される場合が該当します。このような場合には、スケールイン レートを制限して、自動スケーリングがワークロードの許容範囲を超える VM インスタンスを割り当てて MIG のサイズを縮小させないようにします。

スケールアウト時に負荷の急増に対応するのに十分な速さでアプリケーションを初期化する場合は、スケールイン管理を構成する必要はありません。

スケールイン管理を構成するには、自動スケーリング ポリシーの次のプロパティを構成します。

  • 最大許容削減数。指定された後続の時間枠内でワークロードが(ピークサイズから)失っても差し支えがない VM インスタンスの数。このパラメータを使用すると、より多くのインスタンスが処理を開始するまで、想定される負荷の急増に対応できるように、グループのスケーリング範囲を制限できます。最大許容削減値を小さく設定すると、グループのスケールインの時間が長くなります。

  • 後続の時間枠。オートスケーラーによるワークロードに必要なピークサイズのモニタリング履歴。オートスケーラーでは、当該期間中に観察されたピークサイズから最大許容削減数を差し引いた値より小さいサイズには変更されません。このパラメータを使用すると、オートスケーラーがインスタンスから最大許容削減数で定義した分を削除するまでの待機時間を定義できます。オートスケーラーは、後続の時間枠が長くなるほど、ピーク時の履歴を考慮して、スケールインをより慎重かつ安定的に行います。

詳細については、スケールイン管理の構成オートスケーラーの決定についてをご覧ください。

推奨グループサイズは、マネージド インスタンス グループが保持する必要があるオートスケーラーの VM の推奨数で、直近 10 分間に観察されたピーク負荷に基づいています。この直近 10 分間は、安定化期間と呼ばれます。推奨サイズは常に再計算されます。スケールインの制御を使用して自動スケーリング ポリシーを設定した場合、推奨サイズはスケールインの制御によって制限されます。

制限事項

自動修復の流れ

自動スケーリングは自動修復とは独立して機能します。グループに対して自動修復を構成した場合、インスタンスがヘルスチェックに失敗すると、MIG がそのインスタンスの再作成を試みます。MIG がインスタンスを再作成している間、グループで実行中のインスタンスの数はグループに対して指定された最小数(autoscalingPolicy.minNumReplicas)より少なくなる可能性があります。

料金

自動スケーリング ポリシーの構成に対して追加料金は発生しません。オートスケーラーは VM インスタンスを動的に追加または削除するため、MIG が使用するリソースに対してのみ課金されます。自動スケーリング ポリシーでインスタンスの最小数と最大数を構成することで、リソースの費用を制御できます。 Compute Engine の料金については、料金をご覧ください。

次のステップ

  1. リージョン MIG での自動スケーリングの仕組みを学習します。
  2. 既存の MIG がない場合は、マネージド インスタンス グループの作成方法を確認します。
  3. オートスケーラーを作成します。

  4. オートスケーラーを管理します。たとえば、オートスケーラーに関する情報の取得、スケールイン管理の構成、オートスケーラーの一時的な制限などです。