このページでは、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
GCP Console で Google Kubernetes Engine のメニューにアクセスします。
[クラスタを作成] をクリックします。
[標準クラスタ] テンプレートを選択するか、ワークロードに適切なテンプレートを選択します。
必要に応じてクラスタを構成します。次に、構成するノードプールの [その他のオプション] をクリックします。
[プリエンプティブ ノード] セクションで、[プリエンプティブ ノードを有効化] をオンにします。
[保存] をクリックしてノードプール変更オーバーレイを閉じます。
[作成] をクリックします。
ノード 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