Oracle Could Always Freeのアイドルインスタンス回収を防ぐ

公開 | 更新 

Oracle Cloud Always Free では、実行中であってもリソース消費の少ないインスタンスは アイドル 状態とみなされ、停止の上、 インスタンス が 回収 されてしまうとのことで、そうなる前に 回収 直前の インスタンス を再起動させ、stress-ngを使って一定以上のリソース消費を維持するようにしてみました。

実行中のはずのインスタンスが没収の危機

Oracle Cloudから何度か届いたインスタンスに関するメールでは、それほどクリティカルに受け止めませんでしたが、

図1.OCIから届いたメール

図1.OCIから届いたメール

Oracle Cloud Infrastructure Customer,

 

Oracle Cloud Infrastructure (OCI) has reclaimed idle Always Free compute resources from Always Free customers by stopping the compute instance(s). Reclaiming idle resources allows OCI to efficiently provide services to Always Free customers.

 

Your account had one or more idle compute instances that have been stopped. You can restart your compute instance as long as the associated compute shape is available in your region. Your Boot and Block Volumes remain unchanged and available to you. In the future, you can keep idle compute instances from being stopped by converting your account to Pay As You Go (PAYG). With PAYG, you will not be charged as long as your usage for all OCI resources remains within the Always Free limits.

 

For more information on Always Free idle compute instances, see the OCI Idle Compute Instances documentation.

 

念の為、ブラウザでインスタンスを確認してみると、以前、NextCloud環境を構築して上記稼働しているはずのインスタンスが停止していてびっくり。急ぎ起動しました。

図2.停止していたインスタンス起動

図2.停止していたインスタンス起動

無事に起動後、中へ入ってシステムログを確認すると、日付がばっさり飛んでいる部分を発見。エージェント経由でのやんわりとしたシャットダウン処理ではなく、スイッチを切るような停止処理だったようです。

このインスタンスへ仕込んでいたNetdataでも(関連記事はこちら)、インスタンス停止によるデータ途絶が見て取れます。

図3.停止していたことをNetdataで確認

図3.停止していたことをNetdataで確認

アイドルインスタンスの回収とは

どういうことなのか調べてたどり着いたこちらの記事Youtube動画に、いきさつから対策まで詳しく解説されていました(Great Works!)。

曰く、たとえ実行中のインスタンスであっても、リソース使用率があるしきい値を下回っていると「アイドル状態」とみなされ、インスタンス停止の上に回収されてしまうというもの。

問題のしきい値は、上述の記事の当時は15%程度だったようですが、本記事執筆時点では更に20%にまで上昇していました(2023年09月現在)。

図4.アイドルインスタンス回収定義

図4.アイドルインスタンス回収定義

このままOCIの思惑通りにPAYGアカウントへ移行するのが無難とは思いますが、先ほどの記事を参考に多少悪あがきしてみたいと思います(以降はあくまで自己責任で)。

 

stress-ngでインスタンスを忙しく

その方策とは、主にシステムの負荷試験などで使われるstress-ngを使い、しきい値を超えるリソース消費をインスタンスに維持させるというものです。

インスタンスはUbuntu 22.04ベースなので、aptパッケージマネージャからインストール。

参考元の記事ではCPU、メモリへの負荷をそれぞれ別プロセスで動かしていましたが、1つのプロセスで済ませることも可能です。

期待通りに動作することを確認したら、これをsystemdへサービスとして登録します。

※サービスファイル内において%はダメ文字なので、%%と重ねてエスケープ処理しています。

作成したサービスを有効化して起動します。

Netdata上やOCIのインスタンスのメトリック上でも、CPUとメモリにしきい値を超える消費が確認されました。

図5.stress-ng 20%をNetdataで確認

図5.stress-ng 20%をNetdataで確認

図6.stress-ng 20%をOCIメトリックで確認

図6.stress-ng 20%をOCIメトリックで確認

stress-ngはオプションで指定しない限り、デフォルトでは24時間経過するとプロセスが終了するのですが、サービス化によりまた新たにプロセスが立ち上がるようにしてあります。

これでまた動きがあれば、また書き足すつもりです。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA