特定のゾーンで Compute Engine インスタンスを予約できます。これにより、ワークロード用のリソースが必要になる場合に備えて、リソースを確保しておくことができます。予約を管理する方法の詳細については、Compute Engine ゾーンリソースの予約をご覧ください。
予約を作成したら、予約したインスタンスを使用する Google Kubernetes Engine(GKE)クラスタとノードプールを作成できます。GKE は、Compute Engine と同じく次の使用モードをサポートしています。
始める前に
作業を始める前に、次のことを確認してください。
- Google Kubernetes Engine API が有効になっていることを確認します。 Google Kubernetes Engine API の有効化
- Cloud SDK がインストール済みであることを確認します。
次のいずれかの方法で gcloud
のデフォルトの設定を指定します。
gcloud init
。デフォルトの設定全般を確認する場合に使用します。gcloud config
。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。
gcloud init の使用
エラー One of [--zone, --region] must be supplied: Please specify
location
を受信した場合は、このセクションの内容を実施します。
-
gcloud init
を実行して、次の操作を行います。gcloud init
リモート サーバーで SSH を使用している場合は、
--console-only
フラグを指定して、コマンドがブラウザを起動しないようにします。gcloud init --console-only
- 手順に従って
gcloud
を承認し、Google Cloud アカウントを使用します。 - 新しい構成を作成するか、既存の構成を選択します。
- Google Cloud プロジェクトを選択します。
- デフォルトの Compute Engine ゾーンを選択します。
gcloud config の使用
- デフォルトのプロジェクト ID を設定します。
gcloud config set project project-id
- ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
gcloud config set compute/zone compute-zone
- リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
gcloud config set compute/region compute-region
gcloud
を最新バージョンに更新します。gcloud components update
GKE で予約済みインスタンスを使用する
クラスタまたはノードプールの作成時に --reservation-affinity
フラグを指定すると、予約使用モードを指定できます。
一致する任意の予約を使用する
一致する任意の予約を自動的に使用するには、予約アフィニティ フラグを --reservation-affinity=any
に設定します。
any
予約消費量モードでは、ノードは最初に同じゾーン内で一致する任意の予約から容量を取得します。容量が不十分な場合には、残りの容量を Compute Engine の一般リソースプールから取得します。Compute Engine が一致する予約を見つける仕組みについては、予約の仕組みをご覧ください。
予約を作成し、任意の予約を使用するインスタンスを作成するには、次の手順を行います。
3 つの VM インスタンスからなる予約を作成します。
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3
以下を置き換えます。
RESERVATION_NAME
: 作成する予約の名前。MACHINE_TYPE
: 予約に使用するマシンタイプ(名前のみ)。例:n1-standard-2
予約が正常に作成されたことを確認します。
gcloud compute reservations describe RESERVATION_NAME
RESERVATION_NAME
は、作成した予約の名前に置き換えます。一致する任意の予約を使用するノードを 1 つ含むクラスタを作成します。
gcloud container clusters create CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=any
以下を置き換えます。
CLUSTER_NAME
: 作成するクラスタの名前。MACHINE_TYPE
: クラスタで使用するマシンタイプ(名前のみ)。例:n1-standard-2
一致する任意の予約を使用する、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 ですが、これは予約の容量を超えています。したがって、4 つのノードのうち 3 つは予約を使用し、最後のノードは Compute Engine の一般リソースプールから容量を取得します。
特定の予約を使用する
特定の予約を使用するには、予約アフィニティ フラグを --reservation-affinity=specific
に設定し、特定の予約名を指定します。このモードでは、インスタンスは必ずゾーン内の指定された予約から容量を取得します。指定された予約に十分な容量がない場合、リクエストは失敗します。
予約を作成し、特定の予約を使用するインスタンスを作成するには、次の手順を行います。
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
一致する任意の予約を使用するノードを 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
: 使用する予約の名前。
一致する任意の予約を使用する、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
に設定します。
一致する任意の予約を使用するクラスタを作成します。
gcloud container clusters create CLUSTER_NAME --reservation-affinity=none
CLUSTER_NAME
は、作成するクラスタの名前に置き換えます。一致する任意の予約を使用するノードプールを作成します。
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --reservation-affinity=none
以下を置き換えます。
NODEPOOL_NAME
: 作成するノードプールの名前。CLUSTER_NAME
: 以前に作成したクラスタの名前。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにする手順は次のとおりです。
各クラスタに対して次のコマンドを実行して、作成したクラスタを削除します。
gcloud container clusters delete CLUSTER_NAME
各予約に対して次のコマンドを実行して、作成した予約を削除します。
gcloud compute reservations delete RESERVATION_NAME