VM テナンシーの更新


このページでは、VM のノード アフィニティ ラベルを変更して VM テナンシーを更新する方法について説明します。

デフォルトでは、Compute Engine はマルチテナント ホストに VM をデプロイします。マルチテナント ホストでは、VM は通常、他のプロジェクトやユーザーの VM とホストリソースを共有します。VM を単一テナントノードに移動すると、プロジェクトから単一テナントノードのハードウェアに排他的にアクセスし、完全に制御できます。そのノードには他のテナントが存在しないため、ワークロードは他のプロジェクトと VM のワークロードから分離されます。

ノード アフィニティ ラベルを変更することで、次の方法で VM を移動できます。

  • マルチテナント ホストから単一テナントノードのグループまたはノード
  • 単一テナントノードのグループまたはノードからマルチテナント ホスト
  • 1 つの単一テナントノードから別の単一テナントノードまたはノードグループ
  • 単一テナントノードのグループから別の単一テナントノードのグループまたはノード

ワークロードを単一テナンシーに一時的に移動する

ワークロード要件の変化、定期的な分離が必要なパフォーマンス調査、コンプライアンス要件の変更などにより、特定のワークロードを単一テナントノードに一時的に移動しなければならない場合があります。その後、単一テナンシーが不要になったら、VM をマルチテナント ホストに再デプロイします。VM のテナンシーを変更すると、Compute Engine は VM の構成を保持します。

単一テナント ワークロードの再調整

VM は、単一テナントノードとノードグループ間だけでなく、ノードとノードグループ間で移動することもできます。これにより、ノードを統合し、ワークロードの再調整を行うことができます。VM を移動すると再起動が必要になるため、ワークロードの可用性要件に基づいて VM の移動を計画する必要があります。

制限事項

  • すでに単一テナントノードで実行されている VM を移動すると、その VM は別のノードで再起動します。VM の単一テナンシーがノードグループ名または node-group-name デフォルト アフィニティ ラベルで指定されている場合、その VM はノードグループ内の任意のノードで再起動します。VM の単一テナンシーがアフィニティまたはアンチアフィニティのカスタム アフィニティ ラベルで指定されている場合、その VM はゾーン内の任意のノードグループの任意のノードで再起動します。

準備

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

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

    gcloud

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

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

    REST

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

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

      gcloud init

VM を単一テナンシーに移動する

テナンシーを更新するには、別のノードまたはノードグループから、あるいはマルチテナント ホストから特定の単一テナントノードまたはノードグループに VM を移動します。

gcloud

  1. VM を停止します。

    gcloud compute instances stop VM_NAME
    

    VM_NAME は、停止する VM の名前に置き換えます。

  2. VM の移動先のノードグループを指定して、テナンシーを更新します。

    gcloud compute instances set-scheduling VM_NAME \
        --node-group=NODE_GROUP_NAME
    

    以下のように置き換えます。

    • VM_NAME: 特定のノードグループに移動する VM の名前

    • NODE_GROUP_NAME: VM を移動するノードグループの名前

    ノードの名前またはアフィニティ ラベルを使用して、単一テナントノードに VM を移動することもできます。詳細については、gcloud compute instances set-scheduling コマンドをご覧ください。

  3. VM を起動します。

    gcloud compute instances start VM_NAME
    

    VM_NAME は、アフィニティ ラベルファイルの内容で指定されているノードグループで起動する VM の名前に置き換えます。

REST

  1. VM を停止します。このコマンドの詳細については、instances.stop をご覧ください。

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

    以下のように置き換えます。

    • PROJECT_ID: 停止する VM が属するプロジェクトの ID

    • ZONE: プロジェクトが存在するゾーン

    • VM_NAME: 停止する VM の名前

  2. VM の移動先のノードグループを指定して、テナンシーを更新します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
    
    {
      "nodeAffinities": [
        {
          "key": "compute.googleapis.com/node-group-name",
          "operator": "IN",
          "values": [
            "NODE_GROUP_NAME"
          ]
        }
      ]
    }
    

    以下のように置き換えます。

    • PROJECT_ID: 移動する VM を含むプロジェクトの ID

    • ZONE: プロジェクトが存在するゾーン

    • VM_NAME: 特定のノードグループに移動する VM の名前

    • NODE_GROUP_NAME: VM を移動するノードグループの名前

    ノードの名前またはアフィニティ ラベルを使用して、単一テナントノードに VM を移動することもできます。詳細については、instances.setScheduling メソッドをご覧ください。

  3. VM を起動します。このコマンドの詳細については、instances.start をご覧ください。

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

    以下のように置き換えます。

    • PROJECT_ID: 起動する VM が属するプロジェクトの ID

    • ZONE: プロジェクトが存在するゾーン

    • VM_NAME: 起動する VM の名前

単一テナンシーからの VM の移動

VM に専用ハードウェアを使用する必要がなくなった場合(たとえば、VM を他の VM から分離する必要がなくなった場合)は、VM を単一テナントノードからマルチテナント ホストに移動します。

gcloud

  1. VM を停止します。

    gcloud compute instances stop VM_NAME
    

    VM_NAME は、停止する VM の名前に置き換えます。

  2. VM からノード アフィニティをクリアして、マルチテナント ホストに移動できるようにします。

    gcloud compute instances set-scheduling VM_NAME --clear-node-affinities
    

    VM_NAME は、ノード アフィニティをクリアする VM の名前に置き換えます。

  3. マルチテナント ホストで VM を起動します。

    gcloud compute instances start VM_NAME
    

    VM_NAME は、ノード アフィニティをクリアした VM の名前に置き換えます。

REST

  1. VM を停止します。このコマンドの詳細については、instances.stop をご覧ください。

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

    以下のように置き換えます。

    • PROJECT_ID: 停止する VM が属するプロジェクトの ID

    • ZONE: プロジェクトが存在するゾーン

    • VM_NAME: 停止する VM の名前

  2. VM からノード アフィニティをクリアして、マルチテナント ホストに移動します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
    
    {
      "nodeAffinities": []
    }
    

    以下のように置き換えます。

    • PROJECT_ID: 移動する VM を含むプロジェクトの ID

    • ZONE: プロジェクトが存在するゾーン

    • VM_NAME: ノード アフィニティをクリアする VM の名前

  3. マルチテナント ホストで VM を起動します。このコマンドの詳細については、instances.start をご覧ください。

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

    以下のように置き換えます。

    • PROJECT_ID: 起動する VM が属するプロジェクトの ID

    • ZONE: プロジェクトが存在するゾーン

    • VM_NAME: 起動する VM の名前

次のステップ