単一テナントノード グループを共有する


共有単一テナントノード グループは、ローカル単一テナントノード グループと似ています。たとえば、共有ノードグループは、同じ費用がかかり(同じ割り当てを使い)、リソース階層の親プロジェクト配下にあります。

共有ノードグループとローカル ノードグループの違いは、組織内の他のプロジェクトが共有ノードグループ内の仮想マシン(VM)インスタンスをプロビジョニングできる点です。

複数のプロジェクト間や一組織でノードグループを共有すると、次のことに役立ちます。

  • 管理するノードグループを単一のプロジェクトに集約した後、それらのノードを他のプロジェクトや組織全体と共有します。

  • さまざまなプロジェクトの VM が十分に活用されていないノードグループに集約した後にノードを削除することによって、コストを削減します。

  • 単一のチームで単一テナントノードを管理します。

  • 単一テナントノードを小規模なプロジェクトと共有し、それらのプロジェクト間でセキュリティとアクセス制御の境界を維持します。

  • 同じプロジェクト内のノードグループ間でライブ マイグレーションを実行します

  • ノードグループ内での移行のメンテナンス ポリシーを使用する場合に、ノードグループの利用率を改善し、予約済みのメンテナンス ノードの数を削減します。

次の図は、他のプロジェクトと共有されているノードグループを示しています。これらのプロジェクト内の VM を管理するほかの部門が、共有ノードグループ内の VM をプロビジョニングできます。

プロジェクト間で共有されるノードグループの図。異なるプロジェクトの VM を管理している部門は、共有ノードグループに VM をプロビジョニングできます。

共有ノードグループの使用メリット

次の表では、ローカル ノードグループを使用するプロジェクトと共有ノードグループを使用するプロジェクトの比較を示します。共有ノードグループを使用するプロジェクトでは、十分に活用されていない vCPU の数が低下することがわかります。

プロジェクトの構成 ローカル ノードグループ 共有ノードグループ
プロジェクト 10 10
vCPU / プロジェクト 24 24
ノードグループ 10 1
ノード / ノードグループ 1 3
vCPU / ノード 80 80
使用数 / ノードグループ 24 80
未使用数 / ノードグループ 56 0
全未使用数 10 x 56 = 560 vCPUs 1 x 0 = 0 vCPU

ノードグループの共有の設定

Compute Engine は、ノードグループを共有し、共有ノードグループ内で VM をプロビジョニングするために次の設定を使用します。

  • 単一テナントノード グループを作成または更新するときに構成する共有設定。ノードグループを他のプロジェクトまたは組織全体と共有するかどうかを指定するには、gcloud CLI の設定(--share-setting--share-with)または REST の設定(shareSettingshareWith など)を使用します。

  • デフォルトの compute.googleapis.com/project ノード アフィニティ ラベルは、ノード アフィニティ ラベルを使用して共有ノードグループに VM をプロビジョニングするときに使用します。他のデフォルト ノード アフィニティのラベルについては、デフォルト アフィニティ ラベルをご覧ください。

メンテナンス ポリシーに関する考慮事項

ノードグループが、ノードグループ内での移行のメンテナンス ポリシーを使用する場合、Compute Engine ではライブ マイグレーション イベント用に少なくとも 1 つのノードを予約します。そのため、そのノードグループには少なくとも 2 つのノードが必要です。予約済みノードで VM はスケジューリングできません。そのため、このメンテナンス ポリシーを使用するノードグループの全体使用率は一般に低くなります。このため、ノードグループ内での移行のメンテナンス ポリシーを必要とするワークロードは、使用率の向上から最大のメリットを得られることが多いため、ノードグループの共有に適しています。

IAM のロールと権限

ノードグループを共有する場合は、IAM のロールと権限に関する次のことを留意してください。

  • ノードグループがプロジェクトと共有されている場合、リストされたプロジェクトまたは組織で VM を作成できるユーザーは、IAM のロールまたは権限を変更せずに、それらのプロジェクトから共有ノードグループに VM をプロビジョニングできます。

  • compute.soleTenantViewer IAM ロールを使用すると、ノードグループ(gcloud CLI / REST)を一覧表示できます。このロールでは、ノードグループの変更はできません。このロールやノードグループを一覧表示する権限を持つユーザーは、VM の IAM 権限に関係なく、ノードグループ内のすべての VM のプロジェクト ID、名前、マシンタイプ、ローカル SSD および GPU に関する情報を表示できます。

制限事項

  • コンプライアンス レジームの制限:

    • VM の IAM 権限に関係なく、ノードグループを一覧表示する権限を持つユーザーは、ノードグループ内のすべての VM のプロジェクト ID、名前、マシンタイプを表示できます。したがって、プロジェクト間で情報が漏えいするリスクがあるため、共有ノードグループに VM がプロビジョニングされているプロジェクトは、同じコンプライアンス レジームに従う必要があります。
  • Google Cloud コンソールの制限:

    • 共有ノードグループの VM を表示する権限がない場合、これらの VM は Google Cloud コンソールの [単一テナントノード] ページの VM リストに表示されません。
    • [単一テナントノード グループ] ページで共有設定を変更しても、UI の [共有者] の設定が更新されません。更新された [共有者] 設定を確認するには、[単一テナントノード] ページに移動します。
    • ノードグループを組織内のすべてのプロジェクトまたは組織内の選択したプロジェクトと共有した後は、その共有ノードグループを所有するプロジェクトからのみ表示できます。プロジェクトから共有ノードグループは表示されません 共有ノードグループに VM をプロビジョニングするには、ノードグループが共有されているプロジェクトから [VM インスタンス] ページに移動し、単一テナンシー ノード アフィニティ ラベルを変更します。
  • 共有の制限:

    • 共有設定は、ノードグループを所有するプロジェクトから更新する必要があります。
    • projects 共有設定を使用する場合は、最大 100 個のプロジェクトを指定できます。
    • ノードグループは、組織間では共有できません。たとえば、共有ノードグループを含むプロジェクトを別の組織に移行する場合は、その共有ノードグループで実行中の VM があるすべてのプロジェクトも移行する必要があります。
    • 共有の単一テナントノード グループを使用している間は、プロジェクト間のライブ マイグレーションを実行できません。詳しくは、VM を手動でライブ マイグレーションするをご覧ください。

料金

共有ノードグループ内の VM には追加料金は発生せず、ノードグループを共有することに対して追加料金が発生することはありません。単一テナントノードの料金の詳細については、単一テナントノードの料金をご覧ください。

始める前に

  • 単一テナントノード グループを作成する前に、単一テナントノード テンプレートを作成します。
  • 単一テナントノードで VM をプロビジョニングする前に、割り当てを確認します。予約するノードの数とサイズによっては、割り当て量の追加リクエストが必要になる場合があります。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

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

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

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

    REST

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

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

新しいノードグループを作成して共有する

新しいノードグループを作成して他のプロジェクトや組織全体と共有するには、Google Cloud コンソール、gcloud CLI、REST のいずれかを使用します。

コンソール

  1. 単一テナントノード グループを作成する詳細については、単一テナントノード グループを作成するをご覧ください。

  2. 共有設定の構成で次のいずれかを指定して、共有設定を構成します。

    • ノードグループを組織内のすべてのプロジェクトと共有するには、[このノードグループを組織内のすべてのプロジェクトと共有する] を選択します。
    • ノードグループを組織内の特定のプロジェクトと共有するには、[このノードグループを組織内の選択したプロジェクトと共有する] を選択します。

    ノードグループを共有しない場合は、[このノードグループを他のプロジェクトと共有しない] を選択します。

gcloud

共有ノードグループを作成するには、次の gcloud compute sole-tenancy node-groups create コマンドを使用します。

gcloud compute sole-tenancy node-groups create NODE_GROUP \
    --zone=ZONE \
    --node-template=NODE_TEMPLATE \
    --target-size=SIZE \
    --share-setting=SHARE_SETTING \
    --share-with=PROJECTS

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

  • NODE_GROUP: ノードグループの名前。

  • ZONE: ノードグループを作成するゾーン。

  • NODE_TEMPLATE: 前に作成したノード テンプレートの名前。

  • SIZE: ノードプール内のノード数。

  • SHARE_SETTING: ノードグループの共有設定。特定のプロジェクトと共有する場合は projects に設定し、組織全体と共有する場合は organization に設定します。

  • PROJECTS: ノードグループを共有するプロジェクト ID またはプロジェクト番号のリスト。SHARE_SETTINGprojects に設定する場合にのみ必要です。

REST

共有ノードグループを作成するには、次の nodeGroups.insert メソッドを使用します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups

{
  ...
  "name": NODE_GROUP,
  "nodeTemplate": NODE_TEMPLATE,
  "size": SIZE,
  "shareSettings": {
    "shareType": SHARE_TYPE,
    "projectMap": {
      string: {
        "projectId": PROJECTS
      },
    }
  }
  ...
}

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

  • PROJECT: ノードグループを作成するプロジェクトの名前。

  • ZONE: ノードグループを作成するゾーン。

  • NODE_GROUP: ノードグループの名前。

  • NODE_TEMPLATE: 前に作成したノード テンプレートの名前。

  • SIZE: ノードプール内のノード数。

  • SHARE_TYPE: ノードグループの共有設定。特定のプロジェクトと共有する場合は SPECIFIC_PROJECTS に設定し、組織全体と共有する場合は ORGANIZATION に設定します。

  • PROJECTS: ノードグループを共有するプロジェクト ID またはプロジェクト番号のリスト。SHARE_TYPESPECIFIC_PROJECTS に設定する場合にのみ必要です。

共有ノードグループで単一テナント VM をプロビジョニングする

共有ノードグループに単一テナント VM をプロビジョニングするには、Google Cloud コンソール、gcloud CLI、または REST を使用します。

コンソール

  1. Google Cloud コンソールで、ノードグループを共有しているプロジェクトに切り替えます。

  2. [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  3. [インスタンスを作成] をクリックします。

  4. [ゾーン] で、共有ノードグループのゾーンを選択します。

  5. [マシンの構成] > [シリーズ] で、共有単一テナントノード グループ テンプレートで指定されているのと同じマシンタイプを選択します。

  6. [詳細オプション] > [単一テナンシー] > [参照] を開きます。

  7. [プロジェクトの選択] を選択し、共有ノードグループを含むプロジェクトを指定します。

  8. VM をプロビジョニングする単一テナントノード グループまたはそのグループ内の特定の単一テナントノードを選択します。

gcloud

ノードグループ名を使用して共有ノードグループに VM をプロビジョニングする

ノードグループ名を使用して共有ノードグループに単一テナント VM をプロビジョニングするには、次の gcloud compute instances create コマンドを使用します。

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --node-group=NODE_GROUP \
    --node-project=NODE_PROJECT

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

  • VM_NAME: 共有ノードグループに作成する新しい単一テナント VM の名前

  • MACHINE_TYPE: 新しい単一テナント VM のマシンタイプ

  • NODE_GROUP: 単一テナント VM を作成する共有ノードグループの名前

  • NODE_PROJECT: VM をプロビジョニングするノードグループを含むプロジェクト

ノード アフィニティ ファイルを使用して、共有ノードグループに VM をプロビジョニングする

ノード アフィニティ ファイルを使用して共有ノードグループに単一テナント VM をプロビジョニングするには、次の gcloud compute instances create コマンドを使用します。

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --node-affinity-file=NODE_AFFINITY_FILE

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

  • VM_NAME: アフィニティ ラベルを使用して、共有ノードグループに作成する単一テナント VM の名前。

  • MACHINE_TYPE: 共有ノードグループに作成する単一テナント VM のマシンタイプ。

  • NODE_AFFINITY_FILE: ノード アフィニティ情報を含む .json ファイルの名前。ノード アフィニティ ファイルで、アフィニティ ラベルのキーを "compute.googleapis.com/project"、演算子を "IN"、値にノードグループを含むプロジェクトを設定します。ノード アフィニティを構成する方法の詳細については、ノード アフィニティ ラベルの構成をご覧ください。

REST

ノード アフィニティ ファイルを使用して共有ノードグループに単一テナント VM をプロビジョニングするには、次の nodeGroups.insert メソッドを使用します。

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

{
  ...
  "name": VM_NAME,
  "machineType": MACHINE_TYPE,
  "scheduling": {
    ...
    "nodeAffinities": [
      {
        "key": KEY,
        "operator": OPERATOR,
        "values": [
          VALUE
        ]
      }
    ],
    ...
  },
  ...
}

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

  • PROJECT: ノードグループを所有するプロジェクトの名前。

  • ZONE: ノードグループのゾーン

  • VM_NAME: アフィニティ ラベルを使用して、共有ノードグループに作成する単一テナント VM の名前。

  • MACHINE_TYPE: 共有ノードグループに作成する単一テナント VM のマシンタイプ。

  • KEY: アフィニティ ラベル。"compute.googleapis.com/project" に設定します。

  • OPERATOR: アフィニティ ラベル演算子。"IN" に設定します。

  • VALUE: VM をプロビジョニングするノードグループを含むプロジェクト。プロジェクト名またはプロジェクト ID を使用して、1 つのプロジェクトを指定します。

ノード アフィニティを構成する方法の詳細については、ノード アフィニティ ラベルの構成をご覧ください。

ノードグループの共有設定を表示する

ノードグループの共有設定を表示するには、Google Cloud コンソール、gcloud CLI、または REST を使用します。

コンソール

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

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

  2. ノードグループのプロパティを表示するには、[名前] 列で、ノードグループの名前をクリックします。

gcloud

ノードグループの共有設定を表示するには、次の gcloud compute sole-tenancy node-groups describe コマンドを使用します。

gcloud compute sole-tenancy node-groups describe NODE_GROUP

NODE_GROUP は、共有設定を表示するノードグループの名前に置き換えます。

REST

ノードグループの共有設定を表示するには、次の nodeGroups.get メソッドを使用します。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups

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

  • PROJECT: 共有設定を表示するノードグループを持つプロジェクトの名前

  • ZONE: 共有設定を表示するノードグループを含むゾーン

既存のノードグループを共有する

既存のノードグループを他のプロジェクトや組織全体と共有するには、Google Cloud コンソール、gcloud CLI、または REST を使用します。

コンソール

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

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

  2. [名前] 列で、ノードグループの名前をクリックします。

  3. ノードグループを組織内のすべてのプロジェクトまたは組織内の選択したプロジェクトと共有するには、[概要] > [共有先] で、[編集] をクリックします。 をクリックします。

gcloud

ノードグループの共有設定を更新するには、次の gcloud compute sole-tenancy node-groups update コマンドを使用します。

gcloud compute sole-tenancy node-groups update NODE_GROUP \
    --zone=ZONE \
    --share-setting=SHARE_SETTING \
    --share-with=PROJECTS

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

  • NODE_GROUP: 共有設定を更新するノードグループの名前。

  • SHARE_SETTING: ノードグループの共有設定。特定のプロジェクトと共有する場合は projects に設定し、組織全体と共有する場合は organization に設定します。

  • PROJECTS: ノードグループを共有するプロジェクト ID またはプロジェクト番号のリスト。SHARE_SETTINGprojects に設定する場合にのみ必要です。

REST

ノードグループの共有設定を更新するには、次の nodeGroups.patch メソッドを使用します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups/NODE_GROUP

{
  "shareSettings": {
    "shareType": SHARE_TYPE,
    "projectMap": {
      string: {
        "projectId": PROJECTS
      },
    }
  }
}

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

  • PROJECT: 共有設定を更新するノードグループを持つプロジェクトの名前。

  • ZONE: 共有設定を更新するノードグループを含むゾーン。

  • NODE_GROUP: 共有設定を更新するノードグループの名前。

  • SHARE_TYPE: ノードグループの共有設定。特定のプロジェクトと共有する場合は projects に設定し、組織全体と共有する場合は organization に設定します。

  • PROJECTS: ノードグループを共有するプロジェクト ID またはプロジェクト番号のリスト。SHARE_SETTINGSPECIFIC_PROJECTS に設定する場合にのみ必要です。

ノードグループの共有を停止する

他のプロジェクトや組織全体とのノードグループの共有を停止するには、gcloud CLI または REST を使用します。

コンソール

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

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

  2. ノードグループの名前をクリックします。

  3. [概要] > [共有者] で、編集アイコン をクリックします。

  4. 共有を停止するには、[このノードグループを他のプロジェクトと共有しない] を選択します。

gcloud

他のプロジェクトや組織全体とのノードグループの共有を停止するには、次の gcloud compute sole-tenancy node-groups update コマンドを使用します。

gcloud compute sole-tenancy node-groups update NODE_GROUP \
    --zone=ZONE \
    --share-setting=local

NODE_GROUP は、共有を停止するノードグループの名前に置き換えます。

REST

他のプロジェクトや組織全体とのノードグループの共有を停止するには、次の nodeGroups.patch メソッドを使用します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups/NODE_GROUP

{
  "shareSettings": {
    "shareType": LOCAL
  }
}

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

  • PROJECT: 共有を停止するノードグループを持つプロジェクトの名前

  • ZONE: 共有を停止するノードグループを含むゾーン

  • NODE_GROUP: 共有を停止するノードグループの名前

所有プロジェクトから共有ノードグループを削除する

所有するプロジェクトから共有ノードグループを削除するには、Google Cloud コンソール、gcloud CLI、または REST を使用します。ノードグループを削除する前に、ノードグループで実行されているすべての VM を停止します。

コンソール

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

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

  2. [名前] 列で、ノードグループの名前をクリックします。

  3. [削除] をクリックします。

gcloud

所有するプロジェクトから共有ノードグループを削除するには、次の gcloud compute sole-tenancy node-groups delete コマンドを使用します。

gcloud compute sole-tenancy node-groups delete NODE_GROUP

NODE_GROUP は、削除するノードグループの名前に置き換えます。

REST

所有するプロジェクトから共有ノードグループを削除するには、次の nodeGroups.delete メソッドを使用します。

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/nodeGroups/NODE_GROUP

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

  • PROJECT: 削除するノードグループを持つプロジェクトの名前

  • ZONE: 削除するノードグループを含むゾーン

  • NODE_GROUP: 削除するノードグループの名前