オートスケーラーの管理


マネージド インスタンス グループ(MIG)を使用する場合は、このドキュメントを読んで、MIG のオートスケーラーを作成、構成、削除する方法を確認してください。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

オートスケーラーの作成

オートスケーラーの作成手順は、使用する自動スケーリングのポリシーによって多少異なります。オートスケーラーの作成手順については次のページをご覧ください。

オートスケーラーに関する情報の取得

特定のオートスケーラーに関する詳細情報を取得するには、コンソールを使用するか、ゾーンまたはリージョンのオートスケーラー REST リソースに gcloud compute instance-groups managed describe サブコマンドまたは get メソッドを実行します。

コンソール

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

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

  2. リストで MIG の名前をクリックして、そのグループの概要ページを開きます。
  3. [詳細] をクリックすると、自動スケーリングの設定を含むグループの詳細が表示されます。

gcloud

instance-groups managed describe コマンドを使用します。

gcloud compute instance-groups managed describe INSTANCE_GROUP_NAME

グループにオートスケーラーがアタッチされている場合、このコマンドはオートスケーラーに関する詳細情報を返します。

...
autoscaler:
  autoscalingPolicy:
    coolDownPeriodSec: 60
    cpuUtilization:
      utilizationTarget: 0.6
    maxNumReplicas: 20
    minNumReplicas: 10
    mode: ON
    scaleInControl:
      timeWindowSec: 300
      maxScaledInReplicas:
        fixed: 3
        calculated: 3
...

REST

instanceGroupManagers.get メソッドを使用します。リージョン MIG の場合は、zones/ZONEregions/REGION に置き換えます。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME

グループにオートスケーラーがアタッチされている場合、このリクエストはオートスケーラー リソースへのリンクを返します。

200 OK

{
  ...
  "status": {
    ...
    "autoscaler": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-c/autoscalers/example-group"
  },
}

オートスケーラー リソースの詳細情報を取得するには、autoscalers.getメソッド(ゾーン MIG の場合)またはregionAutoscalers.getメソッド(リージョン MIG の場合)を使用します。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers/example-autoscaler
200 OK

{
 "kind": "compute#autoscaler",
 "id": "8744945839459481093",
 "creationTimestamp": "2018-09-28T13:02:50.553-07:00",
 "name": "example-group",
 "target": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-c/instanceGroupManagers/example-group",
 "autoscalingPolicy": {
  "minNumReplicas": 10,
  "maxNumReplicas": 20,
  "mode": "ON",
  "scaleInControl": {
    "timeWindowSec": 60,
    "maxScaledInReplicas": {
      "calculated": 3,
      "percent": 15
    }
  },
  "coolDownPeriodSec": 60,
  "cpuUtilization": {
   "utilizationTarget": 0.6
  }
 },
 "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-c",
 "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-east1-c/autoscalers/example-group",
 "status": "ACTIVE"
}

オートスケーラーの更新

更新の際には、変更内容が反映されるまでに時間がかかることがあり、オートスケーラーの新しい設定が反映されるまでに数分かかる場合があります。

コンソール

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

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

  2. リストで MIG の名前をクリックして、そのグループの概要ページを開きます。
  3. [編集] をクリックすると、自動スケーリングの設定を含め、グループの現在の構成を表示し、更新できます。
  4. 完了したら [保存] をクリックします。

gcloud

update-autoscaling コマンドを使用します。

gcloud compute instance-groups managed update-autoscaling INSTANCE_GROUP_NAME \
        --max-num-replicas MAX_NUM ...

オートスケーラーの作成方法については、オートスケーラーの作成をご覧ください。

REST

オートスケーラー リソースを更新するには、autoscalers.patch メソッド(ゾーン MIG の場合)か、regionAutoscalers.patch メソッド(リージョン MIG の場合)を使用します。リクエストの本文に新しい構成を含めます。

PATCH https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/autoscalers/example-autoscaler

{
 "autoscalingPolicy": {
  "maxNumReplicas": 20
 }
}
200 OK

{
 "kind": "compute#operation",
 "id": "4244494732310423322",
 "name": "operation-1556912627871-58800f8216ed7-74ab1720-7d360603",
 "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f",
 "operationType": "compute.autoscalers.patch",
 "targetLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/autoscalers/example-autoscaler",
 "targetId": "340775527929467142",
 "status": "RUNNING",
 ...
}

データを変更するリクエストを実行する場合は、zoneOperations または regionOperations のリソースが返されます。そのオペレーションに対して、クエリを実行して変更のステータスを確認できます。

予測自動スケーリングの使用

予測自動スケーリングでは、過去のデータを使用して、予想される負荷に対して事前にグループをスケールアウトします。ワークロードが次の基準を満たすと最適に機能します。

  • アプリケーションの初期化に時間がかかる。たとえば、2 分を超える初期化期間を構成した場合です。
  • ワークロードが、日単位または週単位のサイクルで定期的に変動する。

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

オートスケーラーの無効化または制限

オートスケーラーをオフにして一時的に MIG のスケーリングを停止したり、オートスケーラーに制限をかけて MIG のスケールアウトだけを行えるようにできます。この機能は、次のような場合に便利です。

  • スケールインの影響を受けずに VM インスタンスを調査する。
  • グループの一部のみを再構成しつつ、スケーリング操作がトリガーされないように MIG の複数のプロパティを再構成する。
  • ワークロードを新しい MIG にリダイレクトしつつ、MIG の容量を維持して高速ロールバックを行う。
  • 後で予測自動スケーリングを有効にします。予測自動スケーリングでは、予測の基礎となる負荷の履歴の収集を開始するための自動スケーリング ポリシーが必要です。オートスケーラーは、モードが OFF に設定されていても、この履歴を検出します。

オートスケーラーを再び有効にすると、オートスケーラーは自動的に通常のオペレーションを再開します。

このセクションで説明する手順に沿って、オートスケーラーのモードを設定します。次のモードを使用できます。

  • オフ: 自動スケーリングを一時的に無効にします。このモードを使用すると、MIG のサイズが自動的に変更されなくなります。自動スケーリングの構成はそのまま維持されるため、後で再び自動スケーリングを有効にできます。
  • スケールアウトのみ: 新しい VM インスタンスを追加する場合にのみ自動スケーリングを実行します。このモードを使用すると、グループの縮小を防止できます。また、負荷が増えた場合には追加の VM をプロビジョニングできます。
  • オン: ポリシーごとにすべての自動スケーリング オペレーションを有効にします。

コンソール

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

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

  2. リストで MIG の名前をクリックして、そのグループの概要ページを開きます。
  3. [編集] をクリックすると、自動スケーリングの設定をはじめとするグループの現在の構成が表示されます。
  4. [自動スケーリング] の [自動スケーリング モード] を設定して、グループの自動スケーリングを無効または制限するか、オートスケーラーを有効に戻すことができます。
  5. 完了したら [保存] をクリックします。

gcloud

オートスケーラーの無効化、制限、再有効化を行うには、--mode フラグを指定して update-autoscaling コマンドを使用します。

gcloud compute instance-groups managed update-autoscaling INSTANCE_GROUP_NAME \
        --mode MODE 

次のように置き換えます。

  • MODE:
    • off にすると、オートスケーラーは無効になりますが、構成は維持されます。
    • only-scale-out にすると、オートスケーラーのアクティビティが VM インスタンスの追加のみに制限されます。
    • on にすると、ポリシーに従って、すべてのオートスケーラーのアクティビティが再び有効になります。

REST

オートスケーラー リソースのモードを更新するには、autoscalers.patch メソッド(ゾーン MIG の場合)または regionAutoscalers.patch メソッド(リージョン MIG の場合)を使用します。リクエストの本文に autoscalingPolicy.mode プロパティを含めます。

PATCH https://compute.googleapis.com/compute/v1/projects/my-project/regions/us-central1-f/autoscalers?autoscaler=my-autoscaler

{
  "autoscalingPolicy": {
    "mode":"MODE"
  }
}

次のように置き換えます。

  • MODE:
    • OFF にすると、オートスケーラーは無効になりますが、構成は維持されます。
    • ONLY_SCALE_OUT にすると、オートスケーラーのアクティビティがインスタンスの追加のみに制限されます。
    • ON にすると、ポリシーに従って、すべてのオートスケーラーのアクティビティが再び有効化されます。

自動スケーリング モードを ONLY_SCALE_OUT に設定すると、オートスケーラーは次のように動作します。

  • オートスケーラーは、負荷の減少やオートスケーラーの構成の変更に関係なく、MIG の targetSize 値を減らしません。
  • ゾーン MIG のターゲット サイズを手動で変更した場合、その値がオートスケーラーの推奨サイズよりも小さいと、手動で設定した推奨サイズがオーバーライドされます。
  • リージョン MIG のターゲット サイズは手動で変更できません。
  • オートスケーラーのモードが ONLY_SCALE_OUT に設定されているときに、autoscalingPolicy.maxNumReplicas フィールドにグループの現在の targetSize 値よりも小さい値を設定すると、オートスケーラーはグループ内のインスタンス数を減らしません。オートスケーラーは通常どおり、グループの推奨サイズを継続的に計算し、新しい最大値に合わせてグループの推奨サイズを減らしますが、グループはスケールインされません。
  • autoscalers.status フィールドに「Autoscaling operates in a restricted mode: ONLY_SCALE_OUT」という警告が表示されます。

オートスケーラーのモードを OFF に設定すると、オートスケーラーは次のように動作します。

  • オートスケーラーは、負荷またはオートスケーラー構成の変更に応じて MIG の targetSize 値を変更しません。オートスケーラーは通常どおり、グループの推奨サイズを継続的に計算し、新しい最大値に合わせてグループの推奨サイズを減らしますが、グループはスケールインされません。
  • ゾーンまたはリージョン MIG のターゲット サイズは手動で変更できます。自動スケーリング ポリシーの minNumReplicasmaxNumReplicas の値は、設定したサイズに影響しません。
  • プロアクティブなインスタンスの再配布が有効になっているリージョン MIG の自動スケーリングをオフにした場合や、MIG によるインスタンスの分配がゾーン間で均一でない場合、グループはプロアクティブにゾーン内のインスタンスを削除または再作成し、均等な分配状態を維持します。
  • autoscalers.status フィールドに「Autoscaling operates in a restricted mode: OFF」という警告が表示されます。

オートスケーラーのスケールイン レートの制御

ワークロードの初期化に時間がかかる場合は、スケールインの制御を構成して、急激なスケールイン イベントによるレスポンスのレイテンシや停止のリスクを軽減してください。たとえば、負荷が減少した直後に急増することが定期的に予想される場合が該当します。スケールイン レートを制限すると、オートスケーラーがワークロード損失の許容範囲を超えて VM インスタンスを割り当て、MIG のサイズを縮小させないようにします。

スケールインの制御の構成

スケールインの制御の構成は任意で、デフォルトでは構成されていません。構成されていない場合、オートスケーラーにはデフォルトの安定化メカニズムがそのまま適用されます。つまり、推奨サイズが、安定化期間中に観測されたピーク負荷への対応に必要なレベルに維持されます。

Console

自動スケーリングされた MIG のスケールイン制御を構成するには:

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. 自動スケーリングされた MIG の名前をクリックして、グループの概要ページを開きます。

  3. [編集] をクリックすると、自動スケーリングの設定をはじめとするグループの現在の構成が表示されます。

  4. [自動スケーリング] で [スケールインの制御] をクリックし、[スケールインの制御を有効にする] をオンにします。

  5. [次の数を超えるインスタンスによるスケールインを行わない] で、グループから一度に削除できるインスタンスの最大数または割合を指定します。

  6. [期間] で、インスタンスをグループから削除する頻度を指定します。

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

gcloud

オートスケーラーの作成時や更新時に、スケールインの制御を構成できます。

オートスケーラー作成時のスケールインの制御の構成

MIG のオートスケーラーを作成する際に gcloud compute instance-groups managed set-autoscaling コマンド--scale-in-control フラグを指定すると、スケールインの制御を設定できます。たとえば、example-group に自動スケーリングを構成するには、次のコマンドを使用します。

gcloud compute instance-groups managed set-autoscaling INSTANCE_GROUP_NAME \
    --target-cpu-utilization 0.6 \
    --max-num-replicas 50 \
    --scale-in-control max-scaled-in-replicas=MAX_SCALE_IN_REPLICAS,time-window=TIME_WINDOW

オートスケーラー更新時のスケールインの制御の構成

MIG の既存のオートスケーラーでスケールインの制御を更新するには、gcloud compute instance-groups managed update-autoscaling コマンド--scale-in-control フラグを指定します。たとえば、example-group の既存の自動スケーリング構成でスケールインの制御を設定するには、次のコマンドを使用します。

gcloud compute instance-groups managed update-autoscaling INSTANCE_GROUP_NAME \
    --scale-in-control max-scaled-in-replicas=MAX_SCALE_IN_REPLICAS,time-window=TIME_WINDOW

次のように置き換えます。

  • INSTANCE_GROUP_NAME: 更新する MIG の名前。
  • MAX_SCALE_IN_REPLICAS: ピークサイズから減らすことのできる最大 VM 数。ピークサイズは別途指定する追跡時間枠から取得されます。ここで指定する数の VM インスタンスが一度にスケールインされる可能性があります。そのため、サービスには余裕をもたせ、それだけの数の VM が一度に失われてもいいようにしておく必要があります。VM 数は数値または割合で指定できます。割合で指定する場合は % 記号を使用します。例: 50%
  • TIME_WINDOW: ピークサイズを取得する追跡時間枠。この追跡時間枠の範囲からピークサイズが取得されます。自動スケーリングは、許可された最大レプリカ数をこのピークサイズから差し引いた数を超えてスケールインされません。この値は、60 から 3,600 の範囲(単位: 秒)で指定します。

たとえば、この時間枠を 1,800 秒(30 分)に設定したとします。MIG の現在の推奨サイズを計算するときに、オートスケーラーは次のロジックを使用します。

  • 過去 30 分間のピークサイズを取得する(例: 100 VM)。
  • max-scaled-in-replicas を取得する(例: VM 10)
  • 推奨サイズの下限を設定する: ピークサイズ - max-scaled-in-replicas(100 - 10 = 90 VM)

REST

ゾーンまたはリージョンのオートスケーラー リソースの autoscalingPolicy.scaleInControl 構造内に maxScaledInReplicas フィールドと timeWindowSec フィールドを設定して、スケールインの制御を構成します。これらのフィールドにはデフォルト値がありません。両方のフィールドに値を指定する必要があります。

オートスケーラーの作成時や更新時に、スケールインの制御を構成できます。

オートスケーラー作成時のスケールインの制御の構成

ゾーン MIG の場合は、autoscalers.insert メソッドを使用し、リージョン MIG の場合は regionAutoscalers.insert メソッドを使用します。

POST
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/autoscalers

{
  "name": "AUTOSCALER_NAME",
  "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME",
  "autoscalingPolicy": {
    "minNumReplicas": 1,
    "maxNumReplicas": 5,
    "coolDownPeriodSec": 60,
    "cpuUtilization": {
      "utilizationTarget": 0.8
    },
    "scaleInControl": {
      "maxScaledInReplicas": {
           "fixed": MAX_SCALE_IN_REPLICAS
      },
      "timeWindowSec": TIME_WINDOW
    }
  }
}

オートスケーラーの作成について詳しくは、次の記事をご覧ください。

オートスケーラー更新時のスケールインの制御の構成

ゾーン MIG の場合は、autoscalers.patch メソッドを使用し、リージョン MIG の場合は regionAutoscalers.patch メソッドを使用します。

PATCH
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "minNumReplicas": 1,
    "maxNumReplicas": 5,
    "coolDownPeriodSec": 60,
    "cpuUtilization": {
      "utilizationTarget": 0.8
    },
    "scaleInControl": {
      "maxScaledInReplicas": {
           "fixed": MAX_SCALE_IN_REPLICAS
      },
      "timeWindowSec": TIME_WINDOW
    }
  }
}

次のように置き換えます。

  • AUTOSCALER_NAME: 作成するオートスケーラーの名前。オートスケーラーには、使用する MIG にちなんだ名前を付けることも、別の名前を付けることもできます。
  • INSTANCE_GROUP_NAME: オートスケーラーを追加する MIG の名前。リージョン MIG の場合は、zones/ZONEregions/REGION に置き換えます。
  • MAX_SCALE_IN_REPLICAS: 推奨されるターゲット ピークサイズから減らすことのできる最大 VM 数。ピークサイズは別途指定する追跡時間枠から取得されます。ここで指定する数の VM インスタンスが一度にスケールインされる可能性があります。そのため、サービスには余裕をもたせ、それだけの数の VM が一度に失われてもいいようにしておく必要があります。VM 数は数値または割合で指定できます。割合で指定する場合は maxScaledInReplicas.percentage を使用します。
  • TIME_WINDOW: 推奨ピークサイズを取得する追跡時間枠。この追跡時間枠の範囲から推奨ピークサイズが取得されます。自動スケーリングは、許可された最大レプリカ数をこのピークサイズから差し引いた数を超えてスケールインされません。この値は、60 から 3,600 の範囲(単位: 秒)で指定します。例: 1800

たとえば、この時間枠を 1,800 秒(30 分)に設定したとします。MIG の現在の推奨サイズを計算するときに、オートスケーラーは次のロジックを使用します。

  • 過去 30 分間のピークサイズを取得する(例: 100 VM)。
  • max-scaled-in-replicas を取得する(例: VM 10)
  • 推奨サイズの下限を設定する: ピークサイズ - max-scaled-in-replicas(100 - 10 = 90 VM)

スケールインの制御の詳しい仕組みについては、オートスケーラーによる判断についてをご覧ください。

スケールインの制御の現在の構成を取得する

スケールインの制御の現在の構成を取得するには、オートスケーラーに関する情報の取得をご覧ください。

スケールインの制御の削除

Google Cloud CLI または Compute Engine API を使用すると、スケールイン制御を削除し、スケールイン オペレーションのタイミングと規模を制限できます。

スケールインの制御が構成されていない場合は、オートスケーラーにはデフォルトの安定化メカニズムがそのまま適用されます。つまり、推奨サイズが、安定化期間中に観測されたピーク負荷への対応に必要なレベルに維持されます。

コンソール

自動スケーリングされた MIG のスケールイン制御を削除するには:

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. 自動スケーリングされた MIG の名前をクリックして、グループの概要ページを開きます。

  3. [編集] をクリックすると、自動スケーリングの設定をはじめとするグループの現在の構成が表示されます。

  4. [自動スケーリング] で [スケールインの制御] をクリックしてから、[スケールインの制御を有効にする] チェックボックスをオフにします。

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

gcloud

スケールイン制御を削除するには、gcloud compute instance-groups managed update-autoscaling コマンド--clear-scale-in-control フラグを使用します。たとえば、example-group の自動スケーリング構成からスケールイン制御を削除するには、次のコマンドを使用します。

gcloud compute instance-groups managed update-autoscaling example-group \
    --clear-scale-in-control

REST

スケールインの制御を削除するには、ゾーン MIG では autoscalers.patch メソッド、リーション MIG では regionAutoscalers.patch メソッドを使用し、スケールインの制御用に空の構成を指定します。

PATCH
https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scaleInControl": null
  }
}

次のように置き換えます。

  • AUTOSCALER_NAME: 更新するオートスケーラーの名前。既存のオートスケーラーとそのターゲット MIG のリストを取得するには、autoscalers.aggregatedList メソッドを使用します。

オートスケーラーの削除

オートスケーラー リソースとその履歴は完全に削除できます。自動スケーリングを一時的に停止し、オートスケーラー リソースとその構成と履歴を保持する場合は、オートスケーラーを無効にします。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

  2. リストで MIG の名前をクリックして、そのグループの概要ページを開きます。

  3. [編集] をクリックすると、自動スケーリングの設定をはじめとするグループの現在の構成が表示されます。

  4. [自動スケーリング] で [自動スケーリング モード] プルダウン リストから [自動スケーリングの構成を削除] を選択します。これにより、オートスケーラーが停止し、構成が削除されます。

  5. 完了したら [保存] をクリックします。

gcloud

stop-autoscaling コマンドを使用してオートスケーラーを停止し、構成を削除します。

gcloud compute instance-groups managed stop-autoscaling INSTANCE_GROUP_NAME

オートスケーラーを停止すると、MIG から削除されます。オートスケーラーを再起動するには、set-autoscaling コマンドを使用して再作成する必要があります。

gcloud CLI を使用して MIG を削除すると、MIG に接続されているオートスケーラーもすべて削除されます。

REST

オートスケーラーを停止して構成を削除するには、autoscalers.delete メソッド(ゾーン MIG の場合)またはregionAutoscalers.delete メソッド(リージョン MIG の場合)を使用します。

 DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers/AUTOSCALER_NAME

フィードバック

自動スケーリングに関するお客様のユースケース、課題、フィードバックを募集しています。mig-discuss@google.com にフィードバックをお送りください。

次のステップ