概要
Googleは9月23日、Google Kubernetes Engine(GKE) 1.37にワークロードのレプリカ数をゼロまでスケールダウンできるネイティブなスケールツーゼロ機能を追加したと発表した。バッチ処理やイベント駆動型ワーカー、開発環境など、需要が断続的でアイドル期間の長いワークロードを対象に、使っていない時間帯のリソース消費とコストをゼロに抑えつつ、需要発生時には即座に再起動できる点が特徴だ。
技術的な仕組み
中核となるのはHorizontalPodAutoscaler(HPA)のminReplicas: 0設定と、Google Cloud Managed Service for Prometheusを経由した外部メトリクスの組み合わせだ。新設のAutoscalingMetricというカスタムリソースでPub/SubやCloud Monitoring、ロードバランサーのシグナルなどをPromQLクエリとして定義し、HPAのExternalメトリクスとして参照することで、アダプターを介さない統合されたメトリクスパイプラインを実現している。メトリクスが閾値を下回ればすべてのポッドを停止し、未処理タスクの発生などメトリクスが仕事の保留を示すと即座にデプロイメントを再起動する仕組みだ。
最大の課題であるコールドスタート(ノード起動に通常60〜90秒かかる)への対策として、GKEが管理する「キャパシティバッファ」が導入された。複数のゼロスケール対象ワークロードに即座に容量を提供する「アクティブバッファ」と、アクティブバッファよりも低コストで容量を補充する「スタンバイバッファ」を組み合わせることで、需要発生時の再スケールをほぼ瞬時に行えるとしている。
既存ソリューションとの違い
GKEはこの機能をKEDA(Kubernetes Event-Driven Autoscaling)と比較し、優位性を強調している。KEDAではScaledObjectカスタムリソースと専用オペレーターの運用が必要で、大規模なフリートでは1万行を超えるYAML設定が発生しうるほか、ポーリング間隔やシグナル経路のホップ数によってコールドスタートの検知に遅延が生じやすいという。一方GKEのネイティブ機能は標準のHPAを拡張する形で提供され、追加コンポーネントの運用が不要な上、シグナルパスが内部化されているため反応速度も向上するとしている。
利用方法と今後の展望
導入は、(1)需要変動やアイドル期間のあるワークロードを特定し、(2)AutoscalingMetricとminReplicas: 0を設定したHPAを適用し、(3)必要に応じてキャパシティバッファを追加する、という3ステップで進められる。この機能の利用にはGKE 1.37以上が必要で、最適なパフォーマンスを得るにはキャパシティバッファの適切な設定も欠かせない。Googleは今後、開発環境を毎晩20時にゼロスケールし翌朝7時に復帰させるといった、スケジュールベースのスケーリング機能も追加していく方針を示しており、コスト最適化に向けたきめ細かな制御が今後さらに強化される見通しだ。