GKE での Compute Engine 単一テナントノードの使用


このページでは、Google Kubernetes Engine(GKE)で Compute Engine の単一テナントノードを使用する方法について説明します。

単一テナントノードは、特定のプロジェクトの VM を実行する専用の物理サーバーです。単一テナントノードを使用すると、VM を他のプロジェクトの VM から物理的に分離することや、同じホスト ハードウェア上に VM をグループ化することが可能です。

始める前に

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Google Cloud CLI がインストールされていることを確認します。
  • 次のいずれかの方法で、プロジェクトにデフォルトの Google Cloud CLI 設定をセットアップします。
    • プロジェクトのデフォルトの設定全般を確認する場合は、gcloud init を使用します。
    • gcloud config を使用して、プロジェクト ID、ゾーン、リージョンを個別に設定します。

    gcloud init

    1. gcloud init を実行して、次の操作を行います。

      gcloud init

      リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

      gcloud init --console-only
    2. Google Cloud アカウントを使用できるように、gcloud CLI の承認手順を行います。
    3. 新しい構成を作成するか、既存の構成を選択します。
    4. Google Cloud プロジェクトを選択します。
    5. デフォルトの Compute Engine ゾーンを選択します。
    6. デフォルトの Compute Engine リージョンを選択します。

    gcloud config

    1. デフォルトのプロジェクト ID を設定します。
      gcloud config set project PROJECT_ID
    2. デフォルトの Compute Engine リージョン(例: us-central1)を設定します。
      gcloud config set compute/region COMPUTE_REGION
    3. デフォルトの Compute Engine ゾーン(例: us-central1-c)を設定します。
      gcloud config set compute/zone COMPUTE_ZONE
    4. gcloud を最新バージョンに更新します。
      gcloud components update

    デフォルトの場所を設定することで、gcloud CLI のエラー(One of [--zone, --region] must be supplied: Please specify location など)を防止できます。

追加の割り当てをリクエストする

単一テナントノードは規模が大きく(例: 96 個の vCPU と 624 GB のメモリ)、デフォルトのプロジェクト割り当てでは過少なため処理できません。

単一テナントノードを作成するには、割り当てページで Compute Engine API CPU の割り当ての引き上げをリクエストする必要があります。引き上げのリクエストの詳細については、割り当てをご覧ください。

必要な CPU の数は、次の条件によって異なります。

  • 現在の CPU 割り当て使用量。
  • ノードグループのサイズ。
  • ノード テンプレート。

単一テナントノードのコア数を確認し、少なくともその量の CPU 上限をリクエストします(好ましくは追加 CPU 10 個のヘッドルームと併せて)。

単一テナントノード テンプレートを作成する

単一テナントノード テンプレートは、ノードグループの作成時にすべてのノードでプロパティを定義し、適用するリージョン リソースです。詳細については、ノードタイプをご覧ください。

Console

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

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

  2. [ノード テンプレートを作成] をクリックします。

  3. ノード テンプレートの [名前] と [リージョン] を指定します。

  4. ノードタイプを選択します。

  5. 必要に応じて、1 つ以上のノード アフィニティ ラベルを追加します。

  6. [作成] をクリックして、テンプレートを作成します。

gcloud

gcloud compute sole-tenancy node-templates create コマンドを使用してノード テンプレートを作成します。

gcloud compute sole-tenancy node-templates create TEMPLATE_NAME \
    --node-type=NODE_TYPE \
    --node-affinity-labels=AFFINITY_LABELS \
    --region=COMPUTE_REGION

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

  • TEMPLATE_NAME: 新しいノード テンプレートの名前。
  • NODE_TYPE: このテンプレートに基づいて作成された単一テナントノードのノードタイプ。gcloud compute sole-tenancy node-types list コマンドを使用して、各ゾーンで使用可能なノードタイプのリストを取得します。
  • AFFINITY_LABELS: アフィニティ ラベルの Key-Value([KEY=VALUE,...])。アフィニティ ラベルを使用すると、ノードとノードグループを論理的にグループ化できます。後で VM をプロビジョニングする際、VM にアフィニティ ラベルを指定して、特定のノードまたはノードグループのセットに VM をスケジュールできます。詳細については、ノード アフィニティとアンチアフィニティをご覧ください。
  • COMPUTE_REGION: ノード テンプレートを作成するリージョン。指定したリージョンの任意のゾーンで、このノード テンプレートを使用してノードグループを作成できます。

出力は次のようになります。

Created [https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/nodeTemplates/template-name].

単一テナントノード グループを作成する

ノードグループは、同じ単一テナントノード テンプレートからの特定のゾーン内の単一テナントノードのセットです。複数のゾーンで使用できるリージョン クラスタとノードプールの場合は、各ゾーンで同じ名前のノードグループを作成する必要があります。

Console

単一テナントノード グループを作成するには、次の手順を行います。

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

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

  2. [ノードグループを作成] をクリックします。

  3. ノード テンプレートの [名前] を指定します。

  4. ノード テンプレートを作成したリージョンを選択し、そのリージョンゾーンを選択します。

  5. ノード テンプレートを選択します。

  6. 必要に応じて、自動スケーリング モードを有効にします。

  7. グループに含めるノードの数を指定します。

  8. 必要に応じて、メンテナンス ポリシーを変更します。

  9. [作成] をクリックして、ノードグループを作成します。

gcloud

テンプレートからノードグループを作成します。

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

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

  • GROUP_NAME: 新しいノードグループに付ける名前。
  • COMPUTE_ZONE は、このノードグループが存在するゾーンです。このゾーンは、使用しているノード テンプレートと同じリージョンに存在する必要があります。
  • TEMPLATE_NAME: 使用しているノード テンプレートの名前。
  • TARGET_SIZE: グループ内に作成するノードの数。

出力は次のようになります。

Created [https://www.googleapis.com/compute/projects/my-project/zones/us-central1-a/nodeGroups/group-name].

GKE 単一テナントノード プールを作成する

Compute Engine での単一テナントノード グループの作成が完了したため、単一テナントノード プールを作成できます。

すでに GKE クラスタを使用している場合は、そのクラスタに単一テナント ノードプールを追加できます。そうでない場合は、gcloud container clusters create を使用したクラスタを作成します。

リージョン クラスタを使用している場合、または複数のゾーンでノードプールが使用可能な場合は、各ゾーンに同じ名前のノードグループを作成する必要があります。各ゾーンでその名前を再利用できない場合は、ゾーンごとに個別のノードプールを作成します。

  1. 指定したノードグループで、新しいノードプールを作成します。

    ゾーンのノードプールの場合:

    gcloud container node-pools create NODE_POOL_NAME \
        --node-group GROUP_NAME --cluster CLUSTER_NAME \
        --zone COMPUTE_ZONE --machine-type=MACHINE_TYPE \
        --node-locations=COMPUTE_ZONE,COMPUTE_ZONE1
    

    リージョンのノードプールの場合:

    gcloud container node-pools create NODE_POOL_NAME \
        --node-group GROUP_NAME --cluster CLUSTER_NAME \
        --region COMPUTE_REGION --machine-type=MACHINE_TYPE \
        --node-locations=COMPUTE_ZONE,COMPUTE_ZONE1
    

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

    • NODE_POOL_NAME: 新しいノードプールの名前。
    • GROUP_NAME: 使用する既存の単一テナントノード グループの名前。
    • CLUSTER_NAME: ノードプールを作成するクラスタの名前。
    • COMPUTE_REGION: クラスタと同じリージョン。
    • MACHINE_TYPE: ノードプールのマシンタイプ。
    • COMPUTE_ZONECOMPUTE_ZONE1,[...]: 単一テナントノード グループのゾーン
  2. ノードプールが作成されたことを確認します。

    kubectl get nodes
    

作成したノードプール内の Ready 状態にあるノードのリストが表示されます。単一テナントノードは、[単一テナントノード] ページでも確認できます。

クリーンアップ

上記の例で作成したリソースを削除するには、次の手順を行います。

  1. 単一テナントノード プールを削除します。

    gcloud container node-pools delete NODE_POOL_NAME
    
  2. 単一テナントノード グループを削除します。

    gcloud compute sole-tenancy node-groups delete GROUP_NAME \
        --zone COMPUTE_ZONE
    
  3. 単一テナントノード テンプレートを削除します。

    gcloud compute sole-tenancy node-templates delete TEMPLATE_NAME \
        --region COMPUTE_REGION
    

次のステップ