【GKE/GCE】プリエンプティブル(preemptible)なインスタンスが停止されたかどうかを確認する方法

1 min read読了の目安(約1700字

結論

  • GCP ConsoleのCloudLoggingページを開く
  • ログの検索フィールドに以下の二つを追加
    • resource.type="gce_instance"
    • operation.producer="compute.instances.preempted"
  • ログを検索する

https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance?hl=ja#detecting_if_an_instance_was_preempted

背景

本番環境以外の環境をプリエンプティブルなインスタンスで構成していたのですが、予想外に処理が停止してしまったため、その原因の切り分けとして、プリエンプトされたのかどうかを知る必要がありました。

preemptibleの解説

プリエンプティブル(preemptible)なインスタンスとは?

  • 通常のインスタンスよりはるかに低価格で作成、実行できるインスタンス
  • 他のタスクがリソースへのアクセスを必要とする場合に、ComputeEngineによって停止(プリエンプト)される可能性がある(=いつ使えなくなるかわからない)
  • 24時間後に必ず停止する

https://cloud.google.com/compute/docs/instances/preemptible?hl=ja#what_is_a_preemptible_instance

preemptibleインスタンスの制約

こちらを参照してください

https://cloud.google.com/compute/docs/instances/preemptible?hl=ja#limitations

24時間後に停止したこともプリエンプトっていうの?

  • いいます
  • 公式ドキュメントに記載はありませんが、GCPの技術サポートに問い合わせてソースコードを確認していただきました
  • 24時間後の停止でも operation.producer="compute.instances.preempted" のイベントログが出力されることを動作確認しました

GKEのノードにプリエンプティブルなインスタンス使うと24時間で止まっちゃうの?

preemptibleがゆえに停止されたノードのログを取得する

  • GCP ConsoleのCloudLoggingページを開く
  • ログの検索フィールドに以下の二つを追加
    • resource.type="gce_instance"
    • operation.producer="compute.instances.preempted"
  • ログを検索する

こんな感じでログが出てくると思います

さいごに

できればpreemptibleなインスタンスは使いたくないですが、料金が圧倒的に安いのは大いに魅力的ですよね
preemptibleなインスタンスで構成してる場合でも、予想外の動作が起きた時にそれがpreemptibleのせいなのかどうかを知れるのは非常によかったです