쿠버네티스 v1.37: etcd RangeStream,... 노트

쿠버네티스 v1.37: etcd RangeStream, 대규모 목록 읽기 시 메모리 사용량 감소

etcd RangeStream이 Kubernetes v1.37에서 베타 버전으로 승격되며, etcd v3.7과 함께 작동합니다. 이 기능은 대규모 리소스 컬렉션을 읽을 때 API 서버와 etcd의 메모리 사용량을 크게 줄여줍니다. 이전에는 API 서버의 watch 캐시를 채우는 데 etcd에서 비용이 많이 드는 전체 읽기가 필요했습니다. 페이지네이션이 존재했지만, 객체 크기가 아닌 키 수를 기반으로 하여 예측 불가능한 메모리 급증과 잠재적인 Out-Of-Memory 오류를 초래했습니다. etcd의 단항 Range RPC는 전체 페이지를 전송하기 전에 조립하여 etcd와 API 서버 모두의 메모리 압력을 악화시켰습니다.etcd v3.7의 새로운 RangeStream RPC는 결과를 청크로 스트리밍하여 이 문제를 해결합니다. 청크 크기는 값 크기에 맞춰 적응적으로 조정되며, 키 수가 아닌 바이트로 읽기를 제한합니다. 이를 통해 스트림이 진행됨에 따라 메모리가 점진적으로 해제될 수 있습니다. EtcdRangeStream 기능 게이트가 활성화되면 API 서버는 watch 캐시 초기화 및 대체 목록 요청 모두에 RangeStream을 사용합니다. 청크가 도착하는 대로 디코딩하고 해제하여 전체 컬렉션이 동시에 메모리에 유지되는 것을 방지합니다. 이 기능은 Kubernetes v1.37 이상 및 etcd v3.7 이상이 필요합니다. API 서버는 etcd의 지원을 자동으로 감지하고 RangeStream이 구현되지 않은 경우 대체합니다. RangeStream이 활성화되었는지 확인하려면 etcd_request_duration_seconds_count{operation="listStream"} 메트릭에서 0이 아닌 값을 모니터링하십시오.