スポットインスタンスノードプールには、コストを削減するために、特定の比率でスポットインスタンスと従量課金インスタンスが混在しています。本トピックでは、スポットインスタンスノードプールの概念とユースケースを紹介し、インスタンスミックスの設定方法、スポットインスタンスと従量課金インスタンスの比率の設定方法、スポットインスタンスの有効期限状態の確認方法、およびスポットインスタンスの有効期限切れを適切に処理する方法について説明します。
概要
スポットインスタンス は、リソースを使用した後に支払いを行う従量課金モデルです。コストは市場価格と使用期間に基づいて計算されます。
スポットインスタンスは、価格が需要と供給に応じて変動する特殊なタイプの従量課金インスタンスです。これらは大幅なコスト削減を実現し、通常の従量課金インスタンスと比較してノードコストを最大 90% 削減します。スポットインスタンスを作成する際には、入札モードを指定する必要があります。指定したインスタンスタイプのリアルタイム市場価格が入札額を下回り、十分な在庫がある場合、スポットインスタンスは正常に作成されます。
作成後、スポットインスタンスは標準の従量課金インスタンスと同様に動作します。クラウドディスクや Elastic IP アドレス (EIP) などの他のクラウド製品と併用できます。スポットインスタンスには、デフォルトで 1 時間の保護期間があります。この期間が過ぎると、システムは 5 分ごとにリアルタイムの市場価格と在庫をチェックします。市場価格が入札額を上回るか、在庫が不足した場合、スポットインスタンスはリリースされます。
ユースケース
-
スポットインスタンスノードプール
ノードプール内のスポットインスタンスは短時間で回収される可能性があるため、ステートレスで耐障害性のあるアプリケーションに最適です。これには、バッチ処理、機械学習のトレーニングワークロード、ビッグデータ ETL (Apache Spark など) 、キュー処理アプリケーション、ステートレス API アプリケーションなどが含まれます。
このような中断を許容できないアプリケーションには、従量課金インスタンスまたはサブスクリプションインスタンスのノードプールを使用します。これらのワークロードには、以下が含まれます。
-
監視ツールや運用ツールなどのクラスター管理ツール。
-
データベースなど、ステートフルなワークロードを必要とするデプロイメントまたはアプリケーション。
-
-
オートスケーリングを備えたスポットインスタンスノードプール
ワークロードがスポットインスタンスノードプールに適しており、ピーク時とオフピーク時が明確に分かれている場合は、オートスケーリングを有効にしたスポットインスタンスノードプールの使用をご検討ください。
オートスケーリングが有効になっている場合、Cluster Autoscaler はスポットインスタンスノードプールが Pod をデプロイするためにスケールアウトする必要があるかどうかをチェックし、ノードがスケールインの基準を満たすと自動的にスケールインします。オートスケーリングが有効なスポットインスタンスノードプールは、より速くスケールアウトし、アイドル状態のリソースをより迅速にリリースします。インスタンスを迅速に追加する機能は、スポットインスタンスの受動的な回収を補い、アイドル状態のリソースをリリースすることでコスト削減を強化するのに役立ちます。
スポットインスタンスミックスの選択と設定
インスタンスタイプの選択に「万能」の解決策はありません。ビジネスニーズに合わせて、在庫、コスト、パフォーマンスのバランスが最も良い設定を選択してください。Alibaba Cloud Elastic Compute Service (ECS) は、幅広いインスタンスタイプを提供しています。スポットインスタンスノードプールを効果的に使用するための最初のステップは、特に入札シナリオにおいて、ビジネスへの潜在的な影響を最小限に抑えるインスタンスミックスを選択することです。
次の方法で、スポットインスタンスミックスを選択および設定できます。
コンソールの推奨事項の使用
Container Service for Kubernetes (ACK) コンソール は、インスタンス選択のアドバイスを提供します。ノードプールを作成または編集する際、コンソールは選択したリージョンで現在在庫のあるインスタンスタイプを提案します。リソース要件に基づいて、これらのインスタンスタイプをさらにフィルタリングできます。インスタンスタイプを選択した後、コンソールはインスタンスの弾力性の強度と価格範囲を計算します。弾力性の強度の推奨事項を使用して、より多くのインスタンスタイプを追加し、インスタンスの最大価格を設定できます。
ノードプールの作成または編集の詳細については、「ノードプールの作成と管理」をご参照ください。
[選択した仕様] セクションでは、選択したインスタンスタイプを表示し、[上に移動] および [下に移動] ボタンを使用して購入優先度を調整できます。ページの下部には、スケーリンググループの弾力性の強度レベル (例:「中」) が表示され、異なるゾーンで複数の vSwitch を選択したり、在庫が十分な複数のインスタンスタイプを選択したりするなど、改善のための提案が表示されます。
spot-instance-advisor CLI の使用
ACK は、スポットインスタンスの過去の価格変動と現在の価格情報を取得するためのオープンソースのコマンドラインツール spot-instance-advisor を提供します。spot-instance-advisor ツールは、API を使用してリージョンのインスタンスタイプと過去の価格曲線を取得します。次に、統計分析を使用して、コア時間あたりのコストが最も低いインスタンスタイプを計算してランク付けし、価格の分散に基づいて価格エントロピー値を計算します。エントロピー値が高いほど、価格変動が頻繁であることを示します。エントロピーの低いインスタンスタイプを選択することを推奨します。
spot-instance-advisor をダウンロードするには、「spot-instance-advisor」をご参照ください。
spot-instance-advisor は、次のフィルターパラメーターをサポートしています。
Usage of ./spot-instance-advisor:
-accessKeyId string
お使いのクラウドアカウントの accessKeyId
-accessKeySecret string
お使いのクラウドアカウントの accessKeySecret
-cutoff int
スポットインスタンス価格の割引 (デフォルト 2)
-family string
対象のスポットインスタンスファミリー (例:ecs.n1,ecs.n2)
-limit int
スポットインスタンスの上限 (デフォルト 20)
-maxcpu int
スポットインスタンスの最大コア数 (デフォルト 32)
-maxmem int
スポットインスタンスの最大メモリ (デフォルト 64)
-mincpu int
スポットインスタンスの最小コア数 (デフォルト 1)
-minmem int
スポットインスタンスの最小メモリ (デフォルト 2)
-region string
スポットインスタンスのリージョン (デフォルト "cn-hangzhou")
-resolution int
価格履歴分析の期間 (デフォルト 7)
次のコマンドを実行して、現在のリージョンに最適なインスタンスタイプ設定を取得します。
accessKeyId、accessKeySecret、およびregionパラメーターは必須です。ビジネス要件に基づいて値を指定してください。
./spot-instance-advisor --accessKeyId=<id> --accessKeySecret=<secret> --region=<cn-zhangjiakou>
スポットインスタンスと従量課金インスタンスの比率設定
ノードプール内のスポットインスタンスと従量課金インスタンスの比率を設定することで、計画された割合のスポットインスタンスでコストを削減しつつ、安定したベースラインの従量課金インスタンスを確保できます。
-
クラスターのバージョンは 1.9 以降である必要があります。クラスターをアップグレードするには、「クラスターの手動アップグレード」をご参照ください。
-
クラスターが十分な数のノードを追加できることを確認してください。ノードのクォータとクォータ増加のリクエスト方法については、「クォータと制限」をご参照ください。
-
既存のノードを追加する際は、お使いの Virtual Private Cloud (VPC) 内の ECS インスタンスに Elastic IP アドレス (EIP) がバインドされているか、対応する VPC に NAT ゲートウェイが設定されていることを確認してください。これにより、ノードがパブリックインターネットにアクセスできるようになり、ノード追加時の障害を防止できます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
ノードプール ページで、ノードプールの作成 をクリックし、パラメーターを設定します。
次の表では、主要な設定項目のみを説明しています。詳細な手順については、「ノードプールの作成と管理」をご参照ください。
パラメーター
説明
vSwitch
クラスターの高可用性を向上させるため、異なるゾーンの vSwitch を選択することを推奨します。
課金方法
[スポットインスタンス] を選択します。
[詳細オプション] を展開し、次のパラメーターを設定します。
[スケーリングポリシー] を [コスト最適化ポリシー] に設定し、[従量課金インスタンスの割合 (%)] を
20に設定し、[スポットインスタンスが不足している場合に、従量課金インスタンスで補充] チェックボックス (価格または在庫のためにスポットインスタンスが利用できない場合に、必要な数を満たすために従量課金インスタンスを起動します) を選択し、[補足のスポットインスタンスの有効化] チェックボックス (回収の 5 分前にインスタンスを事前にドレインして置き換えます。これを無効にすると、サービスが中断される可能性があります) を選択します。スケーリングポリシー
-
優先度に基づくポリシー:設定した vSwitch の優先度 (上から下へ優先度が低くなります) に基づいてノードをスケーリングします。優先度の高いゾーンでインスタンスを作成できない場合、システムは自動的に優先度リストの次の vSwitch を使用します。
-
コスト最適化ポリシー:vCPU 単価が最も低いインスタンスからスケールアウトします。
ノードプールが [プリエンプティブルインスタンス] を使用する場合、それらが優先されます。[従量課金インスタンスの割合 (%)] を設定することもできます。在庫不足により特定のタイプのスポットインスタンスを作成できない場合、システムは自動的に補充として従量課金インスタンスを作成しようとします。
-
分散バランスポリシー:ECS インスタンスを複数のゾーンに均等に分散します。このポリシーは、マルチゾーンデプロイメントにのみ適用されます。在庫不足などの問題により分散が不均衡になった場合は、再度バランシング操作を実行できます。
従量課金インスタンスを使用してプリエンプティブル容量を補充する
このオプションを有効にすると、価格または在庫の制約により作成できるスポットインスタンスの数が不足した場合、ACK は自動的に補充として従量課金インスタンスを作成しようとします。
プリエンプティブルインスタンス補完の有効化
有効化すると、スポットインスタンスが回収されるというシステム通知を受け取った際(回収の 5 分前)、ACK は補償のために新しいインスタンスのスケールアウトを試みます。
補償成功:ACK は古いノードをドレインし、クラスターから削除します。
補償失敗:ACK は古いノードをドレインせず、5 分後にインスタンスが回収されます。在庫が復活するか、価格条件が満たされると、ACK は自動的にインスタンスを購入して期待ノード数を維持します。詳細については、「スポットインスタンスノードプールに関するベストプラクティス」をご参照ください。
スポットインスタンスの積極的なリリースは、ビジネスの中断を引き起こす可能性があります。補償の成功率を向上させるために、従量課金インスタンスを使用してプリエンプティブル容量を補充する も併せて有効化することを推奨します。
クラウドリソースおよび課金情報:
ECS インスタンス -
設定が完了したら、ノードプールリストに移動し、アクション 列の 詳細 をクリックし、次に 基本情報 タブをクリックします。ノード設定 セクションで、従量課金インスタンスの割合を確認できます。
スポットインスタンスの有効期限状態の確認
スポットインスタンスの有効期限切れによる予期せぬノードの離脱を防ぐため、ACK は ack-node-problem-detector (NPD) コンポーネントを使用して、差し迫ったインスタンスのリリースに関する情報を取得し、通知します。
NPD コンポーネントをインストールするには、「ステップ 1: ack-node-problem-detector コンポーネントのインストール」をご参照ください。
ACK クラスターでは、ECS インスタンスがクラスターとその実行中のサービスをサポートするノードとして機能します。作成ポリシーによっては、スポットインスタンスやサブスクリプションインスタンスなど一部のインスタンスは、有効期限が切れると自動的にリリースされます。インスタンスが自動的にリリースされる前に Pod のエビクション、ノードのドレイン、ノードの置換などの予防措置が講じられない場合、クラスターサービスに影響が及ぶ可能性があります。マスターノードの予期せぬ離脱は、クラスターレベルの障害につながる可能性があります。スポットインスタンスの有効期限切れによる問題を回避するために、NPD コンポーネントの InstanceExpired ステータスを使用して、差し迫ったリリースを知ることができます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
ノード ページで、対象ノードの名前をクリックするか、対象ノードの Actions 列で、 を選択します。
-
ノードの詳細ページで、InstanceExpired 条件のステータスを確認します。
ステータス セクションで、InstanceExpired 条件のステータスを確認します。
InstanceExpired ステータスの説明:
InstanceExpired ステータス
説明
True
ステータス InstanceExpired が True であり、コンテンツ が InstanceToBeTerminated の場合、スポットインスタンスはまもなく期限切れとなり、解放されます。
False
[InstanceExpired] のステータスが False で、コンテンツ が [InstanceNotToBeTerminated] の場合、スポットインスタンスは期限切れにならず、引き続き使用できます。
Unknown
「不明」ステータスはプラグインエラーを示します。問題を解決するには、チケットを起票してください。
InstanceExpiredステータスが True の場合、イベント セクションでインスタンスの有効期限切れに関する関連イベントを表示できます。
InstanceExpired ステータスが True の場合、スポットインスタンスはまもなく期限切れになり、解放されます。そのノード上のサービスを引き続き使用する必要がある場合は、アプリケーションを他のノードにスケジューリングしてください。詳細については、「特定のノードにアプリケーションをスケジューリングする」をご参照ください。
スポットインスタンス有効期限切れの適切な処理
スポットインスタンスの有効期限切れを適切に処理するには、主に監視と通知、プロアクティブなノードの補足とポリシー、およびカスタム処理ロジックが含まれます。
監視と通知
スポットインスタンスのリリースをできるだけ早く通知するために、ACK クラスターは NPD コンポーネントを使用して、スポットインスタンスのリリース前メッセージを監視します。
-
スポットインスタンスの解放前メッセージが検出されない場合、ノードのステータスにある [InstanceExpired] の値は [False] になります。ノード詳細ページで、[ステータス] タブをクリックし、条件リストで InstanceExpired 条件を確認します。そのステータスが False で、メッセージが
InstanceNotToBeTerminatedの場合、スポットインスタンスが現在回収されていないことを示します。 -
スポットインスタンスの InstanceExpired の値が True の場合、そのスポットインスタンスはまもなく期限切れになり、解放されます。ACK は Kubernetes イベントを通じて、解放が間近であることを通知します。リリース前のメッセージが検出されると、インスタンスがまもなく解放されることを示す
InstanceToBeTerminatedイベントが、クラスターの [イベント] パネルに表示されます。
[プリエンプティブルインスタンス補完の有効化]
スポットインスタンスの有効期限切れとリリースは、ノード上のワークロードの安定性に影響を与える重要な要因です。ACK は、設定やオートスケーリングから監視や通知まで、スポットインスタンスのリリースイベントに迅速に対応するためのさまざまな方法を提供します。しかし、これらの方法は通常、スポットインスタンスが回収された後に機能します。回収から新しいインスタンスがプロビジョニングされるまでの間、クラスターの利用可能なリソースは減少します。この影響を最小限に抑えるか、なくすために、ACK はノード補足機能を使用して、期限切れのインスタンスが回収される前に新しいインスタンスの起動をトリガーします。
補足のスポットインスタンス機能を有効にすると、ACK はノードインスタンスがまもなくリリースされるかどうかを自動的に監視します。ACK が差し迫ったリリースを検出すると、自動的にスケーリングアクティビティをトリガーして新しいノードを起動します。まもなくリリースされるインスタンスを置き換えるために作成されたこの新しいインスタンスは、補足インスタンスと呼ばれます。補足インスタンスが正常に実行されると、期限切れのスポットインスタンスのスケールインとリリースがトリガーされます。リリース戦略には、ノードの cordon (スケジュール不可にする)、ノードのドレイン、クラスターからのノードの削除などのグレースフルシャットダウン手順が含まれます。このプロセスにより、期限切れのスポットインスタンス上のワークロードがクラスター内の他のノードにスムーズに移行され、インスタンスの有効期限切れがビジネスに与える影響を最小限に抑えることができます。
-
在庫不足などの理由でインスタンスの補足に失敗した場合、ACK は古いノードをドレインしません。スポットインスタンスの回収により、サービスが中断される可能性があります。障害後、在庫が回復するか価格条件が満たされると、ACK は自動的にインスタンスを購入して目的のノード数を確保します。
補償の成功率を向上させるために、従量課金インスタンスを使用してプリエンプティブル容量を補充する も有効にすることを推奨します。
-
インスタンス補足の結果は、期限切れのスポットインスタンスの回収には影響しません。プリエンプティブルインスタンス補完の有効化 を行うかどうかに関わらず、期限切れのインスタンスは回収前通知の 5 分後に回収されます。

カスタム処理ロジックの追加
実際の多くのシナリオでは、ノードの廃止には、登録済みの DNS センターからノードの情報を削除するなど、標準的なグレースフルシャットダウンよりも多くの手順が必要になります。このようなニーズに対応するには、ノードの [InstanceExpired] ステータスを監視するか、[InstanceToBeTerminated] イベントをリッスンします。ノードインスタンスの有効期限が切れる、またはリリースされるという通知を受け取ったら、ノードを廃止保留中として扱い、カスタムロジックを実行できます。詳細については、「スポットインスタンスの有効期限ステータスを確認する」をご参照ください。