grasys blog
grasysブログ

「Spot pod for GKE Autopilot」の終了時の振る舞いについて調べてみた

「Spot pod for GKE Autopilot」のpodの終了時はどう処理されるのか?終了通知は送られてくるのか?調べました

ご無沙汰してます、高田です。 近所の梅が満開になり、春を感じる今日この頃です。

さて今回はGKE(Google Kubernetes Engine)のAutopilotにある「Spot Pod」について書きます。

Spot pod for Autopilot とは

Google の Kubernetesとして初のPod単位のGKEサービスです。厳密にはService Level Agreement(SLA)(※1)となっています。 特徴は「手軽で」「割安(通常のGoole Kubernetes Engine(GKE)と比較して) (※2)」にGKEサービス利用できる点。 なお「Autopilot」についての概要はこちらの記事をご覧ください。

Spot Podのデプロイ方法は、AutopilotモードのGKEクラスタを立てて、manifest内にcloud.google.com/gke-spot: "true" というノードセレクタを追加するだけでOK。

サンプルがこちらにありますのでご参考ください。

Spot Podを使う際に気をつけるべきこと

公式ドキュメント(※3)には2022年3月1日時点では、要件と制限事項の箇所にこのようにあります

  • GKE バージョン 1.21.4 以降が必要です。
  • Spot Pod は、Autopilot サービスレベル契約からは除外されています。
  • GKE は、1.21.4 より前の GKE バージョンを実行しているクラスタで Spot Pod をスケジュールすることはできません。
  • Autopilot クラスタは、cloud.google.com/gke-preemptible セレクタを使用して、G KE バージョン 1.21.4 以降を実行しているクラスタのプリエンプティブル Pod のリクエストをサポートします。このセレクタを使用する Pod は、自動的に Spot Pod に移行され、セレクタが cloud.google.com/gke-spot に変更されます。
    • 注意: 1.21.4 より前の GKE バージョンを実行しているクラスタで、cloud.google.com/gke-preemptible セレクタの自動移行はサポートされていません。これらのクラスタでプリエンプティブル Pod をリクエストすると、Pod はプリエンプティブルの動作になりますが、標準料金が適用されます。デプロイでプリエンプティブル Pod は使用しないでください。料金面での利点はなく、Pod の可用性が低下します。

1つ目、3つ目のバージョン情報は構築の前提条件として意識する必要があります。 2つ目の Spot Pod は、Autopilot サービスレベル契約からは除外されていますという部分ですが、調べてみると公式ドキュメント(※1)にある月間稼働率99.95%のサービス品質の保証から対象外となるようです。 4つ目は、GKEには今回のSpot Podのサービスがリリースされる前はコストダウンの手法のひとつとしてPreemptible VM インスタンスにGKE環境を構築することができるのですが、manifest内にこのcloud.google.com/gke-preemptibleセレクタを使用していると、自動的にSpot Podへ移行されcloud.google.com/gke-spotに変更されるようです。

また当然Autopilotの制約事項も適用されるため、実現したいシステムや処理が、Spot Podの要件とマッチしているか、制約はクリアできるのか検討が必要です。

podの終了時について

ふと、1つ気になることを思いつきました。 Spot Podってpodの終了するタイミングってどこで判断しているんだ?(そもそも終了通知って送られてくる?)

Spot pod for GKE Autopilotに関するGoogle公式ドキュメントをみましたが見つからず、、、

調べ方が悪いのかもしれないため、サポートに問い合わせてみました。 すると、以下のような内容の回答を得ることができました。

※現在、Spot pod for GKE Autopilot自体はプレビュー版のため今後情報変更の可能性が 高いことを前提としてご覧ください。

  • 結論、podへの終了通知はない
  • 終了した Pod に関しては、数がしきい値に達すると(ガベージコレクション)[https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-spot-pods#delete-terminated-pods] (※4)によって Pod がクリーンアップされ、自動的に管理されることが前提となっているそう
  • nodeの管理はAutopilotが行い、コントロールプレーンはそれぞれのnode自身が報告するステータスの更新を受信する
  • ノードサイズ、ノードタイプ、ノード数は、リソースが指定されたすべてのワークロードとクラスタの実際の負荷に基づいて、Autopilot によって自動的に決定される(※5)

上記のことから、GKE Autopilot クラスタの node に関する通知の機能は無い認識とのこと。 またさらにpodの仕組みとは別で終了通知を受け取る方法などについても確認したところの回答は以下の通り。

  • GKEの監査ログ(※6)からログベースの指標を作成し、その指標による Cloud Monitoring のポリシーを作成して、アラートに用いることは可能かもしれないとのこと
    • GKE のイベントログ取得に関する詳細はこちら(※7)

ただし、この監査ログを有効にするとかえってコスト面がが大きくなることが予想される。とのことでした。

手軽で安価に使えるGKEのpod環境が、終了通知の取り回し次第ではかえって費用が高くなりかねないとは…

Spot Pod に終了通知は(現時点では)無い

まだプレビュー版ということでこの辺りの機能の追加を期待したいところです。

今回はこの辺で。

参考, 引用文献


株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。

grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。

お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。