목록 보기
Informer를 사용해 쿠버네티스 중계 API 서버의 성능 개선하기
데브옵스

Informer를 사용해 쿠버네티스 중계 API 서버의 성능 개선하기

라인
라인
2024년 7월 29일

두줄요약

쿠버네티스 중계 API 서버를 Python에서 Go로 재구현하고 Informer 캐시를 적용했습니다. 그 결과 800개 노드의 리소스 계산 시간이 약 10초에서 0.2초로 줄었습니다.

문제 상황

  • 멀티 테넌트 쿠버네티스 클러스터에서 일반 사용자가 클러스터 레벨 오브젝트 권한 없이 노드의 스케줄링 가능 리소스를 확인해야 하는 요구
  • kubectl describe node 수준의 계산을 제공하려 했지만, 전체 파드 조회가 필요해 RBAC 제약과 성능 문제 발생

원인 분석

  • 노드별 리소스 계산에 클러스터 전체 파드 목록 조회가 필요해 kube-apiserver와 etcd 부하가 큼
  • Python 클라이언트 기반 구현은 비동기화 후에도 한 리소스 계산에 약 10초 소요

해결 방법

  • Go 클라이언트와 SharedInformerFactory를 사용해 노드·파드 Informer 캐시 구성
  • Reflector, Informer, Indexer로 로컬 캐시에 오브젝트 변경을 반영하고, 조회는 캐시에서 처리
  • 캐시된 파드 요청량과 노드 allocatable 자원의 차이로 스케줄링 가능 리소스 계산

성능/운영 포인트

  • kube-apiserver 직접 조회 대신 로컬 캐시 사용으로 API 부하 감소
  • 800개 노드 기준 계산 시간이 약 10초에서 0.2초로 단축

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...