【正解】A
【0からの解説】
①前提知識
・GKE Autopilot は、ノードの作成・スケーリング・管理を Google が行うモードで、課金はノード単位ではなく Pod がリクエストした CPU・メモリなどのリソースに対して行われます。リソース リクエストを指定しない Pod には、コンピューティング クラスごとのデフォルト値(汎用クラスでは 0.5 vCPU・2 GiB など)が自動的に適用されます。
・Spot Pod は、Spot VM(Google Cloud の余剰容量)上で実行される Pod です。通常の Pod より大幅に安い料金で実行でき、その代わりに Google Cloud が容量を必要とした際に Pod が終了(プリエンプト)されることがあります。そのため、ステートレスでフォールト トレラント(途中で止まっても再実行・再スケジュールで回復できる)なワークロード向けとされています。Autopilot では、マニフェストの nodeSelector(またはノード アフィニティ)で cloud.google.com/gke-spot: "true" を指定するだけで Spot Pod をリクエストでき、Autopilot が自動で Spot ノードを用意します。
・コンピューティング クラス(Balanced・Scale-Out・Performance など)は、汎用クラスより高い性能や特定のマシン特性が必要な場合に選ぶもので、通常は汎用クラスより単価が高くなります。
②要件と制約の整理
・目的はコスト削減(費用対効果)とスケーラビリティ。
・アプリはステートレスでフォールト トレラント、特別なハードウェア / メモリ要件なし。
・「できるだけ早く」変更したい。
・十分なコンピューティング リソースは維持したい。
③正解がどう満たすか
ワークロードの性質(ステートレス・フォールト トレラント)はまさに Spot Pod の想定ユースケースです。マニフェストに cloud.google.com/gke-spot="true" の nodeSelector を 1 行追加するだけで、同じリソース量(=十分なコンピューティング リソース)を維持したまま、Pod あたりの単価を大きく下げられます。Pod がプリエンプトされても Deployment が再作成し、Autopilot が自動でノードを用意するので、スケーラビリティも保たれます。分析作業を必要とせず即座に適用できる点で「できるだけ早く」にも合致します。
【誤りの選択肢】
B:Balanced コンピューティング クラスは、汎用クラスより高い CPU 性能や大きなリソース量が必要なワークロード向けで、料金は汎用クラスより高くなります。特別なハードウェア要件がないこのアプリで選ぶと、コスト削減どころかコスト増になります。
C:Autopilot の課金はリクエストしたリソース量に基づくため、CPU を 5 vCPU という根拠のない大きな値でリクエストすると、デフォルト(0.5 vCPU)よりはるかに高額になります。実際の使用量に基づかない設定で、費用対効果の要件に反します。
D:実使用量に基づいてリクエストを適正化(ライトサイジング)するのは長期的には有効ですが、30 日分のデータを集めて分析する必要があり「できるだけ早く」に反します。また Cloud Trace はリクエストのレイテンシ分析用でメモリ使用量の把握には不要であり、ピーク時の最大メモリでリクエストするとかえって過剰確保になりがちです。
【参考】
Spot Pod でフォールト トレラントなワークロードを低コストで実行する | Google Kubernetes Engine (GKE)Autopilot でのリソース リクエスト | Google Kubernetes Engine (GKE)Autopilot クラスタの Balanced と Scale-Out の ComputeClass について | Google Kubernetes Engine (GKE)