リージョン MIG の作成と管理

このドキュメントでは、リージョン マネージド インスタンス グループ(MIG)の作成と管理について説明します。MIG の作成に関する一般的な情報については、マネージド インスタンス グループの作成をご覧ください。

リージョン MIG は、リージョン内の複数のゾーンにインスタンスを分配します。これにより、MIG ベースのワークロードの復元力が向上します。複数のゾーンを使用することで、単一ゾーンのすべてのインスタンスで障害が発生する極端な事態から保護できます。

リージョン MIG を選択する理由、追加の構成オプション、ゾーン MIG との違いなどの詳細については、リージョン MIG の概要をご覧ください。

始める前に

制限事項

  • リージョン MIG を使用すると、1 つのリージョンに最大 2,000 台の VM を作成できます。各ゾーンには最大 1,000 台の VM を作成できます。1 つのゾーン MIG には最大 1,000 台の VM を作成できます。さらに多くの VM が必要な場合は、サポートにお問い合わせください。
  • MIG を更新するときは、1 回のリクエストで最大 1,000 台の VM を指定できます。
  • 複数のサブネットを持つ MIG は作成できません。一度作成した MIG のネットワークまたはサブネットワークは変更できません。
  • ステートフル MIG が必要な場合は、ステートフル MIG 制限事項を確認してください。

  • リージョン MIG を作成する際には、リージョン MIG に関連付けるゾーンを選択する必要があります。作成時に特定のゾーンを選択した場合、後でそのゾーンの変更や更新はできません。ただし、MIG のターゲット分散シェイプを設定すると、選択したマネージド インスタンス グループが選択したゾーンに分散する方法を指定できます。

  • グループのターゲット分配形態を ANY または BALANCED に設定する場合は、制限事項を確認してください。

  • リージョン MIG で負荷分散を使用する場合、次の制限が適用されます。

    • maxRate 分散モードは使用できません。
    • リージョン MIG で HTTP(S) 負荷分散スキームを使用する場合は、maxRatePerInstance または maxUtilization 分散モードを選択する必要があります。
  • リージョン MIG を自動スケーリングする場合は、次の制限が適用されます。

リージョン MIG の作成

Cloud Consolegcloud ツール、または Compute Engine API を使用します。

各ゾーンにグループの VM をサポートする十分なキャパシティがない場合、Compute Engine は可能な限り多くの VM を作成し、追加の容量が使用可能になると、引き続き残りの VM の作成を試みます。

リクエストで個別のゾーンを明示的に指定しない場合、Compute Engine は自動的に 3 つのゾーンを選択してそこに VM を作成します。3 つを超えるゾーンまたは 2 つ以下のゾーンに VM を作成する必要がある場合や、使用するゾーンを選択する場合は、リクエストでゾーンのリストを指定できます。詳しくは、ゾーンの選択をご覧ください。

デフォルトでは、MIG は、VM を選択したゾーンに均等に分散します。リージョン MIG を作成する場合、GPU や既存の永続ディスクなどの特定のリソースは、ゾーンリソースという点に注意してください。MIG のインスタンス テンプレートでゾーンリソースを指定する場合、リージョン MIG によって作成された VM に接続できるように、それらのリソースが選択したすべてのゾーンに存在することを確認する必要があります。あるいは、グループがゾーンリソースの存在を確認する場合は、MIG の分配形態を設定して、そのリソースを含むゾーンにのみインスタンスを作成できます。

プロアクティブなインスタンスの再分配は、デフォルトで有効になっています。各ゾーンの VM の数を手動で管理する必要がある場合や、MIG のターゲット分配形態を BALANCED に設定する場合は、プロアクティブなインスタンスの再分配を無効にする必要があります。プロアクティブなインスタンスの再分配を無効にし、自動スケーリングを使用する場合は、EVEN分配形態を設定し、スケールアウトのみにオートスケーラーを制限する必要があります。

Console

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

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

  2. [インスタンス グループを作成] をクリックして、新しいインスタンス グループを作成します。
  3. [新しいマネージド インスタンス グループ] のオプション(ステートレスかステートフル)を選択します(デフォルトはステートレスです)。
  4. [ロケーション] で、[複数のゾーン] を選択します。
  5. リージョンを選択します。
  6. 特定のゾーンを選択する場合、[ゾーンを設定] をクリックして、使用するゾーンを選択して構成します。
  7. [ターゲット分配形態] で [均等] を選択します。別の形態を選択する場合は、ゾーン間でのインスタンスの分配ポリシーの設定をご覧ください。
  8. プロアクティブなインスタンスの再分配を無効にするには、次の手順を行います。
    1. [自動スケーリング モード] を [自動スケーリングしない] に設定します。
    2. [インスタンスの再配布] を [オフ] に設定します。
  9. インスタンス グループ用のインスタンス テンプレートを選択するか、新しいインスタンス テンプレートを作成します。
  10. このグループの VM の数を指定します。ゾーンに障害が発生した場合に備えて、アプリケーションのサポートに十分な VM をプロビジョニングしてください。
  11. 残りの MIG 作成手順を続けます。

gcloud

すべての MIG には、インスタンス テンプレートが必要です。ない場合は、インスタンス テンプレートを作成してください。たとえば、次のコマンドを使用して、デフォルト プロパティを含む基本的なインスタンス テンプレートを作成します。

gcloud compute instance-templates create example-template

次に、--region フラグを指定して instance-groups managed create コマンドを使用します。たとえば、次のコマンドは、us-east1 リージョン内の 3 つのゾーンにリージョン MIG を作成します。

gcloud compute instance-groups managed create example-rmig \
    --template example-template  \
    --size 30 \
    --region us-east1

グループで使用する特定のゾーンを選択する必要がある場合は、--zones フラグを指定します。

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c

プロアクティブなインスタンスの再配布を無効にするには、--instance-redistribution-type フラグを NONE に設定します。自動スケーリングが有効になっている場合は、プロアクティブなインスタンスの再配布を無効にできません。

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --instance-redistribution-type NONE \
    --region us-east1

API

すべての MIG には、インスタンス テンプレートが必要です。ない場合は、インスタンス テンプレートを作成してください。

次に、regionInstanceGroupManagers.insert メソッドに対する POST リクエストを作成します。リクエストの本文で、グループ名、グループサイズ、インスタンス テンプレートの URL を指定します。必要に応じて、他のフィールド(グループのベース名など)を指定します。

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

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE"
}

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

  • PROJECT_ID: このリクエストのプロジェクト ID。
  • REGION: グループのリージョン。
  • BASE_INSTANCE_NAME: グループの一部として作成された各 VM インスタンスのインスタンス名。たとえば、ベース インスタンス名が example-instance の場合、example-instance-[RANDOM_STRING] のような名前のインスタンスが作成されます。ここで、[RANDOM_STRING] はサーバーによって生成されます。
  • INSTANCE_TEMPLATE_NAME: 使用するインスタンス テンプレート。
  • INSTANCE_GROUP_NAME: MIG の名前。
  • TARGET_SIZE: グループの VM のターゲット数。

特定のゾーンを選択する場合や、3 つ未満あるいは 3 つを超えるゾーンを含むリージョンで VM を作成する場合、リクエストに distributionPolicy プロパティを含めて、ゾーンのリストを指定します。ZONE は、VM を作成するゾーンの名前に置き換えます。

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

{
  "baseInstanceName": "BASE_INSTANCE_NAME",
  "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
  "name": "INSTANCE_GROUP_NAME",
  "targetSize": "TARGET_SIZE",
  "distributionPolicy": {
     "zones": [
       {"zone": "zones/ZONE"},
       {"zone": "zones/ZONE"}
      ]
   }
}

たとえば、次のようにすると、us-east1-b ゾーンと us-east1-c ゾーンにわたり、10 個のマネージド インスタンスが分配された example-rmig という名前のリージョン MIG が作成されます。

POST https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-east1/instanceGroupManagers

{
  "instanceTemplate": "global/instanceTemplates/example-instance",
  "name": "example-rmig",
  "targetSize": 10,
  "distributionPolicy": {
      "zones": [
        {"zone": "zones/us-east1-b"},
        {"zone": "zones/us-east1-c"}
      ]
   }
}

リージョン MIG のマネージド インスタンスの操作

特定の名前を持つインスタンスの作成や削除など、MIG 内の特定のマネージド インスタンスを操作する方法は、リージョン MIG とゾーンの MIG で変わりはありません。マネージド インスタンスの操作をご覧ください。

リージョン MIG とマネージド インスタンスに関する情報の取得

構成の表示やステータスの確認など、MIG に関する情報を取得する方法や、MIG のマネージド インスタンスに関する情報を取得する方法は、リージョン MIG とゾーン MIG で変わりありません。MIG とマネージド インスタンスに関する情報の取得をご覧ください。

リージョン マネージド インスタンス グループを更新する

Updater 機能を使用して、新しいインスタンス テンプレートをリージョン MIG に適用できます。詳細については、リージョン MIG の更新をご覧ください。

MIG でインスタンスを追加または削除する場合は、マネージド インスタンスの操作をご覧ください。

MIG 機能を使用または更新する場合は、自動修復負荷分散自動スケーリング自動更新ステートフル ワークロードのドキュメントをご覧ください。

MIG の作成後、MIG に別のゾーンを選択することはできません。ただし、MIG のターゲット分配形態を更新して、グループがマネージド インスタンスを特定のゾーン間で分配する方法を変更できます。

ゾーン間でのインスタンスの分配ポリシーを設定する

リージョン MIG のターゲット分配形態は、次のいずれかに設定できます。

  • 均等(デフォルト): 選択されたゾーン全体で同じ数のマネージド インスタンスが維持されるように、VM インスタンスの作成と削除をスケジューリングします。2 つのゾーン間でマネージド インスタンス数が 2 個以上異なる場合でも均等に分配されます。これは、高可用性サービスを提供するワークロードに適しています。

  • バランス: リソースの取得を優先します。選択されたゾーンでリソースをできるだけ均等に分配してゾーン障害の影響を最小限に抑えながら、ゾーン内の VM をスケジューリングします。自動スケーリングを必要としない高可用性サービスを提供するワークロードまたはバッチ ワークロードに適しています。

  • 任意: リクエストされた数の VM を現在のリソース制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。

選択方法については、比較表ユースケース分配形態の仕組みをご覧ください。

ターゲット分配形態は、グループの作成時または既存のグループのターゲット分配形態の更新時に設定します。

制限事項

  • MIG を作成するときにのみ、MIG のゾーンを選択できます。
  • インスタンス テンプレートで、選択したゾーンの一部で利用できないリソースを指定すると、次の制限が適用されます。

    • ターゲット分配形態ANY または BALANCED に設定する必要があります。
    • 選択したゾーンの少なくとも 1 つで、必要なリソースが使用できるようにする必要があります。特定のゾーンで使用できる Compute Engine リソースについては、使用可能なリージョンとゾーンをご覧ください。
    • グループのインスタンス テンプレートを、選択したすべてのゾーンでインスタンス化できないテンプレートに更新する場合は、サポートされないすべてのゾーンからマネージド インスタンスを削除した後、新しいテンプレートを設定する必要があります。
  • ターゲット分配形態を BALANCED に設定した場合、プロアクティブな再分配を無効にする必要があります。

  • ターゲット分配形態を BALANCED または ANY に設定した場合は、次の制限があります。

    • 自動スケーリングはサポートされません。MIG のサイズの設定インスタンスの追加は可能です。
    • 2 つのバージョンを使用するカナリア更新はサポートされません。
    • リージョン全体でリクエストされたリソースの可用性が制限されている場合、リソースがすでに利用不能になっているゾーンで VM インスタンスの作成がスケジューリングされることがあります。グループサイズの増減を行うことで、他のゾーンでリクエストされたリソースを取得できます。
    • SUBSTITUTE 置換メソッドを使用するローリング アップデートでは、ゾーンに新しいバージョンの要件を満たすリソースがない場合でも、更新された新しいインスタンスが古いマシンと同じゾーンに作成されます。この動作を調整するには、制約のあるゾーンから古い VM を削除し、削除した VM の数だけグループサイズを大きくします。容量のあるゾーンに最新のテンプレートからインスタンスが作成されます。
    • グループのインスタンス テンプレートを、選択したゾーンでは使用できないリソースを指定するテンプレートに更新する場合は、サポートされていないゾーンからマネージド インスタンスを削除した後、新しいテンプレートを設定する必要があります。
  • 単一テナント VM のグループをプロビジョニングする必要がある場合は、MIG のターゲット分配形態を EVEN に設定する必要があります。MIG のゾーンと同じゾーンにノードグループを作成し、MIG のインスタンス テンプレート内に MIG のノード アフィニティを設定します。

ターゲット分配形態でグループを作成する

グループを作成してそのゾーンを選択し、ターゲット分配形態を設定するには、Cloud Consolegcloud ツール、または Compute Engine API を使用します。

Console

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

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

  2. [インスタンス グループを作成] をクリックして、新しいインスタンス グループを作成します。
  3. [新しいマネージド インスタンス グループ] のオプション(ステートレスかステートフル)を選択します(デフォルトはステートレスです)。
  4. [ロケーション] で、[複数のゾーン] を選択します。
  5. リージョンを選択します。
  6. 特定のゾーンまたはすべてのゾーンを選択する場合は、[ゾーンを設定] をクリックして、使用するゾーンを選択します。
  7. ターゲット分配形態を選択します。
    1. [任意] または [バランス] を選択する場合は、[自動スケーリング] セクションで [自動スケーリングの構成を削除] をクリックします。
    2. [バランス] を選択した場合、[インスタンスの再分配] セクションで [インスタンスの再分配を有効にする] を選択しないでください。
    3. [ターゲット分配形態] で形態を選択します。
  8. インスタンス グループ用のインスタンス テンプレートを選択するか、新しいインスタンス テンプレートを作成します。
  9. このグループの VM の数を指定します。高可用性ワークロードの場合、ゾーン障害の発生に備えてアプリケーションのサポートに十分な VM をプロビジョニングします。
  10. 残りの MIG 作成手順を続けます。

gcloud

gcloud compute instance-groups managed create コマンドを使用して、--target-distribution-shape フラグを含めます。

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template TEMPLATE \
    --size SIZE \
    [--zones ZONES \]
    --target-distribution-shape SHAPE

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

  • INSTANCE_GROUP_NAME: インスタンス グループの名前。
  • TEMPLATE: グループに使用するインスタンス テンプレートの名前。
  • SIZE: インスタンス グループのターゲット サイズ。
  • ZONES(省略可): VM インスタンスをデプロイするリージョン内のゾーンのリスト。
  • SHAPE: ターゲット分配形態。次のいずれかの値です。
    • EVEN: 選択されたゾーン全体で同じ数のマネージド インスタンスが維持されるように、VM インスタンスの作成と削除をスケジューリングします。2 つのゾーン間でマネージド インスタンス数が 2 個以上異なる場合でも均等に分配されます。これは、高可用性サービスを提供するワークロードに適しています。
    • BALANCED: リソースの取得を優先します。選択されたゾーンでリソースをできるだけ均等に分配してゾーン障害の影響を最小限に抑えながら、ゾーン内の VM をスケジューリングします。自動スケーリングを必要としない高可用性サービスを提供するワークロードまたはバッチ ワークロードに適しています。
    • ANY: リクエストされた数の VM を現在の容量制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。

たとえば、ターゲット分配形態が「バランス」のリージョン MIG を作成するには、--target-distribution-shape フラグを balanced に設定します。

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --target-distribution-shape BALANCED \
    --instance-redistribution-type NONE

API

regionInstanceGroupManagers.insert メソッド. In the request body, include thedistributionPolicyproperty, and set itstargetShape` フィールドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
    "instanceTemplate": "global/instanceTemplates/TEMPLATE",
    "targetSize": SIZE,
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ],
        "targetShape": SHAPE
    }
}

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

  • PROJECT_ID: このリクエストのプロジェクト ID。
  • REGION: インスタンス グループのリージョン。
  • INSTANCE_GROUP_NAME: インスタンス グループの名前。
  • TEMPLATE: インスタンス グループに使用するインスタンス テンプレートの名前。
  • SIZE: インスタンス グループのターゲット サイズ。
  • ZONE: VM インスタンスをデプロイするリージョン内のゾーン名。
  • SHAPE: ターゲット分配形態。次のいずれかの値です。
    • EVEN: 選択されたゾーン全体で同じ数のマネージド インスタンスが維持されるように、VM インスタンスの作成と削除をスケジューリングします。2 つのゾーン間でマネージド インスタンス数が 2 個以上異なる場合でも均等に分配されます。これは、高可用性サービスを提供するワークロードに適しています。
    • BALANCED: リソースの取得を優先します。選択されたゾーンでリソースをできるだけ均等に分配してゾーン障害の影響を最小限に抑えながら、ゾーン内の VM をスケジューリングします。自動スケーリングを必要としない高可用性サービスを提供するワークロードまたはバッチ ワークロードに適しています。
    • ANY: リクエストされた数の VM を現在の容量制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。

既存のグループのターゲット分配形態を変更する

既存のリージョン MIG のターゲット分配形態は、変更できますが次の制限があります。

  • ターゲット分配形態を BALANCED に変更する場合は、まずプロアクティブな再分配を無効にする必要があります。
  • ターゲット分配形態を EVEN に変更する場合、インスタンスの現在の分配が不均等になっているときは、最初にプロアクティブな再分配を無効にする必要があります。
  • 形態を EVEN に変更し、プロアクティブな再分配を再度有効にする場合は、グループを手動で再調整する必要があります。
  • ターゲット分配形態を EVEN に変更するときに、インスタンス テンプレートが、選択したゾーンの一部でサポートされないリソースを指定している場合は、まず、そのグループのインスタンス テンプレートを選択されたすべてのゾーンでサポートされるように更新します。

Console

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

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

  2. リストの [名前] 列で、ターゲット分配形態を変更するインスタンス グループの名前をクリックします。
  3. [編集] をクリックして、このマネージド インスタンス グループを変更します。
  4. [ターゲット分配形態] で、目的の形態を指定します。
  5. [保存] をクリックして、新しいテンプレートを適用します。

gcloud

gcloud compute instance-groups managed update コマンドを使用して、--target-distribution-shape フラグを含めます。

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --target-distribution-shape SHAPE

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

  • INSTANCE_GROUP_NAME: インスタンス グループの名前。
  • SHAPE: ターゲット分配形態。次のいずれかの値です。
    • EVEN: 選択されたゾーン全体で同じ数のマネージド インスタンスが維持されるように、VM インスタンスの作成と削除をスケジューリングします。2 つのゾーン間でマネージド インスタンス数が 2 個以上異なる場合でも均等に分配されます。これは、高可用性サービスを提供するワークロードに適しています。
    • BALANCED: リソースの取得を優先します。選択されたゾーンでリソースをできるだけ均等に分配してゾーン障害の影響を最小限に抑えながら、ゾーン内の VM をスケジューリングします。自動スケーリングを必要としない高可用性サービスを提供するワークロードまたはバッチ ワークロードに適しています。
    • ANY: リクエストされた数の VM を現在の容量制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。

API

regionInstanceGroupManagers.patch メソッドを呼び出します。リクエストの本文に distributionPolicy プロパティを含め、targetShape フィールドを設定します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
    "distributionPolicy": {
        "targetShape": SHAPE
    }
}

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

  • PROJECT_ID: このリクエストのプロジェクト ID。
  • REGION: インスタンス グループのリージョン。
  • INSTANCE_GROUP_NAME: インスタンス グループの名前。
  • SHAPE: ターゲット分配形態。次のいずれかの値です。
    • EVEN: 選択されたゾーン全体で同じ数のマネージド インスタンスが維持されるように、VM インスタンスの作成と削除をスケジューリングします。2 つのゾーン間でマネージド インスタンス数が 2 個以上異なる場合でも均等に分配されます。これは、高可用性サービスを提供するワークロードに適しています。
    • BALANCED: リソースの取得を優先します。選択されたゾーンでリソースをできるだけ均等に分配してゾーン障害の影響を最小限に抑えながら、ゾーン内の VM をスケジューリングします。自動スケーリングを必要としない高可用性サービスを提供するワークロードまたはバッチ ワークロードに適しています。
    • ANY: リクエストされた数の VM を現在の容量制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。

構成されたインスタンス分配ポリシーを表示する

Console

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

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

    既存のインスタンス グループがある場合は、このページにそのグループのリストが表示されます。
  2. 確認するインスタンス グループの名前をクリックします。ページが開き、インスタンス グループ プロパティと、グループに含まれるインスタンスのリストが表示されます。
  3. [詳細] をクリックします。
  4. [ロケーション] セクションで、[ターゲット分配形態] を確認します。

gcloud

gcloud compute instance-groups managed describe コマンドを実行します。

gcloud compute instance-groups managed describe INSTANCE_GROUP_NAME \
    --region REGION

このコマンドは、distributionPolicy.targetShape フィールドを含むグループの詳細を返します。

...
distributionPolicy:
  targetShape: BALANCED
  zones:
  - zone: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f
  ...
name: my-group
region: https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1
...

API

regionInstanceGroupManagers.get メソッドに対して GET リクエストを作成します。

GET https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

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

  • PROJECT_ID: このリクエストのプロジェクト ID
  • REGION: インスタンス グループのリージョン
  • INSTANCE_GROUP_NAME: インスタンス グループの名前

ターゲット分配形態が distributionPolicy.targetShape フィールドに返されます。例:

{
  "name": "my-instance-group",
  "distributionPolicy": {
    "targetShape": "BALANCED",
  },
  "targetSize": 50,
  ...
}

プロアクティブなインスタンスの再配布の無効化と有効化

プロアクティブなインスタンスの再配布を使用すると、リージョン内のゾーン間で VM 数が均等に保たれます。この構成により、ゾーンレベルで障害が発生した場合のアプリケーションの可用性が最大化されます。

プロアクティブなインスタンスの再配布は、リージョン MIG ではデフォルトで有効になっていますが、自動スケーリングが有効になっていない MIG では無効にできます。プロアクティブなインスタンスの再配布を無効にすると、VM はゾーン間でプロアクティブに再配布されません。この設定は、次のような場合に便利です。

  • 実行中の他の VM に影響を与えずに、VM をグループから削除または放棄する。たとえば、ジョブの完了後、他のワーカーに影響を与えずにバッチワーカー VM を削除できます。
  • プロアクティブな再分配による望まない自動削除からステートフル ワークロードの VM を保護する。
  • MIG のターゲット分配形態BALANCED に設定する。

プロアクティブなインスタンスの再分配を無効にしてリージョン MIG を作成する場合、または既存のグループでプロアクティブなインスタンスの再分配をオフまたはオンにする場合は、Cloud Consolegcloud ツール、または Compute Engine API を使用します。

プロアクティブなインスタンスの再分配が無効なグループを作成する

Console

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

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

  2. [インスタンス グループを作成] をクリックして、新しいインスタンス グループを作成します。
  3. [ロケーション] で、[複数のゾーン] を選択します。
  4. リージョンを選択します。
  5. 特定のゾーンを選択する場合、[ゾーンを設定] をクリックして、使用するゾーンを選択して構成します。
  6. プロアクティブなインスタンスの再配布を無効にするには、次の手順を行います。
    1. [自動スケーリング モード] を [自動スケーリングしない] に設定します。
    2. [インスタンスの再配布] を [オフ] に設定します。
  7. グループ用のインスタンス テンプレートを選択するか、新しいインスタンス テンプレートを作成します。
  8. このグループの VM の数を指定します。ゾーンに障害が発生した場合に備えて、アプリケーションのサポートに十分な VM をプロビジョニングしてください。
  9. 残りの MIG 作成手順を続けます。

gcloud

プロアクティブなインスタンスの再配布を行わずに新しいリージョン MIG を作成するには、--instance-redistribution-type フラグを NONE に設定して gcloud compute instance-groups managed create コマンドを使用します。

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE_NAME \
    --size TARGET_SIZE \
    --zones ZONES \
    --instance-redistribution-type NONE

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

  • INSTANCE_GROUP_NAME: MIG の名前
  • INSTANCE_TEMPLATE_NAME: グループに使用するインスタンス テンプレートの名前
  • TARGET_SIZE: グループのターゲット サイズ
  • ZONES: VM をデプロイする単一リージョン内のゾーンのリスト

例:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --instance-redistribution-type NONE

API

プロアクティブなインスタンスの再配布と自動スケーリングを行わないリージョン MIG を作成するには、regionInstanceGroupManagers.insert メソッドに POST リクエストを行います。リクエストの本文に updatePolicy プロパティを含め、instanceRedistributionType フィールドを NONE に設定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
    "name": "INSTANCE_GROUP_NAME",
    "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
    "targetSize": "TARGET_SIZE",
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

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

  • PROJECT_ID: このリクエストのプロジェクト ID
  • REGION: インスタンス グループのリージョン
  • INSTANCE_GROUP_NAME: MIG の名前
  • INSTANCE_TEMPLATE_NAME: グループに使用するインスタンス テンプレートの名前
  • TARGET_SIZE: インスタンス グループのターゲット サイズ
  • ZONE: VM をデプロイする単一のリージョン内のゾーンの名前

プロアクティブなインスタンスの再配布を無効にする

プロアクティブなインスタンスの再配布を無効にする前に、オートスケーラーのモードを設定して自動スケーリングをオフにするか、スケーリングをスケールアウトに制限する必要があります。

Console

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

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

  2. リストの [名前] 列で、変更するインスタンス グループの名前をクリックします。
  3. [編集] をクリックして、このマネージド インスタンス グループを変更します。
  4. 自動スケーリング構成が存在する場合は、[自動スケーリング モード] が [自動スケーリングしない] に設定されていることを確認してください。
  5. [インスタンスの再配布] を [オフ] に設定し、自動再配布を無効にします。
  6. [保存] をクリックします。

gcloud

自動スケーリングを行わないリージョン MIG のプロアクティブなインスタンスの再配布をオフにするには、--instance-redistribution-type フラグを NONE に設定して compute instance-groups managed update コマンドを使用します。

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --instance-redistribution-type NONE \
    --region REGION

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

  • INSTANCE_GROUP_NAME: MIG の名前
  • REGION: インスタンス グループのリージョン

API

自動スケーリングされないリージョン MIG のプロアクティブなインスタンスの再配布を無効にするには、regionInstanceGroupManagers.patch メソッドPATCH リクエストを行います。リクエストの本文に updatePolicy プロパティを含め、instanceRedistributionType フィールドを NONE に設定します。

 PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/[INSTANCE_GROUP_NAME

{
    "updatePolicy": {
         "instanceRedistributionType": "NONE"
    }
}

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

  • PROJECT_ID: このリクエストのプロジェクト ID
  • REGION: インスタンス グループのリージョン
  • INSTANCE_GROUP_NAME: 自動スケーリングされない MIG の名前

プロアクティブなインスタンスの再配布を有効にする

プロアクティブなインスタンスの再配布を有効にするには、プロアクティブなインスタンスの再配布を無効にすると同様のコマンドを使用しますが、インスタンスの配布タイプを PROACTIVE に設定します。

マネージド インスタンスを手動で削除または放棄し、リージョンで VM 数の不均等が発生した場合は、プロアクティブなインスタンスの再配布を有効にする前に、グループの調整を手動で行う必要があります。2 つのゾーン間での VM 数の差は、1 VM 以下にする必要があります。

ゾーン間の VM 数が不均等な(2 つのゾーン間の VM 数の差が 2 以上の)状態にある間、そのリージョン MIG ではプロアクティブなインスタンスの再配布を有効にできません。これは、不均等を是正するために、VM 数の多いゾーンから VM が自動的に削除されないようにするためです。

リージョン MIG を手動で再調整する

MIG は、2 つのゾーン間での VM の数の差が 2 つ以上の VM の場合には分配されません。プロアクティブなインスタンスの再配布を無効にした後、インスタンスを削除または破棄して、ゾーン間の分配が不均一になると、MIG が不足する場合があります。

ゾーン間のインスタンス数を手動で均等にするには、インスタンス数が多いゾーンから VM を削除します。あるいは、サイズを変更して、インスタンスが均等な状態になるまで VM の少ないゾーンにインスタンスを追加します。

プロアクティブなインスタンスの再配布が無効になっている MIG のサイズを変更すると、状況に応じてグループ内の調整が行われるため、グループのバランスを調整する機会が完全に失われるわけではありません。

  • グループのサイズを大きくすると、VM 数が最も少ないゾーンにインスタンスが追加されます。
  • グループのサイズを小さくすると、インスタンス数が最も多いゾーンからインスタンスが削除されます。
グループサイズを手動で変更して均等な配布を実現する例

リージョン MIG のゾーンの停止をシミュレーションする

リージョン MIG が十分にプロビジョニングされており、ゾーンが停止した場合でも継続できることをテストするには、以下の例を使用してゾーン障害をシミュレートします。

このスクリプトはデフォルトのシナリオとして、Apache を停止して開始します。使用しているアプリケーションに適さない場合は、Apache を停止および開始するコマンドを、該当する障害と復元のシナリオに置き換えます。

  1. このスクリプトをグループ内のすべての VM にデプロイし、継続的に実行します。それには、スクリプトをインスタンス テンプレートに追加するか、カスタム イメージにスクリプトを組み込んで、そのイメージをインスタンス テンプレートで使用します。

    #!/usr/bin/env bash
    
    # Copyright 2016 Google Inc. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    set -o nounset
    set -o errexit
    set -o pipefail
    
    function GetMetadata() {
      curl -s "$1" -H "Metadata-Flavor: Google"
    }
    
    PROJECT_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/project/attributes"
    INSTANCE_METADATA_URL="http://metadata.google.internal/computeMetadata/v1/instance"
    ZONE=$(GetMetadata "$INSTANCE_METADATA_URL/zone" | cut -d '/' -f 4)
    INSTANCE_NAME=$(hostname)
    
    # We keep track of the state to make sure failure and recovery is triggered only once.
    STATE="healthy"
    while true; do
      if [[ "$ZONE" = "$(GetMetadata $PROJECT_METADATA_URL/failed_zone)" ]] && \
         [[ "$INSTANCE_NAME" = *"$(GetMetadata $PROJECT_METADATA_URL/failed_instance_names)"* ]]; then
        if [[ "$STATE" = "healthy" ]]; then
          STATE="failure"
          # Do something to simulate failure here.
          echo "STARTING A FAILURE"
          /etc/init.d/apache2 stop
        fi
      else
        if [[ "$STATE" = "failure" ]] ; then
          STATE="healthy"
          # Do something to recover here.
          echo "RECOVERING FROM FAILURE"
          /etc/init.d/apache2 start
        fi
      fi
      sleep 5
    done
    
    
  2. 2 つのプロジェクトのメタデータ項目を設定して、ゾーンの障害をシミュレーションします。

    • failed_zone: 停止した場合をシミュレーションするゾーンを設定します(障害が発生するゾーンを 1 つに限定します)。
    • failed_instance_names: オフラインにする VM を名前で選択します(これにより、この文字列を含む VM 名のみに障害が限定されます)。

    このメタデータを設定するには、gcloud ツールを使用します。たとえば、次のコマンドではゾーンの停止を europe-west1-b ゾーンに設定し、base-instance-name で始まる名前の VM にゾーン停止状態を適用します。

    gcloud compute project-info add-metadata --metadata failed_zone='europe-west1-b',failed_instance_names='base-instance-name-'
  3. 停止状態をシミュレーションしたら、メタデータキーを削除して障害から復元します。

    gcloud compute project-info remove-metadata --keys failed_zone,failed_instance_names

このスクリプトを使用して実行できる障害の事例は次のとおりです。

  • アプリケーションを完全に停止して、MIG がどのように対処するかを確認する。
  • VM に対する負荷分散ヘルスチェックの結果が「異常」になるようにする。
  • VM との間で一部のトラフィックの流れが遮断されるように、iptables を変更する。
  • VM をシャットダウンする。デフォルトでは直後にリージョン MIG によって VM が再作成されますが、新しく作成された VM も、メタデータ値が設定されている限り、スクリプトが実行されるとすぐにシャットダウンします。その結果、障害ループが発生します。

次のステップ