Kubernetes v1.37: etcd RangeSt... ノート

Kubernetes v1.37: etcd RangeStream が大規模リスト読み込み時のメモリ使用量を削減

etcd RangeStream は Kubernetes v1.37 でベータ版に昇格し、etcd v3.7 と連携します。この機能は、リソースの大きなコレクションを読み取る際の API サーバーと etcd のメモリ使用量を大幅に削減します。以前は、API サーバーのウォッチキャッシュを初期化するには、etcd から高コストなフルリードが必要でした。ページネーションは存在しましたが、オブジェクトサイズではなくキー数に基づいていたため、予測不能なメモリのスパイクやメモリ不足エラーが発生する可能性がありました。etcd の単項 Range RPC は、送信前にページ全体を組み立てていたため、etcd と API サーバーの両方でメモリプレッシャーが悪化していました。etcd v3.7 の新しい RangeStream RPC は、結果をチャンクでストリーミングすることでこれを解決します。チャンクサイズは値のサイズに合わせて適応的に調整され、キー数ではなくバイト数で読み取りを制限します。これにより、ストリームが進むにつれてメモリを段階的に解放できます。EtcdRangeStream 機能ゲートが有効になっている場合、API サーバーはウォッチキャッシュの初期化とフォールバックリストリクエストの両方に RangeStream を使用します。チャンクが到着するとデコードおよび解放されるため、コレクション全体が同時にメモリに保持されるのを防ぎます。この機能には Kubernetes v1.37 以降と etcd v3.7 以降が必要です。API サーバーは etcd のサポートを自動的に検出し、RangeStream が実装されていない場合はフォールバックします。RangeStream がアクティブであることを確認するには、etcd_request_duration_seconds_count{operation="listStream"} メトリックがゼロ以外の値であることを監視してください。