単一テナントノードの作成

単一テナントノードを作成し、インスタンスを他のプロジェクトのインスタンスから物理的に分離します。各ノードは 1 つの物理サーバーに関連付けられ、そのサーバーで実行される唯一のノードとなります。ノード内では、ホスト ハードウェアを他のプロジェクトと共有することなく、さまざまなサイズの複数のインスタンスを実行できます。ノードは、ホスト VM インスタンスを停止することなく、まったく新しいホストシステムへのライブ マイグレーションを行うことができます。

単一テナントノードの価格と割引を計算する方法については、単一テナントノードの価格をご覧ください。

単一テナントノードの利点、ユースケース、機能の詳細については、単一テナントノードの概要をご覧ください。

始める前に

制限事項

単一テナントノードを作成して使用する前に、単一テナントノードの概要の制限事項のセクションを確認してください。

単一テナントノードの作成と使用

一般に、単一テナントノードでインスタンスを作成するには、次のプロセスが必要です。

  1. ノードタイプまたは vCPU とメモリ要件を指定するノード テンプレートを作成します。また、リージョンと、オプションでノード アフィニティ ラベルを指定します。
  2. テンプレートを使用して、1 つ以上の単一テナントノードを持つノードグループを作成します。ノードが不要になったときに、ノード数をゼロに減らすことができます。
  3. ノードグループにインスタンスを作成します。
    • 事前定義されたマシンタイプまたはカスタム マシンタイプを使用して、ノードグループに個々の VM インスタンスを作成します。マシンタイプには、2 つ以上の vCPU が必要です。
    • インスタンス テンプレートを使用して、ノードグループにマネージド インスタンス グループを作成します。オートスケーラーは、ノード上のマネージド インスタンス グループのサイズを制御できますが、ノードグループのサイズを制御することはできません。

ノードグループとインスタンスの作成

ノード テンプレートを作成して、ノードグループ内のノードのプロパティを定義します。テンプレートを作成したら、そのテンプレートを使用して 1 つ以上のノードグループを作成できます。次に、それらのノードグループに新しいインスタンスを作成します。

Console

Google Cloud Platform Console を使用して、ノードとそのインスタンスを作成します。

  1. 単一テナントノードのページに移動します。

    単一テナントノードのページに移動

  2. [ノード テンプレートを作成] をクリックしてノード テンプレートの作成を開始します。
  3. ノードグループを実行する予定のリージョンを指定します。
  4. ノードグループで使用するノードタイプを指定します。または、使用可能な最小ノードを指定して、使用可能なノードタイプでノードグループを実行できるようにすることもできます。
  5. 必要に応じて、ノード アフィニティのラベルを追加して、ノードグループで自動的にスケジュールするインスタンスを定義します。アフィニティ ラベルを空白のままにした場合でも、後でノードグループ名または個々のノード名でインスタンスのスケジュールを設定できます。
  6. [作成] をクリックして、ノード テンプレートの作成を完了します。

ノード テンプレートを使用してノードグループを作成します。

  1. 単一テナントノードのページに移動します。

    単一テナントノードのページに移動

  2. [ノードグループを作成] をクリックしてノードグループの作成を開始します。
  3. ノードグループを実行するゾーンを指定します。同一リージョン内のノード テンプレートが必要です。
  4. 使用するノード テンプレートを指定します。
  5. グループ内で実行するノードの数を指定します。この数は後で変更できます。
  6. [作成] をクリックして、ノードグループの作成を完了します。

ノードグループ内または特定のノード内で実行されるインスタンスを作成します。特定のノード アフィニティ ラベルを使用した場合は、通常のプロセスを使用してインスタンスを作成し、[単一テナンシー] 設定でノード アフィニティを指定できます。この例では、ノードグループの詳細ページ内でインスタンスを直接作成します。

  1. 単一テナントノードのページに移動します。

    単一テナントノードのページに移動

  2. インスタンスを作成するノードグループの名前をクリックします。
  3. [インスタンスを作成] をクリックして、このノードグループ内の任意の場所にインスタンスを作成します。グループ内の特定のノードでインスタンスを実行する場合は、このグループ内の個々のノードの名前をクリックして、そのノードの詳細を表示します。[インスタンスを作成] をクリックして、その特定のノードにインスタンスを作成します。
  4. インスタンスの設定を構成します。すでにノードグループまたは特定のノードを選択したため、リージョン、ゾーン、デフォルト ノード アフィニティ ラベルはすでに指定されています。
  5. [作成] をクリックして、インスタンスの作成を完了します。

gcloud

gcloud コマンドライン ツールを使用して、ノードとそのインスタンスを作成します。

  1. compute sole-tenancy node-types list コマンドを使用して、使用可能なノードタイプを特定します。

    gcloud compute sole-tenancy node-types list
    

    Compute Engine は、古いノードタイプを新しいノードタイプに定期的に置き換えます。ノードタイプが置き換えられた場合、古いノードタイプを使用してノードグループを作成できなくなるため、新しいノードタイプを使用するようにノード テンプレートをアップグレードする必要があります。

  2. compute sole-tenancy node-templates create コマンドを使用して、新しいノード テンプレートを作成します。使用可能なノードタイプのリストは時間とともに変化するため、フレキシブルなノードタイプ要件を使用するようにノード テンプレートを構成します。たとえば、--node-requirements vCPU=any,memory=any,localSSD=0 を指定すると、ローカル SSD 容量のない使用可能なノードタイプでノードを実行できます。

    gcloud compute sole-tenancy node-templates create [TEMPLATE_NAME] \
        --region [REGION] --node-requirements vCPU=any,memory=any,localSSD=0
    

    ここで

    • [TEMPLATE_NAME] は新しいノード テンプレートの名前です。
    • [REGION] はこのテンプレートを使用するリージョンです。

    特定のノードタイプをテンプレートで使用するように選択することもできます。このテンプレートの柔軟性は低くなりますが、厳密な vCPU とメモリ要件を満たす場合にのみノードを作成することが保証されます。

     gcloud compute sole-tenancy node-templates create [TEMPLATE_NAME] \
         --node-type [NODE_TYPE] --region [REGION]
    

    ここで

    • [TEMPLATE_NAME] は新しいノード テンプレートの名前です。
    • [NODE_TYPE] は、このテンプレートで使用するノードタイプです。たとえば、n1-node-96-624 ノードタイプを指定して、96 基の vCPU と 624 GB のメモリを備えたノードを作成できます。
    • [REGION] はこのテンプレートを使用するリージョンです。
  3. ノード テンプレートを作成したら、ノードグループを作成します。compute sole-tenancy node-groups create コマンドを使用します。

    gcloud compute sole-tenancy node-groups create [GROUP_NAME] --zone [ZONE] \
        --node-template [TEMPLATE_NAME] --target-size [TARGET_SIZE]
    

    ここで

    • [GROUP_NAME] は新しいノードグループの名前です。
    • [ZONE] は、このノードグループが存在するゾーンです。このゾーンは、使用しているノード テンプレートと同じリージョンに存在する必要があります。
    • [TEMPLATE_NAME] は、このグループの作成に使用するノード テンプレートの名前です。
    • [TARGET_SIZE] は、グループに作成するノードの数です。
  4. ノードグループを作成したら、compute instances create コマンドを使用してノードグループ内にインスタンスを作成できます。ノードグループ名を指す --node-group フラグを指定します。たとえば、カスタム マシンタイプを持つインスタンスを作成するとします。

    gcloud compute instances create [INSTANCE_NAME] --zone [ZONE] \
        --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
        --node-group [GROUP_NAME] --custom-cpu [VCPUS] --custom-memory [MEMORY]
    

    ここで

    • [INSTANCE_NAME] は、新しいインスタンスの名前です。
    • [ZONE] は、ノードグループが存在するゾーンです。
    • [IMAGE_FAMILY] は、使用可能なイメージ ファミリーのいずれかです。
    • [IMAGE_PROJECT] は、イメージ ファミリーが属するイメージ プロジェクトです。
    • [GROUP_NAME] は、このインスタンスを配置するノードグループの名前です。
    • [VCPUS] は、このインスタンスで使用する vCPU の数です。
    • [MEMORY] は、インスタンスのメモリ量を 256 MB 単位で表したものです。たとえば、5.25GB または 5376MB を指定できます。

    必要に応じて、ノードグループ内にマネージド インスタンス グループを作成することもできます。instance-templates create コマンドを使用してインスタンス テンプレートを作成します。このとき、ノードグループ名を指定する --node-group フラグを追加します。

    gcloud compute instance-templates create [INSTANCE_TEMPLATE] \
        --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
        --node-group [GROUP_NAME] \
        --custom-cpu [VCPUS] --custom-memory [MEMORY]
    

    ここで

    • [INSTANCE_TEMPLATE] は、新しいインスタンス テンプレートの名前です。
    • [IMAGE_FAMILY] は、使用可能なイメージ ファミリーのいずれかです。
    • [IMAGE_PROJECT] は、イメージ ファミリーが属するイメージ プロジェクトです。
    • [GROUP_NAME] は、このインスタンスを配置するノードグループの名前です。
    • [VCPUS] は、このインスタンスで使用する vCPU の数です。
    • [MEMORY] は、インスタンスのメモリ量を 256 MB 単位で表したものです。たとえば、5.25GB または 5376MB を指定できます。

    compute instance-groups managed create コマンドを使用してインスタンス グループを作成します。

    gcloud compute instance-groups managed create [INSTANCE_GROUP_NAME] \
        --zone [ZONE] --size [SIZE] --template [INSTANCE_TEMPLATE]
    

    次のように指定します。

    • [INSTANCE_GROUP_NAME] は、このインスタンス グループの名前です。
    • [SIZE] は、このインスタンス グループに含める VM インスタンスの数です。ノードグループには、このマネージド インスタンス グループのインスタンスに対応する十分なリソースが必要です。
    • [INSTANCE_TEMPLATE] は、このグループの作成に使用するインスタンス テンプレートの名前です。テンプレートには、目的のノードグループを指すノード アフィニティが必要です。
    • [ZONE] は、ノードグループが存在するゾーンです。

API

Compute Engine API のメソッドを使用して、ノードとそのインスタンスを作成します。

  1. API で、compute.nodetypes.list メソッドを使用して使用可能なノードタイプのリストを取得する GET リクエストを作成します。

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/nodeTypes
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [ZONE] は、使用可能なノードタイプを取得するゾーンです。
  2. compute.nodetemplates.insert メソッドに対する POST リクエストを作成し、新しいノード テンプレートを作成します。柔軟性を最大限に高めるために、cpusmemory の値が any に設定された nodeTypeFlexibility プロパティを指定して、ローカル SSD 容量のない使用可能なノードタイプでノードを実行できます。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
     "name": "[TEMPLATE_NAME]",
     "nodeTypeFlexibility": {
      "cpus": "any",
      "memory": "any"
     }
    }
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [REGION] は、使用可能なノードタイプを取得するゾーンです。
    • [TEMPLATE_NAME] は新しいノード テンプレートの名前です。

    特定のノードタイプをテンプレートで使用するように選択することもできます。このテンプレートの柔軟性は低くなりますが、厳密な vCPU とメモリ要件を満たす場合にのみノードを作成することが保証されます。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
    {
     "name": "[TEMPLATE_NAME]",
     "nodeType": "[NODE_TYPE]"
    }
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [TEMPLATE_NAME] は新しいノード テンプレートの名前です。
    • [NODE_TYPE] は、このテンプレートで使用するノードタイプです。たとえば、n1-node-96-624 ノードタイプを指定して、96 基の vCPU と 624 GB のメモリを備えたノードを作成できます。
    • [REGION] はこのテンプレートを使用するリージョンです。
  3. ノード テンプレートを作成したら、ノードグループを作成します。compute.nodeGroups.insert メソッドを使用します。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/nodeGroups?initialNodeCount=[TARGET_SIZE]
    
    {
     "nodeTemplate": "/regions/[REGION]/nodeTemplates/[TEMPLATE_NAME]",
     "name": "[GROUP_NAME]"
    }
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [ZONE] は、このノードグループが存在するゾーンです。このゾーンは、使用しているノード テンプレートと同じリージョンに存在する必要があります。
    • [TARGET_SIZE] は、グループに作成するノードの数です。
    • [REGION] は、ノード テンプレートが存在するリージョンです。
    • [TEMPLATE_NAME] は新しいノード テンプレートの名前です。
    • [GROUP_NAME] は新しいノードグループの名前です。
    • [TEMPLATE_NAME] は、このグループの作成に使用するノード テンプレートの名前です。
  4. ノードグループを作成したら、compute.instances.insert メソッドを使用してノードグループ内にインスタンスを作成できます。ノードグループ名を指す nodeAffinities エントリを指定します。たとえば、カスタム マシンタイプを持つインスタンスを作成するとします。

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

    {
     "machineType": "/zones/[ZONE]/machineTypes/custom-[VCPUS]-[MEMORY]",
     "name": "[INSTANCE_NAME]",
     "scheduling": {
      "nodeAffinities": [
       {
        "key": "node-group-name",
        "operator": "IN",
        "values": [
         "[GROUP_NAME]"
        ]
       }
      ]
     },
     "networkInterfaces": [
      {
       "network": "/global/networks/[NETWORK]",
       "subnetwork": "/regions/[REGION]/subnetworks/[SUBNETWORK]"
      }
     ],
     "disks": [
      {
       "boot": true,
       "initializeParams": {
        "sourceImage": "/projects/[IMAGE_PROJECT]/global/images/family/[IMAGE_FAMILY]"
       }
      }
     ]
    }
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [INSTANCE_NAME] は、新しいインスタンスの名前です。
    • [ZONE] は、ノードグループが存在するゾーンです。
    • [REGION] は、ノード テンプレートとサブネットワークが存在するリージョンです。
    • [IMAGE_FAMILY] は、使用可能なイメージ ファミリーのいずれかです。
    • [IMAGE_PROJECT] は、イメージ ファミリーが属するイメージ プロジェクトです。
    • [GROUP_NAME] は、このインスタンスを配置するノードグループの名前です。
    • [VCPUS] は、このインスタンスで使用する vCPU の数です。
    • [MEMORY] は、インスタンスのメモリ量を MB 単位で表したものです。たとえば、5376MB を指定できます。
    • [NETWORK] は、インスタンスを接続するネットワークの名前です。
    • [SUBNETWORK] は、インスタンスを接続するサブネットワークの名前です。

    必要に応じて、ノードグループ内にマネージド インスタンス グループを作成することもできます。compute.instancetempates.insert メソッドを使用してインスタンス テンプレートを作成し、ノードグループ名を指す nodeAffinities エントリを指定します。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instance-templates
    
    {
    "name": "[TEMPLATE_NAME]",
    "properties": {
       "machineType": "custom-[VCPUS]-[MEMORY]",
       "name": "[INSTANCE_NAME]",
       "scheduling": {
        "nodeAffinities": [
         {
          "key": "node-group-name",
          "operator": "IN",
          "values": [
           "[GROUP_NAME]"
          ]
         }
        ]
       },
       "networkInterfaces": [
        {
         "network": "/global/networks/[NETWORK]",
         "subnetwork": "/regions/[REGION]/subnetworks/[SUBNETWORK]"
        }
       ],
       "disks": [
        {
         "boot": true,
         "initializeParams": {
          "sourceImage": "/projects/[IMAGE_PROJECT]/global/images/family/[IMAGE_FAMILY]"
         }
        }
       ]
      }
    }
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [INSTANCE_NAME] は、新しいインスタンスの名前です。
    • [ZONE] は、ノードグループが存在するゾーンです。
    • [REGION] は、ノード テンプレートとサブネットワークが存在するリージョンです。
    • [TEMPLATE_NAME] は、新しいインスタンス テンプレートの名前です。
    • [IMAGE_FAMILY] は、使用可能なイメージ ファミリーのいずれかです。
    • [IMAGE_PROJECT] は、イメージ ファミリーが属するイメージ プロジェクトです。
    • [GROUP_NAME] は、このインスタンスを配置するノードグループの名前です。
    • [VCPUS] は、このインスタンスで使用する vCPU の数です。
    • [MEMORY] は、インスタンスのメモリ量を MB 単位で表したものです。たとえば、5376MB を指定できます。
    • [NETWORK] は、インスタンスを接続するネットワークの名前です。
    • [SUBNETWORK] は、インスタンスを接続するサブネットワークの名前です。

    compute.instancegroupmanagers.insert メソッドを使用してインスタンス グループを作成します。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers
    
    {
     "baseInstanceName": "default",
     "name": "[INSTANCE_GROUP_NAME]",
     "targetSize": [SIZE],
     "instanceTemplate": "/global/instanceTemplates/[INSTANCE_TEMPLATE]"
    }
    

    ここで

    • [PROJECT_ID] はプロジェクト ID です。
    • [ZONE] は、ノードグループが存在するゾーンです。
    • [INSTANCE_GROUP_NAME] は、このインスタンス グループの名前です。
    • [BASE_INSTANCE_NAME] はマネージド インスタンス グループの各インスタンスの接頭辞名です。
    • [SIZE] は、このインスタンス グループに含める VM インスタンスの数です。ノードグループには、このマネージド インスタンス グループのインスタンスに対応する十分なリソースが必要です。
    • [INSTANCE_TEMPLATE] は、このグループの作成に使用するインスタンス テンプレートの名前です。テンプレートには、目的のノードグループを指すノード アフィニティが必要です。

ノード アフィニティの構成

ノード アフィニティによって、インスタンスとマネージド インスタンス グループがホストシステムとして使用するノードが決まります。デフォルトでは、各ノードに次のアフィニティ ラベルがあります。

  • グループ内の各ノードには、ノードグループの名前と一致するアフィニティ ラベルがあります。
    • キー: compute.googleapis.com/node-group-name
    • 値: ノードグループの名前。
  • 各ノードには、ノードの名前と一致するアフィニティ ラベルがあります。ノード名は自動的に生成されます。
    • キー: compute.googleapis.com/node-name
    • 値: 個々のノードの名前。

目的のノードグループまたは同じアフィニティ タイプのインスタンスのみを持つノードを共有するノードグループでのみインスタンスが実行されるように、追加のアフィニティ ラベルまたは反アフィニティ ラベルを構成できます。これにより、センシティブ データを特定のノードグループにまとめ、他のノードグループや Compute Engine で実行される他の VM インスタンスと分離できます。

例として、開発用に 1 つのノードグループと本番環境ワークロード用に個別のノードグループを作成する場合は、以下のプロセスを使用できます。

  1. workload=frontend,environment=prodworkload=frontend,environment=dev の 2 つの異なるラベルを持つ 2 つのノード テンプレートを作成します。workload ラベルはこれらのノードグループが frontend ワークロード向けであることを示し、environment ラベルは prod 環境と dev 環境を区別します。

    gcloud compute sole-tenancy node-templates create production-template \
       --node-requirements vCPU=any,memory=any,localSSD=0 --node-affinity-labels workload=frontend,environment=prod
    
    gcloud compute sole-tenancy node-templates create development-template \
       --node-requirements vCPU=any,memory=any,localSSD=0 --node-affinity-labels workload=frontend,environment=dev
    
  2. 本番環境用テンプレートと開発用テンプレートを使用して、いくつかのノードグループを作成します。たとえば、1 つの大規模な本番環境用ノードグループと複数の小規模な開発用ノードグループを持つことができます。必要に応じて、ワークロードのスケールに合わせて、さまざまなゾーンとターゲット サイズでこれらのグループを作成できます。

    gcloud compute node-groups create production-group \
        --node-template production-template --target-size 5 --zones us-west1-b
    
    gcloud compute node-groups create development-group-east1 \
        --node-template development-template --target-size 1 --zones us-east1-d
    
    gcloud compute node-groups create development-group-east2 \
        --node-template development-template --target-size 1 --zones us-east1-d
    
  3. 本番環境インスタンスでは、node-affinity-prod.json ファイルを作成して、本番環境インスタンスのアフィニティをどのように実行するかをより明確に指定します。たとえば、workload=frontendenvironment=prod の両方のアフィニティを持つノードでのみインスタンスが実行されるように指示するファイルを作成できます。

    [{
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
    },
    {
    "key" : "environment",
    "operator" : "IN",
    "values" : ["prod"]
    }
    ]
    
  4. node-affinity-prod.json ファイルを使用して、本番環境 VM インスタンスに必要なプロパティを持つインスタンス テンプレートを作成します。

    gcloud compute instance-templates create production-template \
        --image-family production-images --image-project my-project \
        --node-affinity-file node-affinity-prod.json \
        --custom-cpu 3 --custom-memory 4096
    
  5. 本番環境用ノードで実行される本番環境用テンプレートを使用してインスタンス グループを開始します。

    gcloud compute instance-groups managed create production-group \
        --zone us-west1-b --size 4 --template production-template
    

    グループ内のインスタンスが開始されて、workload=frontendenvironment=prod のアフィニティを持つノードグループでのみ実行されます。

  6. 開発インスタンスでは、node-affinity-dev.json ファイルを作成して、開発インスタンスのアフィニティがどのように動作するかをより明確に指定します。たとえば、workload=frontend のアフィニティを持ち、environment=prod のアフィニティを持たないノードグループでインスタンスが実行されるように構成するファイルを作成できます。

    [{
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
    },
    {
    "key" : "environment",
    "operator" : "NOT",
    "values" : ["prod"]
    }
    ]
    
  7. 開発では、インスタンス グループ全体ではなく、テストを行う個々のインスタンスを作成できます。そのインスタンスを作成するには、node-affinity-dev.json ファイルを使用します。たとえば、development-image-1 という名前の特定の開発イメージをテストする場合は、次のコマンドを使用して、インスタンスを作成し、そのアフィニティを構成します。

    gcloud compute instances create dev-1 \
        --image development-image-1 --image-project my-project \
        --node-affinity-file node-affinity-dev.json \
        --custom-cpu 3 --custom-memory 4096 --zone us-east1-d
    

    このインスタンスが開始されて、workload=frontend を持つノードグループでのみ実行されます。ただし、environment=prod のアフィニティで構成されたノードグループでは実行されません。

独自のアフィニティ構成を作成するには、ノード テンプレートを作成し、独自のアフィニティのキーと値を持つノードを実行します。次に、インスタンスを実行できるノードを決定する独自の affinity.json ファイルを使用してインスタンスを構成します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント