Amazon EKS で EC2 スポットインスタンスを使用する際のベストプラクティスにはどのようなものがありますか?

最終更新日:2021年12月22日

Amazon Elastic Kubernetes Service (Amazon EKS) で Amazon エラスティックコンピュートクラウド (Amazon EC2) スポットインスタンスを使用したいと考えています。ベストプラクティスにはどのようなものがありますか?

簡単な説明

Amazon EKS で Amazon EC2 スポットインスタンスを使用する際のベストプラクティスを以下に示します。

  • 長時間実行されるジョブやステートフルなアプリケーションにはスポットインスタンスを使用しないでください。
  • スポットインスタンスでマネージドノードグループを使用する。
  • 複数のインスタンスタイプをノードグループに追加する。
  • 自己管理型のノードグループには AWS ノード終了ハンドラーを使用します。

解決方法

長時間実行されるジョブやステートフルなアプリケーションにはスポットインスタンスを使用しない

スポットインスタンスの寿命が短いと、長時間実行されるジョブで望ましくない終了が発生する可能性があります。ステートフルアプリケーションはシャットダウンを許容できないため、ステートフルアプリケーションにも影響する可能性があります。代わりに、長時間実行されるジョブにはオンデマンドインスタンスを使用してください。

スポットインスタンスでマネージドノードグループを使用する

管理対象ノードグループのキャパシティタイプスポットとして設定できます。次に、マネージドノードグループは、 EC2 Auto Scaling キャパシティリバランスを使用するように Auto Scaling グループを設定します。EC2 Auto Scaling キャパシティリバランス機能がアクティブ化され、スポットノードがリバランスの推奨を受け取ると、Amazon EKS はスポットノードの置き換えを試みます。

新しいスポットノードの準備が整うと、Amazon EKS は以前のスポットノードを分離してドレインします。これにより、Amazon Elastic Block Store (Amazon EBS) ボリュームが破損したり、データベース接続が中断されたりするリスクを軽減できます。

複数のインスタンスタイプをノードグループに追加する

すべてのスポットインスタンスプールは、特定のアベイラビリティーゾーンの特定のインスタンスタイプに対する未使用の EC2 インスタンス容量で構成されます。ノードグループが新しいノードをプロビジョニングしようとすると、その設定に定義されているインスタンスタイプの 1 つが使用されます。どのアベイラビリティーゾーンでもインスタンスタイプにスポットキャパシティーがない場合、ノードグループはスケーリングに失敗し、低下します。

この問題を回避するには、ノードグループ内の類似するインスタンスタイプの数を増やしてください。たとえば、m5.large (2 vCPU/8 GiB RAM) インスタンスタイプの場合、vCPU と RAM 値が同じ m5a.large、m5n.large、m4.large などのインスタンスタイプを追加します。

AWS ノード終了ハンドラーを自己管理型のノードグループに使用する

AWS ノード終了ハンドラー (GitHub ウェブサイトから) は、デプロイまたは DaemonSet として Amazon EKS クラスターにデプロイされます。AWS Node Termination Handler は、自己管理型のノードグループにはない機能を追加します。セルフマネージドノードグループは、EC2 メンテナンスイベント、スポット中断通知、Auto Scaling グループのスケールインイベント、およびアベイラビリティーゾーンのリバランスを検出し、適切に対応するのに役立ちます。[Queue Processor] オプションを使用して、すべての AWS ノード終了ハンドラ機能を自己管理型ノードグループに追加します。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?