피드로 돌아가기
Code Story: Building a Custom Kubernetes Scheduler with Go 1.24, Scheduler Framework, and KEDA 2.15
Dev.toDev.to
Infrastructure

Custom K8s Scheduler 도입을 통한 자원 낭비 74% 절감 및 지연시간 62% 개선

Code Story: Building a Custom Kubernetes Scheduler with Go 1.24, Scheduler Framework, and KEDA 2.15

ANKUSH CHOUDHARY JOHAL2026년 4월 29일21advanced

Context

기본 kube-scheduler의 KEDA Scaler 인식 부재로 인한 Pod 배치 최적화 한계 발생. Pod Affinity 우선순위 설정으로 인해 가용 노드 존재 시에도 Pending 상태가 지속되는 병목 지점 확인.

Technical Solution

  • Go 1.24 및 Kubernetes Scheduler Framework 기반의 Custom Scheduler 설계
  • KEDA 2.15의 QueueingHint API를 통합하여 Scaler 용량 미확보 시 스케줄링 사이클을 건너뛰는 최적화 로직 구현
  • QueueSort, Filter, Score, Reserve 단계별 Custom Plugin을 통한 워크로드 특성별 최적 노드 선정
  • 기본 kube-scheduler와 Custom Scheduler를 병행 운용하는 Multi-Scheduler 배포 전략 채택
  • Go 1.24의 향상된 GC 및 바이너리 크기 감소(18%)를 통한 스케줄러 프로세스 메모리 오버헤드 최소화

Impact

  • Pod Scheduling Latency 62% 감소
  • 노드 자원 활용률 40%에서 80%로 향상 및 클러스터 자원 낭비 74% 절감
  • 500 노드 규모 클러스터 기준 월 GKE 컴퓨팅 비용 $21k 절감

Key Takeaway

범용 스케줄러의 한계를 극복하기 위해 도메인 특화 메트릭(KEDA Metrics)을 스케줄링 사이클에 직접 결합함으로써 인프라 비용과 성능을 동시에 최적화함.


- KEDA 기반 이벤트 드리븐 워크로드의 Pending 시간 및 노드 낭비 지표 확인 - Scheduler Framework의 Plugin 인터페이스를 통한 단계별 필터링 및 스코어링 로직 검토 - 시스템 안정성을 위해 기본 스케줄러와 커스텀 스케줄러를 분리하여 운용하는 패턴 적용

원문 읽기