피드로 돌아가기
What Actually Happens When kube-scheduler Picks a Node (13 Stages Inside Kubernetes)
Dev.toDev.to
Infrastructure

13단계 Pipeline과 Plugin 구조를 통한 Kubernetes의 고가용성 스케줄링 설계

What Actually Happens When kube-scheduler Picks a Node (13 Stages Inside Kubernetes)

saiyam18142026년 4월 29일22advanced

Context

단순 리소스 기반 노드 선택의 한계를 극복하고, 복잡한 제약 사항을 유연하게 처리해야 하는 요구사항 발생. 하드코딩된 로직 대신 확장 가능한 구조를 통해 다양한 스케줄링 전략을 수용하는 아키텍처 필요성 증대.

Technical Solution

  • KEP-624 기반의 Scheduling Framework 도입을 통한 핵심 로직과 Plugin의 완전한 분리 설계
  • PreFilter 및 PreScore 단계에서 공통 데이터를 미리 계산하여 CycleState에 저장하는 Compute once, read many 전략 채택
  • 14개 Plugin의 binary verdict를 통한 Filter 단계의 엄격한 후보군 제거 및 9개 Plugin의 가중치 합산 방식 Score 단계 구현
  • Reserve 단계를 통한 in-memory snapshot 업데이트로 API Server 반영 전 차기 Pod의 중복 할당 방지
  • activeQ, backoffQ, unschedulableQ의 3중 큐 구조를 통한 우선순위 처리 및 지수 백오프 기반의 재시도 메커니즘 적용
  • TaintToleration(x3) 등 Plugin별 차등 가중치 부여를 통한 의사결정 신호의 정밀도 제어

1. 복잡한 조건의 필터링이 필요한 경우, 모든 조건을 검사하기 전 공통 데이터를 사전 계산하는 Pre-phase 단계 설계 검토

2. 여러 결정 요인이 충돌할 때 단순 우선순위가 아닌 가중치 기반의 Scoring 시스템 도입 고려

3. 분산 환경에서 데이터 반영 지연으로 인한 Race Condition 방지를 위해 메모리 내 가상 예약(Reserve) 메커니즘 적용 검토

4. 즉시 재시도가 실패할 가능성이 높은 경우, 지수 백오프(Exponential Backoff) 큐를 통한 상태 변화 대기 구조 설계

원문 읽기