リージョン MIG 内の VM のターゲット分配形態を設定する


リージョン マネージド インスタンス グループ(MIG)を使用する場合は、その MIG のターゲット分配形態を次のいずれかのオプションに設定できます。

  • EVEN(デフォルト): 選択されたゾーン全体で同じ数の VM を完成、維持するために、VM の作成と削除が行われます。EVEN 分配では、2 つのゾーン間の VM の数の差が 1 つ以内になります。これは、高可用性サービスを提供するワークロードに適しています。
  • BALANCED: リソースが利用可能なゾーンで VM の作成を優先しますが、選択したゾーンに可能な限り均等に VM を分配して、ゾーン障害の影響を最小限に抑えます。これは、高可用性サービスを提供するワークロードやバッチ ワークロードに適しています。
  • ANY: リクエストされた数の VM を現在のリソース制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。
  • ANY SINGLE ZONE: 1 つのゾーン内にすべての VM インスタンスを作成するグループです。ゾーンは、ハードウェア サポート、現在のリソースと割り当ての可用性、および一致する予約に基づいて選択されます。VM 間の大規模な通信が必要なワークロードには、コンパクトなインスタンス配置ポリシーと組み合わせて使用することをおすすめします。

リージョン マネージド インスタンス グループで予約済み VM を使用するには、該当する各ゾーンに同じ名前で同一の予約を作成します。次に、グループのインスタンス テンプレートの名前を使用して、それらの予約を対象にします。

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

リージョン MIG を作成するか、既存のリージョン MIG のターゲット分配形態を更新するときに、ターゲット分配形態を設定します。

準備

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

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      詳細については Set up authentication for a local development environment をご覧ください。

      REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

制限事項

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

    • ターゲット分配形態BALANCEDANY または ANY_SINGLE_ZONE に設定する必要があります。
    • MIG で必要なリソース(既存のディスク、マシンタイプ、GPU など)が、選択したゾーンのうち少なくとも 1 つで使用可能であることを確認する必要があります。
    • MIG の構成(インスタンス テンプレートなど)を、選択したすべてのゾーンでインスタンス化できない構成に更新する場合は、新しい構成を設定する前に、サポートされていないすべてのゾーンからマネージド インスタンスを削除する必要があります。
  • ターゲット分配形態を BALANCED または ANY_SINGLE_ZONE に設定するには、プロアクティブなインスタンスの再分配を無効にする必要があります。

  • リージョン MIG を自動スケーリングする場合は、グループのターゲット分配形態BALANCEDプレビュー)または EVEN に設定する必要があります。
  • ターゲット分配形態を BALANCEDANYANY_SINGLE_ZONE に設定した場合は、次の制限があります。

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

  • 単一テナント VM のグループをプロビジョニングする必要がある場合は、MIG のターゲット分配形態を EVEN に設定する必要があります。MIG のゾーンと同じゾーンにノードグループを作成し、MIG のインスタンス テンプレート内に MIG のノード アフィニティを設定します。

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

グループを作成してそのゾーンを選択し、ターゲット分配形態を設定するには、Google Cloud コンソールgcloud CLI Terraform、またはRESTを使用します。

コンソール

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

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

  2. [インスタンス グループを作成] をクリックして、新しいインスタンス グループを作成します。
  3. [新しいマネージド インスタンス グループ] のオプション(ステートレスかステートフル)を選択します(デフォルトはステートレスです)。
  4. インスタンス グループに名前と説明(省略可)を割り当てます。
  5. インスタンス グループ用のインスタンス テンプレートを選択するか、新しいインスタンス テンプレートを作成します。
  6. このグループの VM の数を指定します。高可用性ワークロードの場合、ゾーン障害の発生に備えてアプリケーションのサポートに十分な VM をプロビジョニングします。
  7. [ロケーション] で、[複数のゾーン] を選択します。
  8. リージョンを選択し、使用するゾーンを選択します。

    • MIG でリージョン内のすべてのゾーンを使用できるようにするには、使用可能なすべてのゾーンを選択します。
    • リージョン MIG を更新しても、作成後に別のゾーンを使用することはできません。
  9. ターゲット分配形態を選択します。

    1. [任意] または [任意の単一ゾーン] を選択する場合は、[自動スケーリング] セクションで [自動スケーリング モード] をクリックし、[自動スケーリングの構成を削除] を選択します。
    2. [任意の単一ゾーン] または [バランス] を選択する場合は、[インスタンスの再分配] セクションで インスタンスの再配布を有効にするを選択しないでください。
  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 \
    --region REGION \
    --zones ZONES \
    --target-distribution-shape SHAPE

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

  • INSTANCE_GROUP_NAME: インスタンス グループの名前。
  • TEMPLATE: グループに使用するインスタンス テンプレートの名前。
  • SIZE: インスタンス グループのターゲット サイズ。
  • REGION: グループを配置するリージョン。
  • ZONES(省略可): VM インスタンスをデプロイするリージョン内のゾーンのリスト。デフォルトでは、Compute Engine によって 3 つのゾーンが選択されます。

    • MIG でリージョン内のすべてのゾーンを使用できるようにするには、使用可能なすべてのゾーンを指定します。リージョン内のゾーンのリストを取得するには、次のコマンドを使用します。

      gcloud compute zones list --filter=region:REGION --format='list(NAME)'
    • リージョン MIG を更新しても、作成後に別のゾーンを使用することはできません。

  • SHAPE: ターゲット分配形態。次のいずれかの値です。

    • even(デフォルト): 選択されたゾーン全体で同じ数の VM を完成、維持するために、VM の作成と削除を行います。EVEN 分配では、2 つのゾーン間の VM の数の差が 1 つ以内になります。これは、高可用性サービスを提供するワークロードに適しています。
    • balanced: リソースが利用可能なゾーンで VM の作成を優先しますが、選択したゾーンに可能な限り均等に VM を分配して、ゾーン障害の影響を最小限に抑えます。これは、高可用性サービスを提供するワークロードやバッチ ワークロードに適しています。
    • any: リクエストされた数の VM を現在のリソース制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。
    • any-single-zone: 1 つのゾーン内にすべての 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

Terraform

MIG 内の各 VM に必要なマシンタイプ、ブートディスク イメージ、ネットワーク、その他の VM プロパティを指定するインスタンス テンプレートをまだ作成していない場合は、インスタンス テンプレートを作成します。

リージョン MIG を作成するには、google_compute_region_instance_group_manager リソースを使用します。

次の例では、ターゲット分配形態が BALANCED のリージョン MIG を作成します。

resource "google_compute_region_instance_group_manager" "default" {
  name                             = "example-rmig"
  region                           = "us-east1"
  distribution_policy_zones        = ["us-east1-b", "us-east1-c"]
  distribution_policy_target_shape = "BALANCED"
  update_policy {
    type                         = "PROACTIVE"
    minimal_action               = "REFRESH"
    instance_redistribution_type = "NONE"
    max_unavailable_fixed        = 3
  }
  target_size        = 30
  base_instance_name = "instance"
  version {
    instance_template = google_compute_instance_template.default.id
  }
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

REST

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

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

{
    "name": INSTANCE_GROUP_NAME,
    "instanceTemplate": "global/instanceTemplates/TEMPLATE",
    "targetSize": SIZE,
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE1"},
            {"zone": "zones/ZONE2"},
            {"zone": "zones/ZONE3"},
        ],
        "targetShape": "SHAPE"
    }
}

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

  • PROJECT_ID: このリクエストのプロジェクト ID。
  • REGION: インスタンス グループのリージョン。
  • INSTANCE_GROUP_NAME: インスタンス グループの名前。
  • TEMPLATE: インスタンス グループに使用するインスタンス テンプレートの名前。
  • SIZE: インスタンス グループのターゲット サイズ。
  • ZONE: VM インスタンスをデプロイするリージョン内のゾーン名。
    • MIG でリージョン内のすべてのゾーンを使用できるようにするには、使用可能なすべてのゾーンを指定します。リージョン内のゾーンのリストを取得するには、regions.get メソッドを呼び出します。
    • リージョン MIG を更新しても、作成後に別のゾーンを使用することはできません。
  • SHAPE: ターゲット分配形態。次のいずれかの値です。
    • EVEN(デフォルト): 選択されたゾーン全体で同じ数の VM を完成、維持するために、VM の作成と削除を行います。EVEN 分配では、2 つのゾーン間の VM の数の差が 1 つ以内になります。これは、高可用性サービスを提供するワークロードに適しています。
    • BALANCED: リソースが利用可能なゾーンで VM の作成を優先しますが、選択したゾーンに可能な限り均等に VM を分配して、ゾーン障害の影響を最小限に抑えます。これは、高可用性サービスを提供するワークロードやバッチ ワークロードに適しています。
    • ANY: リクエストされた数の VM を現在のリソース制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。
    • ANY_SINGLE_ZONE: 1 つのゾーン内にすべての VM インスタンスを作成するグループです。ゾーンは、ハードウェア サポート、現在のリソースと割り当ての可用性、および一致する予約に基づいて選択されます。VM 間の大規模な通信が必要なワークロードには、コンパクトなインスタンス配置ポリシーと組み合わせて使用することをおすすめします。

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

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

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

コンソール

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

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

  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 を完成、維持するために、VM の作成と削除を行います。EVEN 分配では、2 つのゾーン間の VM の数の差が 1 つ以内になります。これは、高可用性サービスを提供するワークロードに適しています。
    • balanced: リソースが利用可能なゾーンで VM の作成を優先しますが、選択したゾーンに可能な限り均等に VM を分配して、ゾーン障害の影響を最小限に抑えます。これは、高可用性サービスを提供するワークロードやバッチ ワークロードに適しています。
    • any: リクエストされた数の VM を現在のリソース制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。
    • any-single-zone: 1 つのゾーン内にすべての VM インスタンスを作成するグループです。ゾーンは、ハードウェア サポート、現在のリソースと割り当ての可用性、および一致する予約に基づいて選択されます。VM 間の大規模な通信が必要なワークロードには、コンパクトなインスタンス配置ポリシーと組み合わせて使用することをおすすめします。

REST

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 を完成、維持するために、VM の作成と削除を行います。EVEN 分配では、2 つのゾーン間の VM の数の差が 1 つ以内になります。これは、高可用性サービスを提供するワークロードに適しています。
    • BALANCED: リソースが利用可能なゾーンで VM の作成を優先しますが、選択したゾーンに可能な限り均等に VM を分配して、ゾーン障害の影響を最小限に抑えます。これは、高可用性サービスを提供するワークロードやバッチ ワークロードに適しています。
    • ANY: リクエストされた数の VM を現在のリソース制約内で用意し、未使用のゾーン予約を最大限利用できるように、VM インスタンスの作成時にゾーンを選択します。高可用性が不要なバッチ ワークロードに適しています。
    • ANY_SINGLE_ZONE: 1 つのゾーン内にすべての VM インスタンスを作成するグループです。ゾーンは、ハードウェア サポート、現在のリソースと割り当ての可用性、および一致する予約に基づいて選択されます。VM 間の大規模な通信が必要なワークロードには、コンパクトなインスタンス配置ポリシーと組み合わせて使用することをおすすめします。

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

コンソール

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

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

    既存のインスタンス グループがある場合は、このページにそのグループのリストが表示されます。
  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
...

REST

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,
  ...
}

次のステップ