🐞
【GKE/GCE】プリエンプティブル(preemptible)なインスタンスが停止されたかどうかを確認する方法
結論
- GCP ConsoleのCloudLoggingページを開く
- ログの検索フィールドに以下の二つを追加
- resource.type="gce_instance"
- operation.producer="compute.instances.preempted"
- ログを検索する
背景
本番環境以外の環境をプリエンプティブルなインスタンスで構成していたのですが、予想外に処理が停止してしまったため、その原因の切り分けとして、プリエンプトされたのかどうかを知る必要がありました。
preemptibleの解説
プリエンプティブル(preemptible)なインスタンスとは?
- 通常のインスタンスよりはるかに低価格で作成、実行できるインスタンス
- 他のタスクがリソースへのアクセスを必要とする場合に、ComputeEngineによって停止(プリエンプト)される可能性がある(=いつ使えなくなるかわからない)
- 24時間後に必ず停止する
preemptibleインスタンスの制約
こちらを参照してください
24時間後に停止したこともプリエンプトっていうの?
- いいます
- 公式ドキュメントに記載はありませんが、GCPの技術サポートに問い合わせてソースコードを確認していただきました
- 24時間後の停止でも
operation.producer="compute.instances.preempted"
のイベントログが出力されることを動作確認しました
GKEのノードにプリエンプティブルなインスタンス使うと24時間で止まっちゃうの?
- 止まりません
- 自動で新しいインスタンスを起動してくれます
- GKEではまれに24時間以上起動し続ける場合があるようです
preemptibleがゆえに停止されたノードのログを取得する
- GCP ConsoleのCloudLoggingページを開く
- ログの検索フィールドに以下の二つを追加
- resource.type="gce_instance"
- operation.producer="compute.instances.preempted"
- ログを検索する
こんな感じでログが出てくると思います
さいごに
できればpreemptibleなインスタンスは使いたくないですが、料金が圧倒的に安いのは大いに魅力的ですよね
preemptibleなインスタンスで構成してる場合でも、予想外の動作が起きた時にそれがpreemptibleのせいなのかどうかを知れるのは非常によかったです
Discussion