コンテンツに移動
コスト管理

Spot VM によって VM 戦略を見直す

2022年10月27日
Google Cloud Japan Team

※この投稿は米国時間 2022 年 10 月 18 日に、Google Cloud blog に投稿されたものの抄訳です。

サステナビリティ、AI / ML、データ分析などの分野における Google のリーダーシップを理由に、世界中の組織が自社のビジネスやデジタル トランスフォーメーションを加速化するための変革パートナーとして Google Cloud を選んでいます。Google は費用の最適化を容易にすることにも積極的に取り組んでおり、お客様が自社の環境を苦労せずに最適化できるようにする一連のサービスやツールを提供しています。

「Media.net は、急増するワークロードに対応するためにさまざまな選択肢を検討した結果、Spot VM を選択しました。それは、大幅な割引が受けられるうえ、料金体系がシンプルで費用が予測可能だからです。」- Media.net、エンジニアリング担当シニア バイス プレジデント、Amit Bhawani 氏

今日は、コンピューティング費用を最大 91% 削減できる Spot VM のユースケースと、そのプロビジョニングや管理に関するベスト プラクティスを詳しく見ていきます。

以前は「プリエンプティブル VM」と呼ばれていた Spot VM は、フォールト トレラントなワークロードに最適で、オンデマンド VM と同じパフォーマンスを提供します。オンデマンド VM と比較して 60%~91% の料金割引が保証されており、これには VM にアタッチされている GPU、ローカル SSD、IP アドレスが含まれます。料金はリージョンとマシンタイプによって異なります。

Spot VM が適している一般的なユースケースとワークロードを見てみましょう。

ユースケース

Spot VM は、バッチ コンピューティング、HPC ワークロード、ML モデルのトレーニング、ステートレス ウェブ アプリケーションに適しています。また、インスタンスの障害 / 終了を適切に処理できるコンテナ化されたワークロードにも役立ちます。Spot は、Google Kubernetes Engine(GKE)GKE Autopilot、Batch、Dataproc、Dataflow の VM と統合されています。

Spot VM はプリエンプト(実行が中断)される可能性があるため、Spot はレンダリング、遺伝子データの処理、財務モデリングのようなフォールト トレラントなワークロードに使用することをおすすめします。

逆に言えば、ステートフル ワークロードや耐障害性のないワークロードなど、稼働時間のニーズが高いワークロードは Spot VM に向いていません。Spot VM のユースケースとそのベスト プラクティスについてもっと詳しく知りたい場合は、こちらのブログをお読みください。

主な利点

シンプルで予測可能な料金体系: Spot VM は、標準 VM よりも最大 91%、最低でも 60% 低い料金で利用できるほか、割引率が最大で月 1 回の頻度で変更される予測可能な料金体系になっています。そのため、費用をより正確に予測して急増を防ぐことができます。料金を確認するには、VM インスタンスの料金ページをご覧いただくか、Cloud Billing Catalog API を使用して料金情報を取得します。

利用時間の上限なし: Spot VM は、Compute Engine によってリソースの回収が要求されるまで無期限に実行されます。

Spot のデプロイの概要

1 つ以上の MIG をデプロイして Spot VM リソースの各プールを管理し、それらのリソースをスケールできます。これは、実行に必要な最小限のリソースセットの要件を持たないワークロードに最適です。

また、Spot と統合されたフルマネージドのバッチ プロダクトである Google Batch も提供されています。このプロダクトでは、Batch を追加費用なしで利用できます。作成したジョブはそれぞれ自動的にプロビジョニングされ、そのタスクの実行に必要なリソースが使用されます。次に、Spot VM を作成および管理するいくつかの方法を見てみましょう。

マネージド インスタンス グループを使用して Spot VM を維持管理し、自動化する: 

マネージド インスタンス グループ(MIG)は、一群の VM によってアプリケーションやお客様の需要を確実に満たせるようにする手段です。マネージド インスタンス グループは他のマネージド サービスやマネージド機能と同じように働きます。つまり、一部のアクションがクラウドで自動的に行われるため、手動での作業が少なくなり、お客様側での管理の負担が軽減されます。ローリング アップデートや Blue/Green デプロイは MIG が処理し、構成可能な指標に基づいてインスタンス グループを自動的にスケールアウトまたはスケールインできます。Spot VM と MIG を組み合わせて使用すると、これらの利点を享受しながら、スケールアウト時に Spot VM をデプロイしたり、プリエンプションによって失われた VM を置き換えたりすることができます。Spot VM が使用できない場合、MIG は追加の Spot VM をリクエストし続け、そのキャパシティが使用可能になって需要が満たされるまでこれを継続します。MIG を使用するときの注意すべき点は、すべての Spot VM がプリエンプトされた場合にコンピューティングの停止を回避できないことです。ただし、Spot VM が再び使用可能になると、手動で作業しなくても新しいインスタンスがオンラインになります。

Spot VM を作成して使用する

Spot VM の概略とそのユースケースがわかったところで、ここからは Spot VM を作成して管理するための以下の方法を詳しく見ていきましょう。

  • Spot VM を作成して識別する方法

  • Spot VM を作成するさまざまな方法

  • Google Kubernetes Engine(GKE)での Spot VM の使用

  • Spot VM のベスト プラクティス

他の VM と同様に、Spot VM を使用するには CPU の割り当てが必要です。これらのリソースで Spot VM を使用する場合に、プリエンプティブル割り当てをリクエストしなければ、お客様が所有する標準割り当てが消費されます。Spot VM を使用する場合は、Spot VM によって標準割り当てが消費されないようにするために、最初のステップとして、目的のリソースに対してプリエンプティブル割り当てをリクエストすることを検討してください。

Spot VM の作成方法は複数あり、コンソール、gcloud CLI、Compute Engine API、または Terraform を使用して作成できます。Spot VM は、スポット プロビジョニング モデルを使用するように構成された VM です。

コンソール

  1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

  2. [ネットワーク、ディスク、セキュリティ、管理、単一テナンシー] セクションを開き、次の操作を行います。

    1. [管理] セクションを開きます。

    2. [可用性ポリシー] セクションで、[VM プロビジョニング モデル] リストから [スポット] を選択します。これを選択すると、VM の自動再起動とホスト メンテナンス オプションが無効になり、終了アクション オプションが有効になります。

    3. 省略可: [VM の終了時] リストで、VM がプリエンプトされたときの動作を選択します。

      1. プリエンプション中に VM を停止するには、[停止] を選択します(デフォルト)。

      2. プリエンプション中に VM を削除するには、[削除] を選択します。

  3. 省略可: その他の VM オプションを指定します。詳細については、VM インスタンスの作成と起動をご覧ください。

  4. VM を作成して起動するには、[作成] をクリックします。

https://storage.googleapis.com/gweb-cloudblog-publish/images/spot_vm.max-1000x1000.jpg

gcloud

gcloud CLI から VM を作成するには、gcloud compute instances create コマンドを使用します。Spot VM を作成するには、--provisioning-model=SPOT フラグを指定する必要があります。必要に応じて、--instance-termination-action フラグを使用して Spot VM の終了アクションを指定することもできます。

コマンドの例:

読み込んでいます...

以下を置き換えます。

VM_NAME: 新しい VM の名前。

TERMINATION_ACTION: 省略可: VM がプリエンプトされたときの動作として、STOP(デフォルトの動作)または DELETE を指定します。

同じプロパティを持つ Spot VM を複数作成するには、インスタンス テンプレートを作成し、そのテンプレートを使用してマネージド インスタンス グループ(MIG)を作成します。

Compute Engine API

Compute Engine API から VM を作成するには、instances.insert メソッドを使用します。この場合は、VM のマシンタイプと名前を指定する必要があります。必要に応じて、ブートディスクのイメージを指定することもできます。

Spot VM を作成するには、"provisioningModel": spot フィールドを含める必要があります。必要に応じて、"instanceTerminationAction" フィールドを追加して Spot VM の終了アクションを指定することもできます。


読み込んでいます...

VM の作成時に指定できるオプションの詳細については、VM インスタンスの作成と起動をご覧ください。

Terraform

Terraform リソースで scheduling ブロックを使用して、Spot インスタンスを作成できます。

spot_instance_basic/main.tf

読み込んでいます...

Google Kubernetes Engine(GKE)および Autopilot クラスタでの Spot VM の使用

GKE で Spot VM を含むクラスタまたはノードプールを作成すると、基盤となる Compute Engine Spot VM が作成されます。これはマネージド インスタンス グループ(MIG)のように動作します。Spot VM を使用するノードは、標準の GKE ノードのように動作しますが、可用性は保証されません。標準 VM を実行するために Spot VM で使用されているリソースが要求された場合、Spot VM は終了し、それらのリソースは別の場所で使用されます。このセクションでは、GKE クラスタとノードプールで Spot VM と Spot Pod を使用することにより、フォールト トレラントなワークロード、ステートレス ワークロード、またはバッチ ワークロードを低費用で実行する方法をご紹介します。 

開始する前に、Google Kubernetes API が有効になっていることを確認してください。

  • クラスタまたはノードプールの作成手順については、公開されている GKE ドキュメントのこのセクションをご覧ください。

  • GKE Autopilot クラスタ用の Spot Pod を作成する手順については、公開されている GKE ドキュメントのこのセクションをご覧ください。  

Spot VM を起動および停止する

他の VM と同様に、Spot VM は作成時に起動します。同様に、Spot VM が停止した場合は、VM を再起動して RUNNING 状態を再開できます。プリエンプトされた Spot VM は、キャパシティがある限り、必要に応じて何回でも停止して再起動できます。詳細については、VM インスタンスのライフサイクルをご覧ください。

自動スケーリングされるマネージド インスタンス グループ(MIG)または Google Kubernetes Engine(GKE)クラスタ内の 1 つ以上の Spot VM が Compute Engine によって停止された場合、リソースが再び使用可能になると、Spot VM が再起動されます。

ベスト プラクティス

Spot VM を最大限に活用するためのベスト プラクティスは次のとおりです。

  • インスタンス テンプレートを使用する。Spot VM を一度に 1 つずつ作成する代わりに、インスタンス テンプレートを使用して同じプロパティを持つ複数の Spot VM を作成できます。インスタンス テンプレートは、MIG を使用する場合には必須です。別の方法として、インスタンス一括作成 API を使用して複数の Spot VM を作成することもできます。

  • MIG を使用して Spot VM のリージョン内での分散配置と自動再作成を行う。MIG を使用して、Spot VM 上のワークロードの柔軟性と復元性を高めます。たとえば、リージョン MIG を使用して VM を複数のゾーンに分散すると、リソース可用性エラーが軽減されます。さらに、自動修復を使用して、プリエンプトされた Spot VM を自動的に再作成します。

  • 小さいマシンタイプを選択する。Spot VM のリソースは、Google Cloud の予備キャパシティの余剰分から取得されます。多くの場合、Spot VM のキャパシティは小さいマシンタイプ、つまり vCPU やメモリなどのリソースが少ないマシンタイプの方が確保しやすくなります。より小さいカスタム マシンタイプを選択すると Spot VM のキャパシティは高くなる可能性がありますが、事前定義されたマシンタイプの中からより小さいマシンタイプを選んだ方が、キャパシティはより一層高くなる可能性があります。たとえば、事前定義されたマシンタイプ n2-standard-32 のキャパシティと比較した場合、カスタム マシンタイプ n2-custom-24-96 の方がキャパシティは高くなる可能性がありますが、事前定義されたマシンタイプ n2-standard-16 の方がより一層キャパシティは高くなる可能性があります。現時点で、永続ディスクやネットワーキングのようなコンピューティング以外のサービスには Spot VM の割引は適用されないのでご注意ください。

  • Spot VM の大規模なクラスタはオフピーク時に実行する。Google Cloud データセンターの負荷はロケーションや時間帯によって異なりますが、一般的に負荷が最も低くなるのは夜間と週末です。そのため、Spot VM の大規模なクラスタは夜間や週末に実行するのが最適です。

  • アプリケーションの設計に耐障害性と耐プリエンプション性を組み込む。プリエンプションのパターンは常に一定ではないという事実に備えることが重要です。たとえば、あるゾーンの一部が停止した場合、復旧作業の一環として、標準 VM を移動する余地を作るために多数の Spot VM がプリエンプトされる可能性があります。この短い期間のプリエンプション率は他の日とまったく異なったものになります。プリエンプションが常に小さなグループの中で行われることを前提としてアプリケーションを設計した場合、このようなイベントには対処できません。VM を停止することで、プリエンプション イベント発生時のアプリケーションの動作をテストできます。

  • シャットダウン スクリプトを使用する。ジョブの進行状況を保存できるシャットダウン スクリプトを使用してシャットダウンとプリエンプション通知を管理すると、ジョブがどこで中断されたかを取得できるので、最初からやり直さなくて済みます。

Spot VM の詳細については、Spot VM に関するこのドキュメントをご覧ください。

- エンタープライズ SI パートナー エンジニアリング チーム
投稿先