Kubernetes Blog 中文 关注 Kubernetes v1.37:etcd RangeStream 大幅降低大型列表读取的内存占用 etcd 的 RangeStream 功能将在 Kubernetes v1.37 中晋升为 beta 版本,需配合 etcd v3.7 使用。该功能显著降低了 API 服务器和 etcd 在读取大量资源时的内存占用。此前,填充 API 服务器的 watch 缓存涉及从 etcd 进行昂贵的全量读取。虽然已有分页机制,但其基于键的数量而非对象大小,导致内存峰值不可预测,并可能引发内存溢出(Out-Of-Memory)错误。etcd 的单次 Range RPC 会在发送前组装整个页面,加剧了 etcd 和 API 服务器的内存压力。etcd v3.7 中的新 RangeStream RPC 通过将结果以块(chunks)形式流式传输来解决此问题。块大小会根据值的大小自适应调整,将读取限制在字节数而非键的数量上。这使得随着流式传输的进行,内存可以逐步释放。当启用 EtcdRangeStream 功能门控(feature gate)时,API 服务器将 RangeStream 用于 watch 缓存初始化以及回退的列表请求。它会解码并释放到达的块,防止整个集合同时驻留在内存中。该功能需要 Kubernetes v1.37+ 和 etcd v3.7+。API 服务器会自动检测 etcd 的支持情况,若 RangeStream 未实现则自动回退。要确认 RangeStream 是否已激活,请监控 etcd_request_duration_seconds_count{operation="listStream"} 指标,观察其是否显示非零值。 Kubernetes v1.37: etcd RangeStream Cuts Memory Use on Large List Reads kubernetes.io Kubernetes Blog 中文 RSS thenote.app
etcd_request_duration_seconds_count{operation="listStream"}指标,观察其是否显示非零值。