単一テナントノードでお客様所有ライセンスを使用する

Compute Engine では、単一テナントノードで BYOL(お客様所有ライセンスの使用)ができます。これにより、物理ハードウェアの使用が制限されているライセンス要件に対応できます。たとえば、単一テナントノードを使用して、カスタム イメージを Compute Engine にインポートし、VM を起動できます。また、インプレース リスタートを有効にして、可能な限り同じ物理サーバーで VM が再起動するように設定できます。単一テナントノードを使用して VM をホストすることで、物理コアの使用が制限されていても、完全に専用のハードウェアで VM を実行できます。また、Compute Engine ではサーバーの使用状況を報告することもできます。これにより、物理ハードウェアでのライセンスの使用状況を記録できます。

この機能の概要、要件、ワークロードの考慮事項については、概要をご覧ください。

始める前に

サポートされる OS とライセンス要件を確認する

このプロセスを開始する前に、対応している OS を確認し、ライセンスとアクティベーションの内容を確認してください。また、このドキュメントで説明する BYOL 環境でのソフトウェアの使用が認められているかどうか、ライセンス契約を確認してください。契約内容に応じて BYOL 用のゲストイメージを準備する必要があります。

ライセンスに関する質問またはサポートについては、ライセンスの販売元にお問い合わせください。この機能についての質問は、Google Cloud サポートまでお問い合わせください。

サポートされるリージョンを確認する

この機能は、特定のリージョンでのみ利用できます。詳しくは、料金と可用性をご覧ください。

ワークロードについて検討する

この機能に対する適合性はワークロードによって異なります。ワークロードの考慮事項で一般的な推奨事項を確認してください。

新しいプロジェクトを作成して割り当てをリクエストする

まだプロジェクトがない場合は、新しいプロジェクトを作成します

新しいプロジェクトの CPU 割り当ての上限は 100 CPU ですが、この量では十分でないこともあります。プロジェクトでより多くの割り当てが必要になった場合は、Cloud Console の [割り当て] ページで割り当て量の調整をリクエストできます。設定によっては、他のリソース(IP アドレスなど)の割り当ての増量が必要になる場合もあります。

Cloud Build API を有効にする

この機能は、Cloud Build サービスを使用して、Compute Engine イメージのインポートと作成を行います。この機能を使用するには、Cloud Build API を有効にする必要があります。

Cloud Build API を有効にする

Compute Engine は、Cloud Build サービス アカウントに次の役割を付与し、このサービスが Compute Engine にイメージをインポートできるようにします。

  • roles/iam.serviceAccountTokenCreator
  • roles/compute.admin
  • roles/iam.serviceAccountUser

監査ロギング用に Stackdriver Logging を有効にする

ライセンスで物理サーバーの使用状況の報告が必要とされている場合は、単一テナントノードに VM をリリースする前に、Stackdriver Logging API を有効にします。これにより、BigQuery を使用して、サーバーの使用状況に関する情報をインポートし、表示できます(強くおすすめします)。

Stackdriver Logging API を有効にする

ロギングを設定すると、BigQuery を利用して物理コアの使用数などの関連情報も追跡できます(ライセンスで関連情報の提出が求められる場合があります)。詳細については、サーバーの使用量の判断をご覧ください。

仮想ディスク ファイルを作成する

Compute Engine にイメージをインポートするには、既存の仮想ディスク ファイル(VMDK、VHD)が必要です。オペレーティング システムをインストール イメージ(iso、img、DVD、USB など)から VM に直接インストールすることはできません。また、Compute Engine VM で OS のインプレース アップグレードを行うこともできません。

仮想ディスク ファイルの作成方法は環境によって異なります。手順については、該当するオペレーティング システムのドキュメントをご覧ください。

仮想ディスク ファイルのインポート

独自ライセンスで VM を開始するには、使用する OS を含む仮想ディスクをインポートします。ファイルをインポートするには、gcloud コマンドライン ツールを使用します。gcloud ツールでは、VHD または VMDK を Cloud Storage バケットまたはローカル ワークステーションからインポートできます。ローカルマシンにホストされている仮想ディスクをインポートすると、イメージが Compute Engine にインポートされる前に、ファイルが Cloud Storage バケットにアップロードされます。

仮想マシンのディスクをインポートする前に、仮想マシン内に事前チェックツールをダウンロードして実行します。これにより、Google Cloud への移行で互換性の問題が発生しないことを確認できます。

イメージ インポート ツールの詳しい説明については、仮想ディスクのインポートをご覧ください。

準備ができたら、次の gcloud コマンドを実行して仮想ディスクをインポートします。

gcloud compute images import [IMAGE_NAME] \
        --source-file [SOURCE_FILE] \
        --os [OS]
    

ここで

  • [IMAGE_NAME] は、このイメージに設定する名前です。
  • [SOURCE_FILE] は、仮想ディスクです。ローカルにホストされているか、Cloud Storage に保存されています。仮想ディスクがローカル ファイルの場合は、絶対パスまたは相対パスを使用できます。仮想ディスク ファイルがすでに Cloud Storage に保存されている場合は、インポート プロセスに使用されるプロジェクトのストレージ バケットにそのファイルが存在する必要があります。また、ファイルのフルパスを gs://[BUCKET_NAME]/[OBJECT_NAME] という形式で指定する必要があります。

  • [OS] は、SOURCE_FILE の Windows オペレーティング システムです。サポートされている Windows OS は次のとおりです。

    • windows-2008r2-byol
    • windows-2012-byol
    • windows-2012r2-byol
    • windows-2016-byol
    • windows-2019-byol
    • windows-7-x64-byol
    • windows-7-x86-byol
    • windows-8-x64-byol
    • windows-8-x86-byol
    • windows-10-x64-byol
    • windows-10-x86-byol

Cloud Storage に保存されているファイルと Compute Engine のイメージには使用料金が発生します。イメージが正常にインポートされ、Compute Engine インスタンスとして正常に起動することを確認したら、Cloud Storage から仮想ディスク ファイルを削除できます。

--source-file にローカル ファイルを指定した場合、仮想ディスクのサイズとネットワーク接続の速度によってはアップロード オペレーションに数十分かかる場合があります。

イメージが作成されたら、IAM 役割または権限を使用して、プロジェクトや組織に属していないユーザーとイメージを共有できます。

gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member user:[USER_EMAIL] \
        --role roles/compute.imageUser
    

この場合、[PROJECT_ID] はアクセス権を付与するイメージを所有しているプロジェクトです。

ユーザーは、イメージが属するプロジェクト ID をリクエストに指定して、このイメージにアクセスできます。次に例を示します。

gcloud compute instances create my-vm \
        --custom-cpu 4 \
        --custom-memory 8 \
        --image https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/[IMAGE_NAME] \
        --zone us-central1-a \
        --node-affinity-file node-affinity-prod.json \
        --restart-on-failure \
        --maintenance-policy terminate
    

独自ライセンスでの VM インスタンスの起動

イメージをインポートしたら、インポートされたイメージを使用して単一テナントノードで VM インスタンスを起動できます。また、restart-node-on-minimal-servers プロパティを指定して、インプレース リスタートを有効にできます。このプロパティを使用すると、メンテナンス イベントが発生したときに、VM は同じ物理サーバーで再起動を試みます。同じ物理サーバーが利用できない場合は、新しい物理サーバーが作成され、ノードグループに追加されます。Compute Engine が新しいサーバーのサーバー ID を報告します。

ライセンス条項や製品の利用規約で物理コアまたはソケットの使用に関する制約がない BYOL ワークロードの場合は、インプレース リスタート機能なしで単一テナントノードを使用できます。これにより、VM インスタンスは専用のハードウェアで起動しますが、使用される物理サーバー数が最小限になるとは限りません。

VM インスタンスの起動方法は次のとおりです(詳細は後ほど説明します)。

  1. Google Cloud Console、gcloud コマンドライン ツールまたは API を使用して、ノード テンプレートを作成します。必要であれば、インプレース リスタートを有効にします。

  2. 新しいテンプレートでノードグループを作成します。

  3. 最後に、インポートしたイメージを使用して、ノードグループに VM を作成します。

VM がノードでスケジューリングされると、再起動とメンテナンス イベントが発生するたびに、VM に同じ物理アフィニティ ラベルが設定されます。基盤となる物理サーバーが変更されても、ラベルセレクタを使用して、特定の VM が常に同じノードに存在するように設定できます(対応するノード アフィニティが必要)。また、同じノードを共有しないようにすることもできます(ノード アンチアフィニティ)。

利便性のため、restart-node-on-minimal-servers オプションで構成したすべての単一テナントノードに追加のアフィニティ ラベルが自動的に追加されます。このラベルは、ノード名やノードグループ名に似ています。このラベルをアフィニティ ファイルに追加し、restart-node-on-minimal-server 機能が有効になっているノードでのみ VM を起動するように設定できます。ラベルは次のようになります。

  • キー: compute.googleapis.com/node-server-binding-type
  • 値: restart-node-on-minimal-server

Console

  1. 再起動オプションに最小限のサーバーを指定して、ノード テンプレートを作成します。

    1. [ノード テンプレートの作成] ページに移動します。

      [ノード テンプレートの作成] ページに移動

    2. テンプレートの名前を入力します。
    3. ノードグループを実行する予定のリージョンを指定します。
    4. ノードグループで使用するノードタイプを指定します。
    5. 必要であれば、インスタンスにノード アフィニティのラベルを指定します。たとえば、ラベルとして workload=front-endenvironment=prod を指定できます。
    6. [高度なノード再起動の構成] を展開します。
    7. [最小限のサーバー] を選択します。
    8. ノード テンプレートを作成します。
  2. ノード テンプレートを使用して、ノードグループをプロビジョニングします。

    1. [ノードグループの作成] ページに移動します。

      [ノードグループの作成] ページに移動

    2. グループの名前を入力します。
    3. ノードグループを実行するゾーンを指定します。同一リージョン内のノード テンプレートが必要です。
    4. 使用するノード テンプレートを指定します。
    5. グループ内で実行するノードの数を指定します。この数は後で変更できます。
    6. [作成] をクリックして、ノードグループの作成を完了します。
  3. ノードグループ内または特定のノード内で実行されるインスタンスを作成します。特定のノード アフィニティ ラベルを使用した場合は、通常のプロセスを使用してインスタンスを作成し、[単一テナンシー] 設定でノード アフィニティを指定できます。この例では、ノードグループの詳細ページ内でインスタンスを直接作成します。

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

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

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

    7. [自動再起動] で [オン(推奨)] を選択します。

    8. [作成] をクリックして、インスタンスの作成を完了します。

gcloud

  1. ノード テンプレートを作成して restart-node-on-minimal-servers フラグを設定します。必要であれば、インスタンスにノード アフィニティのラベルを選択します。次に例を示します。

    gcloud compute sole-tenancy node-templates create my-node-template \
            --node-type n1-node-96-624 \
            --region us-east1 \
            --node-affinity-labels workload=front-end,environment=prod \
            --server-binding restart-node-on-minimal-servers
        
  2. ノード テンプレートを使用して、ノードグループをプロビジョニングします。たとえば、次のコマンドでは、前の手順で作成したノード テンプレートを使用して、2 つのインスタンスを含むグループを作成します。

     gcloud compute sole-tenancy node-groups create my-node-group \
             --node-template my-node-template \
             --target-size 2 \
             --zone us-east1-b
        
  3. ノードグループのアフィニティ ラベルを含むノード アフィニティ ファイルを作成します。これにより、このラベルをすべて含むノードにのみ VM が作成されます。次に例を示します。

     // CREATE AFFINITY LABEL FILE
         cat > node-affinity-prod.json
         [{
           "key" : "workload",
           "operator" : "IN",
           "values" : ["front-end"]
           },
           {
           "key" : "environment",
           "operator" : "IN",
            "values" : ["prod"]
          },
          {
            "key" : "compute.googleapis.com/node-server-binding-type",
            "operator" : "IN",
            "values" : "restart-node-on-minimal-server"
          }]
        
  4. VM インスタンスを開始して、アフィニティ ラベルファイルを指定します。次のリクエストでは、インポートされたイメージを使用して、4 基の CPU と 8 GB のメモリを搭載した VM を us-east1-b ゾーンに作成します。また、--restart-on-failure- フラグと terminate メンテナンス ポリシーを設定します。現在、独自ライセンスを使用するときに VM に設定できるのは、このポリシーだけです。

     gcloud compute instances create my-vm \
             --custom-cpu 4 --custom-memory 8 \
             --image my-imported-image \
             --zone us-east1-b \
             --node-affinity-file node-affinity-prod.json \
             --restart-on-failure --maintenance-policy terminate
        

API

  1. ノード テンプレートを作成して RESTART_NODE_ON_MINIMAL_SERVERS プロパティを設定します。また、インスタンスにノード アフィニティ ラベルを選択します。次に例を示します。

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/nodeTemplates
    
        {
           "name": "[TEMPLATE_NAME]",
           "nodeType": "[NODE_TYPE]"
           "nodeAffinityLabels": {
              "[KEY]": "[VALUE]"
           },
           "serverBinding":
           {
             "type": "RESTART_NODE_ON_MINIMAL_SERVERS"
           }
        }
        

    ここで

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

    POST https://compute.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] は、このグループの作成に使用するノード テンプレートの名前です。
  3. ノードグループを作成したら、compute.instances.insert メソッドを使用してノードグループ内にインスタンスを作成できます。ノードグループ名を指す nodeAffinities エントリを指定します。たとえば、カスタム マシンタイプを持つインスタンスを作成するとします。

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances
    
        {
         "machineType": "zones/[ZONE]/machineTypes/custom-[VCPUS]-[MEMORY]",
         "name": "[INSTANCE_NAME]",
         "scheduling": {
          "nodeAffinities": [
           {
            "key": "compute.googleapis.com/node-server-binding-type",
            "operator": "IN",
            "values": [
             "restart-node-on-minimal-server"
            ]
           }
          ]
         },
         "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] は、使用可能なイメージ ファミリーの 1 つです。
    • [IMAGE_PROJECT] は、イメージ ファミリーが属するイメージ プロジェクトです。
    • [GROUP_NAME] は、このインスタンスを配置するノードグループの名前です。
    • [VCPUS] は、このインスタンスで使用する vCPU の数です。
    • [MEMORY] は、インスタンスのメモリ量を MB 単位で表したものです。たとえば、5376MB を指定できます。
    • [NETWORK] は、インスタンスを接続するネットワークの名前です。
    • [SUBNETWORK] は、インスタンスを接続するサブネットワークの名前です。

次のステップ