Containers & Kubernetes

GKE Autopilot 用 Spot Pod の発表 - フォールト トレラントなワークロードの節減

#containers

※この投稿は米国時間 2021 年 11 月 10 日に、Google Cloud blog に投稿されたものの抄訳です。

去る 2 月に GKE Autopilot をリリースして以来、Google では多機能なフルマネージドの Kubernetes プラットフォームを提供すべく、機能の追加に取り組んできました。そして本日、Spot Pod をご紹介します。

(GKE Autopilot についてよくご存じない方は、Google Cloud Next ‘21 の Autopilot ブレイクアウト セッションをご覧ください。そこでこの新しい Kubernetes プラットフォームで実行できるすべての機能の概要を説明しています。日本の医療スタートアップ Ubie などのお客様は、Autopilot でよりシンプルな運用をすでに実現しており、インフラストラクチャの管理に費やす時間を削減して本来の業務により多くの時間を割り当てています)。

Spot Pod に話を戻すと、Autopilot は GKE で初めてとなる Pod レベルの SLA が提供されるため、安定した本番環境グレードのワークロードの実行に最適です。ただし、このような高レベルの信頼性を必要としないタイプのワークロードもあります。たとえば、フォールト トレラントなバッチ ワークロードや、中断を処理できる開発 / テストクラスタなどです。Spot Pod を使用すると、GKE Autopilot でこのような種類のワークロードを手軽で費用対効果が高い方法で実行できます(GKE 標準ユーザーは、Spot VM で GKE クラスタとノードプールを実行することでスポット料金を利用することもできます)。

Spot Pod でワークロードを実行する場合、通常料金の Pod の 60~91% の割引が受けられます(現在の料金については料金ページをご覧ください)。Spot Pod を実行できる時間にハードリミットはありませんが、リソース需要が高いときにプラットフォームでリソースを再利用する必要がある場合は、いつでも Spot Pod をプリエンプトして強制排除できます。

Spot Pod の仕組み

Spot Pod は Google Cloud の予備のコンピューティング容量で実行されるため、コンピューティング リソースが利用可能である限り、通常の Autopilot Pod よりも低料金で使用できます。Google Cloud が他のタスクでリソースを必要とする場合、GKE は 25 秒の猶予期間後に Spot Pod を強制排除します。Deployment や Job などの Kubernetes ワークロード API を使用することで、利用可能な容量があればすぐに Spot Pod を自動的に再デプロイして、中断した時点から再開できます。

Spot Pod は GKE 1.21.4 以降で使用できます。Deployment で Spot Pod を有効にするには、cloud.google.com/gke-spot: "true" のノードセレクタを追加するだけです。このノードセレクタを使用して Spot Pod を有効にする Deployment の例を次に示します。

  apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-app
  template:
    metadata:
      labels:
        app: hello-app
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      nodeSelector:
        cloud.google.com/gke-spot: "true"
      terminationGracePeriodSeconds: 25

このようにして Spot Pod を要求すると、Autopilot は自動的に Spot Pod のノードをプロビジョニングします。Autopilot は Kubernetes taint と容認機能を追加して、通常の重要な Pod を分離し、Spot Pod と同じノードに配置されないようにします。必要な作業はマニフェストで Spot Pod をリクエストするだけで、残りは GKE が行います。

GKE が容量を再利用するために Spot Pod を強制排除すると、コンテナは SIGTERM シグナルを受け取って 25 秒以内に作業を完了します。この機能を最大限に活用するには、terminationGracePeriodSeconds を PodSpec に追加して、コンテナが SIGTERM シグナルを受信したときにコンテナを正常にシャットダウンできるようにします。

Spot Pod を使用すると、Autopilot クラスタでフォールト トレラントなワークロードを実行する際の費用を最小化できます。通常の Pod では、今年スタートした Autopilot 確約利用割引(CUD)を利用して、最大 45% の割引を受けることもできます。Spot Pod はすでに大幅に割引されているため、CUD は適用されませんが、より安定した環境を必要とする Pod で費用を節約するための手軽な方法となります。GKE では、ワークロードに関係なく費用を低減する方法を提供しています。

Spot Pod は現在プレビュー版で、GKE バージョン 1.21.4 以降で使用できます。GKE Autopilot 用 Spot Pod の使用を開始するには、Spot Pod に関するドキュメントをお読みになり、Rapid リリース チャンネルで Autopilot クラスタを作成してください。さまざまな機能について学ぶには、11 月 18 日のライブイベント「クラウド ネイティブ アプリを構築 / 実行するための Kubernetes のヒントと手法」への参加をご登録ください。


- GKE: Google Kubernetes Engine プロダクト マネージャー William Denniss