予約済みゾーンリソースの使用


特定のゾーンで Compute Engine インスタンスを予約できます。これにより、ワークロード用のリソースが必要になる場合に備えて、リソースを確保しておくことができます。予約を管理する方法の詳細については、Compute Engine ゾーンリソースの予約をご覧ください。

予約を作成したら、予約したインスタンスを使用する Google Kubernetes Engine(GKE)クラスタとノードプールを作成できます。GKE は、Compute Engine と同じく次の使用モードをサポートしています。

始める前に

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

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

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

    gcloud init

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

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. ゾーンクラスタの場合はデフォルトの Compute Engine ゾーン、リージョン クラスタまたは Autopilot クラスタの場合はデフォルトの Compute Engine リージョンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project PROJECT_ID
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone COMPUTE_ZONE
  • Autopilot クラスタまたはリージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region COMPUTE_REGION
  • gcloud を最新バージョンに更新します。
    gcloud components update

GKE で予約済みインスタンスを使用する

クラスタまたはノードプールの作成時に --reservation-affinity フラグを指定すると、予約使用モードを指定できます。

一致する任意の予約を使用する

一致する任意の予約を自動的に使用するには、予約アフィニティ フラグを --reservation-affinity=any に設定します。

any 予約消費量モードでは、ノードは最初に同じゾーン内で一致する任意の予約から容量を取得します。容量が不十分な場合には、残りの容量を Compute Engine の一般リソースプールから取得します。Compute Engine が一致する予約を見つける仕組みについては、予約の仕組みをご覧ください。

予約を作成し、任意の予約を使用するインスタンスを作成するには、次の手順を行います。

  1. 3 つの VM インスタンスからなる予約を作成します。

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3
    

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

    • RESERVATION_NAME: 作成する予約の名前。
    • MACHINE_TYPE: 予約に使用するマシンタイプ(名前のみ)。例: n1-standard-2
  2. 予約が正常に作成されたことを確認します。

    gcloud compute reservations describe RESERVATION_NAME
    

    RESERVATION_NAME は、作成した予約の名前に置き換えます。

  3. 一致する任意の予約を使用するノードを 1 つ含むクラスタを作成します。

    gcloud container clusters create CLUSTER_NAME \
        --machine-type=MACHINE_TYPE --num-nodes=1 \
        --reservation-affinity=any
    

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

    • CLUSTER_NAME: 作成するクラスタの名前。
    • MACHINE_TYPE: クラスタで使用するマシンタイプ(名前のみ)。例: n1-standard-2
  4. 一致する任意の予約を使用する、3 つのノードからなるノードプールを作成します。

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME --num-nodes=3 \
        --machine-type=MACHINE_TYPE --reservation-affinity=any
    

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

    • NODEPOOL_NAME: 作成するノードプールの名前。
    • CLUSTER_NAME: 上で作成したクラスタの名前。
    • MACHINE_TYPE: ノードプールに使用するマシンタイプ(名前のみ)。例: n1-standard-2

総ノード数は 4 ですが、これは予約の容量を超えています。ノードのうち 3 個は予約を使用し、最後のノードは Compute Engine の一般リソースプールから容量を取得します。

特定の予約を使用する

特定の予約を使用するには、予約アフィニティ フラグを --reservation-affinity=specific に設定し、特定の予約名を指定します。このモードでは、インスタンスは必ずゾーン内の指定された予約から容量を取得します。指定された予約に十分な容量がない場合、リクエストは失敗します。

予約を作成し、特定の予約を使用するインスタンスを作成するには、次の手順を行います。

  1. 3 つの VM インスタンスからなる特定の予約を作成します。

    gcloud compute reservations create RESERVATION_NAME \
        --machine-type=MACHINE_TYPE --vm-count=3 \
        --require-specific-reservation
    

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

    • RESERVATION_NAME: 作成する予約の名前。
    • MACHINE_TYPE: 予約に使用するマシンタイプ(名前のみ)。例: n1-standard-2
  2. 一致する任意の予約を使用するノードを 1 つ含むクラスタを作成します。

    gcloud container clusters create CLUSTER_NAME \
        --machine-type=MACHINE_TYPE --num-nodes=1 \
        --reservation-affinity=specific --reservation=RESERVATION_NAME
    

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

    • CLUSTER_NAME: 作成するクラスタの名前。
    • MACHINE_TYPE: クラスタで使用するマシンタイプ(名前のみ)。例: n1-standard-2
    • RESERVATION_NAME: 使用する予約の名前。
  3. 一致する任意の予約を使用する、2 つのノードからなるノードプールを作成します。

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME --num-nodes=2 \
        --machine-type=MACHINE_TYPE \
        --reservation-affinity=specific --reservation=RESERVATION_NAME
    

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

    • NODEPOOL_NAME: 作成するノードプールの名前。
    • CLUSTER_NAME: 上で作成したクラスタの名前。
    • MACHINE_TYPE: ノードプールに使用するマシンタイプ(名前のみ)。例: n1-standard-2
    • RESERVATION_NAME: 使用する予約の名前。

特定の予約を使用する場合のその他の考慮事項

特定予約アフィニティを使用してノードプールを作成した場合(クラスタ作成時のデフォルト ノードプールも含まれる)、ノードプールの存続期間全体を通じて、ノードプールのサイズは該当する予約の容量までに制限されます。これは、GKE の以下の機能に影響します。

  • 複数のゾーンがあるクラスタ: リージョン クラスタまたはマルチゾーン クラスタでは、ノードプールのノードが複数のゾーンに存在する可能性があります。予約は単一ゾーン対応であるため、複数の予約が必要になります。これらのクラスタで特定の予約を使用するノードプールを作成するには、ノードプールの各ゾーンに、名前とマシン プロパティが完全に同じ予約を作成する必要があります。
  • クラスタの自動スケーリング / サージ アップグレード: 特定の予約で追加の容量がない場合、ノードプールのサージ アップグレードまたは自動スケーリングが失敗することがあります。これは、サージ アップグレードと自動スケーリングのいずれの場合も、追加のインスタンスを作成する必要があるためです。これを解決するには、予約のサイズを変更するか、バインドされたリソースの一部を解放します。

予約を使用せずにノードを作成する

任意の予約のリソースの使用を明示的に回避するには、アフィニティを --reservation-affinity=none に設定します。

  1. 一致する任意の予約を使用するクラスタを作成します。

    gcloud container clusters create CLUSTER_NAME --reservation-affinity=none
    

    CLUSTER_NAME は、作成するクラスタの名前に置き換えます。

  2. 一致する任意の予約を使用するノードプールを作成します。

    gcloud container node-pools create NODEPOOL_NAME \
        --cluster CLUSTER_NAME \
        --reservation-affinity=none
    

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

    • NODEPOOL_NAME: 作成するノードプールの名前。
    • CLUSTER_NAME: 上で作成したクラスタの名前。

クリーンアップ

このページで使用したリソースについて、Cloud 請求先アカウントに課金されないようにする手順は次のとおりです。

  1. 各クラスタに対して次のコマンドを実行して、作成したクラスタを削除します。

    gcloud container clusters delete CLUSTER_NAME
    
  2. 各予約で次のコマンドを実行して、作成した予約を削除します。

    gcloud compute reservations delete RESERVATION_NAME
    

次のステップ