1. Kubernetes 스케줄링 과정 복습
Pod이 스케줄링될 때 순서:
- 큐잉(Queueing)
- 생성된 Pod들은 스케줄링 큐에 들어감
PrioritySort 플러그인 → 우선순위 클래스(PriorityClass)에 따라 정렬
- 필터링(Filtering)
- 리소스 조건, 노드 라벨/상태 등에 맞지 않는 노드는 제외
- 예:
NodeResourcesFit, NodeName, NodeUnschedulable
- 스코어링(Scoring)
- 남은 리소스, 이미지 locality, 등 조건에 따라 점수 부여
- 가장 높은 점수를 받은 노드 선택
- 바인딩(Binding)
DefaultBinder 플러그인 → Pod을 선택된 노드에 최종 바인딩
2. 스케줄링 프레임워크와 플러그인
- 스케줄러는 다양한 플러그인(Plugin) 으로 구성됨
- 플러그인은 특정 확장 지점(Extension Point) 에 연결됨
- QueueSort, PreFilter, Filter, PostFilter, PreScore, Score, Reserve, Permit, PreBind, Bind, PostBind
- 예:
PrioritySort → QueueSort 확장 지점
NodeResourcesFit → Filter & Score 둘 다 참여
ImageLocality → Score 단계에서 점수 계산
즉, 원하는 동작을 추가/변경하려면 커스텀 플러그인을 만들어 특정 Extension Point에 삽입 가능.
3. 기존 멀티 스케줄러 방식의 한계
- 예전에는 별도 스케줄러 프로세스를 여러 개 띄워야 했음 (예: default-scheduler, my-scheduler, my-scheduler-2)
- 문제:
- 각 스케줄러가 독립 프로세스로 동작 → 관리 부담 증가
- 경합 조건(Race Condition) 발생 가능 (동시에 같은 노드에 Pod을 배정 시도)
4. Scheduler Profiles (v1.18 이후)
- 하나의 스케줄러 프로세스 안에서 **여러 프로파일(Profile)**을 지원
- 각 프로파일은 사실상 독립된 스케줄러처럼 동작