インスタンス プレースメント ポリシーの定義

ゾーン内でインスタンスを物理的に配置する場所を制御できます。次のプレースメント ポリシーを利用できます。

  • スプレッド: ホストのシステム障害の影響を軽減するためにインスタンスを分散させる場合には、スプレッド ポリシーを使用します。
  • コンパクト: インスタンス間のネットワーク レイテンシを低くするため、相互に近い場所にインスタンスを配置する場合は、コンパクト ポリシーを使用します。

始める前に

制限

プレースメント ポリシーには次の制限があります。

  • スプレッド:
    • ポリシーごとに最大 8 個のインスタンス
    • さまざまな数のインスタンスに適用可能
    • N1、N2、N2D、C2 マシンタイプのみをサポート
  • コンパクト
    • ポリシーごとに最大 22 個のインスタンス
    • 一定数のインスタンスに適用
    • C2 マシンタイプのみをサポート
    • ライブ マイグレーションはサポート対象外。また、プレースメント ポリシーが構成されているインスタンスは、ホスト メンテナンス時に TERMINATE に設定する必要あり
  • スプレッドとコンパクトの両方:

プレースメント ポリシーの定義と適用

インスタンスの相対位置を制御するには、次の操作を行います。

  1. インスタンスに必要なプレースメント構成でプレースメント ポリシーを作成します。次のいずれかのポリシータイプを作成できます。
    • スプレッド プレースメント ポリシーでは、インスタンスが同じホストまたは電源システムを共有しないように、基盤となるデータセンター全体に VM インスタンスを分散して配置します。これにより、ホストの障害または電源障害による影響を低減できます。
    • コンパクト プレースメント ポリシーを使用すると、インスタンス間のネットワーク レイテンシを低くするため、VM インスタンスを相互に近い場所に配置します。
  2. 1 つ以上のインスタンスにプレースメント ポリシーを適用します。同じポリシーを共有するインスタンスは、ポリシーの定義に従って相互に配置されます。

スプレッド プレースメント ポリシーを作成する

複数の異なるアベイラビリティ ドメインにインスタンスを配置するスプレッド プレースメント ポリシーを作成するには、このポリシーでインスタンスの分離に使用するアベイラビリティ ドメインの数を指定します。

gcloud

gcloud ツールを使用してポリシーを作成します。

gcloud compute resource-policies create group-placement POLICY_NAME \
        --availability-domain-count DOMAIN_COUNT \
        --region REGION \
        --project PROJECT_ID

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

  • POLICY_NAME: 新しいポリシーの名前
  • DOMAIN_COUNT: このポリシーがインスタンスの分離に使用するホスト ハードウェアと物理ネットワークのセット数
  • REGION: このポリシーを使用する VM インスタンスを作成するリージョン
  • PROJECT_ID: プロジェクト ID。

API

Cloud Console の [API とサービス] で resourcePolicies.insert メソッドを使用して、スプレッド プレースメント ポリシーを作成します。

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

{
  "name": "POLICY_NAME",
  "groupPlacementPolicy": {
    "availabilityDomainCount": DOMAIN_COUNT
  }
}

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

  • PROJECT_ID: プロジェクト ID。
  • REGION: このポリシーを使用する VM インスタンスを作成するリージョン
  • POLICY_NAME: 新しいポリシーの名前
  • DOMAIN_COUNT: このポリシーがインスタンスの分離に使用するホスト ハードウェアと物理ネットワークのセット数

コンパクト プレースメント ポリシーを作成する

インスタンスを相互に近い同じネットワーク インフラストラクチャに配置するコンパクト プレースメント ポリシーを作成するには、COLLOCATED ポリシーとそのポリシーに含める VM インスタンスの数を指定します。

gcloud

gcloud ツールを使用してポリシーを作成します。

gcloud compute resource-policies create group-placement POLICY_NAME \
        --collocation COLLOCATED \
        --vm-count VM_COUNT \
        --region REGION \
        --project PROJECT_ID

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

  • POLICY_NAME: 新しいポリシーの名前。
  • VM_COUNT: ポリシーに含める VM インスタンスの数。コンパクト ポリシーの場合は、この数のインスタンスにポリシーを適用する必要があります。
  • REGION: このポリシーを使用する VM インスタンスを作成するリージョン。
  • PROJECT_ID: プロジェクト ID。

API

Cloud Console の [API とサービス] で resourcePolicies.insert メソッドを使用してスプレッド プレースメント ポリシーを作成します。

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

{
  "name": "POLICY_NAME",
  "groupPlacementPolicy": {
    "vmCount": VM_COUNT,
    "collocation": "COLLOCATED"
  }
}

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

  • PROJECT_ID: プロジェクト ID。
  • REGION: このポリシーを使用する VM インスタンスを作成するリージョン。
  • POLICY_NAME: 新しいポリシーの名前。
  • VM_COUNT: ポリシーに含める VM インスタンスの数。コンパクト ポリシーの場合は、この数のインスタンスにポリシーを適用する必要があります。

インスタンスへのプレースメント ポリシーの適用

新しいインスタンスにプレースメント ポリシーを適用できます。

新しいインスタンスへのプレースメント ポリシーの適用

プレースメント ポリシーを作成したら、1 つ以上のインスタンスに適用します。同じポリシーを共有するインスタンスは、ポリシーの定義に従って相互に配置されます。

gcloud

新しいインスタンスを作成するときに --resource-policies フラグを指定して、インスタンスにプレースメント ポリシーを適用します。コンパクトなプレースメント ポリシーの場合、--maintenance-policy=TERMINATE --no-restart-on-failure を含める必要があります。

gcloud compute instances create VM_NAME \
        --zone ZONE \
        --resource-policies POLICY_NAME \
        --image-family IMAGE_FAMILY \
        --image-project IMAGE_PROJECT \
        --project PROJECT_ID \
        [[--maintenance-policy=TERMINATE]] \
        [[--no-restart-on-failure]]

以下を置き換えます。

  • VM_NAME: 新しいインスタンスの名前。
  • ZONE: 新しいインスタンスを作成するゾーン。このゾーンは、プレースメント ポリシーと同じリージョンに存在する必要があります。
  • POLICY_NAME: このインスタンスに適用するプレースメント ポリシーの名前。1 つのインスタンスに複数のプレースメント ポリシーを適用できます。
  • IMAGE_FAMILY: 使用可能なイメージ ファミリーのいずれか。
  • IMAGE_PROJECT: イメージが属するイメージ プロジェクト
  • PROJECT_ID: プロジェクト ID。

API

新しいインスタンスを作成するときに resourcePolicies プロパティを指定し、インスタンスにプレースメント ポリシーを適用します。コンパクトなプレースメント ポリシーの場合、"onHostMaintenance": "TERMINATE""automaticRestart": false を含める必要があります。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "machineTypes/MACHINE_TYPE"
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT"
    }],
    "network": "global/networks/default"
  }],
  "scheduling": {
    "onHostMaintenance": "TERMINATE",
    "automaticRestart": false
  },
  "disks": [{
     "autoDelete": "true",
     "boot": "true",
     "type": "PERSISTENT",
     "initializeParams": {
       "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
     }
  }],
  "resourcePolicies": [
    "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
  ]
}

以下を置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • ZONE: 新しいインスタンスを作成するゾーン。このゾーンは、プレースメント ポリシーと同じリージョンに存在する必要があります。
  • VM_NAME: 新しいインスタンスの名前。
  • MACHINE_TYPE: インスタンスのマシンタイプ
  • IMAGE_PROJECT: イメージが属するイメージ プロジェクト
  • IMAGE_FAMILY: 使用可能なイメージ ファミリーのいずれか。
  • REGION: プレースメント ポリシーを作成したリージョン。
  • POLICY_NAME: このインスタンスに適用するプレースメント ポリシーの名前。1 つのインスタンスに複数のプレースメント ポリシーを適用できます。

次のステップ