プリエンプティブル 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 を含むクラスタまたはノードプールを作成するには、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 のドキュメント