---
title: "「Spot pod for GKE Autopilot」の終了時の振る舞いについて調べてみた | grasys blog"
url: "https://blog.grasys.io/post/takada/spot_pod_for_gke/"
description: "「Spot pod for GKE Autopilot」のpodの終了時はどう処理されるのか？終了通知は送られてくるのか？調べました ご無沙汰してます、高田です。 近所の梅が満開になり、春を感じる今日この頃です。 さて今回はGKE(Google Kubernetes Engine)のAutopilotにある「Spot…"
---

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

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[takada](/authors/takada/)
-   公開日：2022年3月11日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Google Cloud](/tags/google-cloud/)[#GKE](/tags/gke/)[#Kubernetes](/tags/kubernetes/)

![「Spot pod for GKE Autopilot」の終了時の振る舞いについて調べてみた](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

「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)となっています。 特徴は「手軽で」「[割安](https://cloud.google.com/kubernetes-engine/pricing)（通常のGoole Kubernetes Engine(GKE)と比較して） (※2)」にGKEサービス利用できる点。 なお「Autopilot」についての概要は[こちらの記事](https://blog.grasys.io/post/shimichan/try_gke_autopilot/)をご覧ください。

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

サンプルが[こちら](https://cloud.google.com/blog/ja/products/containers-kubernetes/announcing-spot-pods-for-gke-autopilot#:~:text=%E6%8E%92%E9%99%A4%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82-,Spot%20Pod%20%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF,-Spot%20Pod%20%E3%81%AF)にありますのでご参考ください。

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

公式ドキュメント(※3)には2022年3月1日時点では、[要件と制限事項](https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-spot-pods)の箇所にこのようにあります

-   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環境を構築](https://cloud.google.com/kubernetes-engine/docs/how-to/preemptible-vms)することができるのですが、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\\](https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-spot-pods#delete-terminated-pods%5C)\] (※4)によって Pod がクリーンアップされ、自動的に管理されることが前提となっているそう
-   nodeの管理はAutopilotが行い、コントロールプレーンはそれぞれのnode自身が報告するステータスの更新を受信する
-   ノードサイズ、ノードタイプ、ノード数は、リソースが指定されたすべてのワークロードとクラスタの実際の負荷に基づいて、Autopilot によって自動的に決定される(※5)

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

-   [GKEの監査ログ](https://cloud.google.com/kubernetes-engine/docs/how-to/audit-logging)(※6)からログベースの指標を作成し、その指標による Cloud Monitoring のポリシーを作成して、アラートに用いることは可能かもしれないとのこと
    -   GKE のイベントログ取得に関する詳細は[こちら](https://cloud.google.com/stackdriver/docs/solutions/gke/using-logs#system_logs)(※7)

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

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

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

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

今回はこの辺で。

## 参考, 引用文献

-   ※1: Google Kubernetes Engine Service Level Agreement (SLA)
    -   [https://cloud.google.com/kubernetes-engine/sla](https://cloud.google.com/kubernetes-engine/sla)
-   ※2: Google Kubernetes Engine の料金
    -   [https://cloud.google.com/kubernetes-engine/pricing](https://cloud.google.com/kubernetes-engine/pricing)
-   ※3: Autopilot で Spot Pod を使用してコストを削減する
    -   [https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-spot-pods](https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-spot-pods)
-   ※4: podのガベージコレクション
    -   [https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-spot-pods#delete-terminated-pods](https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-spot-pods#delete-terminated-pods)
-   ※5: コントロール プレーンとノードのインタラクション
    -   [https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-architecture#nodes](https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-architecture#nodes)
-   ※6: GKEのシステムログ
    -   [https://cloud.google.com/stackdriver/docs/solutions/gke/using-logs#system\_logs](https://cloud.google.com/stackdriver/docs/solutions/gke/using-logs#system_logs)
-   ※7: GKEの監査ログ
    -   [https://cloud.google.com/kubernetes-engine/docs/how-to/audit-logging](https://cloud.google.com/kubernetes-engine/docs/how-to/audit-logging)

## この記事を書いた人

[![](/_astro/takada.qxt788oZ_MuJr4.webp)](/authors/takada/)

### [takada](/authors/takada/)

takadaのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/takada/)