プリエンプティブ VM の実行

このページでは、Google Kubernetes Engine でのプリエンプティブ VM のサポートの概要を説明します。

概要

プリエンプティブ VM は、最長持続時間が 24 時間で、可用性が保証されない Google Compute Engine VM インスタンスです。プリエンプティブ VM は標準的な Compute Engine VM よりも低価格で、同じマシンタイプとオプションを使用できます。

バッチジョブやフォールト トレラントなジョブを実行するには、GKE クラスタまたはノードプールにプリエンプティブ VM を含めて使用できます。これらのジョブは、一時的で可用性が保証されないプリエンプティブ VM の性質にそれほど影響されないためです。

プリエンプティブ VM について詳しくは、Compute Engine ドキュメントのプリエンプティブ VM をご覧ください。

プリエンプティブ VM の仕組み

GKE クラスタまたはノードプールによって Compute Engine VM が作成されると、それらの VM はマネージド インスタンス グループのように動作します。GKE のプリエンプティブ VM には、マネージド インスタンス グループ内のプリエンプティブ インスタンスと同じ制約が適用されます。プリエンプティブ インスタンスは、プリエンプション通知を受け取ってから 30 秒後に終了します。

さらに、これらのプリエンプティブ VM には Kubernetes ラベル cloud.google.com/gke-preemptible=true が付けられます。Kubernetes ラベルを nodeSelector フィールドで使用することで、ポッドを特定のノードにスケジュールできます。

プリエンプティブ VM をフィルタリングするセレクタの例を次に示します。

apiVersion: v1
kind: Pod
spec:
  nodeSelector:
    cloud.google.com/gke-preemptible: "true"

おすすめ

プリエンプティブ VM では可用性が保証されないため、Compute Engine インスタンスのいずれかまたはすべてがプリエンプトされて使用できなくなる可能性があることを想定してシステムを設計する必要があります。新しいインスタンスがいつ使用可能になるかは保証されません。

さらに、プリエンプティブ VM 上で動作するポッドが常に正常にシャットダウンできるという保証はありません。

プリエンプティブ VM が使用できないときでもジョブまたはワークロードを確実に処理したい場合は、クラスタ内に非プリエンプティブ ノードプールとプリエンプティブ ノードプールの両方を作成できます。

プリエンプティブ VM を含むクラスタまたはノードプールを作成する

プリエンプティブ VM を含むクラスタまたはノードプールを作成するには、gcloud コマンドライン ツールまたは GCP Console を使用できます。

gcloud

--preemptible フラグを指定して、プリエンプティブ VM を含むクラスタまたはノードプールを作成できます。

プリエンプティブ VM を含むクラスタを作成するには、次のコマンドを実行します。

gcloud beta container clusters create [CLUSTER_NAME] --preemptible

ここで、[COMPUTE_ZONE] はクラスタのコンピューティング ゾーンです。

プリエンプティブ VM を含むノードプールを作成するには、次のコマンドを実行します。

gcloud beta container node-pools create [POOL_NAME] --preemptible \
--cluster [CLUSTER_NAME]

Console

  1. GCP Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [クラスタを作成] をクリックします。

  3. [標準クラスタ] テンプレートを選択するか、ワークロードに適切なテンプレートを選択します。

  4. 必要に応じてクラスタを構成します。次に、構成するノードプールの [高度な編集] をクリックします。

  5. [プリエンプティブ ノード] セクションで、[プリエンプティブ ノードを有効化] をオンにします。

  6. [保存] をクリックしてノードプール変更オーバーレイを閉じます。

  7. [作成] をクリックします。

ノード taint を使用してプリエンプティブ VM ノードへのスケジューリングを回避する

ユースケースによっては、非常に重要なポッドがプリエンプティブ VM ノードにスケジュールされないようにする必要があります。そのような場合、ノード taint とノード taint に対する容認機能を使用して、プリエンプティブ VM が含まれるノードにポッドがスケジュールされないようにすることができます。

プリエンプティブ VM が含まれるノードにノード taint を追加する

プリエンプティブ VM が含まれるノードに対するノード taint を追加するには、次のコマンドを実行します。

kubectl taint nodes [NODE_NAME] cloud.google.com/gke-preemptible="true":NoSchedule

これで、ノード taint を許容するポッドだけが、このノードにスケジュールされるようになります。

容認機能をポッドに追加する

関連する容認機能をポッドに追加するには、次の要素をポッドの仕様またはオブジェクトのポッド テンプレート仕様に追加します。

tolerations:
- key: cloud.google.com/gke-preemptible
  operator: Equal
  value: "true"
  effect: NoSchedule

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント