심플코더
간단한 코딩 공간
   

글쓰기    관리    수식입력
  • 분류 전체보기 (84)
    • AWS (1)
    • JavaScript (11)
    • 개인학습 (5)
    • DB (11)
    • OS (9)
    • Network (7)
    • DevOps (0)
    • TypeScript (1)
    • 개발 (1)
    • CKA (28)
hELLO · Designed By 정상우.
심플코더

간단한 코딩 공간

CKA

(TIL) Scheduler Profiles

기본 스케줄링 흐름

1. Pod 생성 시 스케줄링 큐에 할당된다. 큐 내부에서는 Priority에 따라 정렬된다. `PrioritySort` 플러그인을 통해 Priority가 높은 순으로 정렬되며 이 우선순위는 PriorityClass resource를 만들어 설정할 수 있다.

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000

 

2. 이후 큐에 있는 Pod가 POP되면 필터링을 거치게된다. 필터링과정에서 Pod이 요구하는 조건을 충족시키지 못하는 노드를 제외시키며 이 과정은 `NodeResourcesFit` 플러그인이 담당한다. Pod의 nodeName 필드가 지정된 경우 `NodeName`플러그인에 의해 해당 노드만 남기고 제거하게되며 unscheduleable로 설정된 노드는 `NodeUnschedulable` 플러그인에 의해 필터링된다.

 

3. 필터링을 마치면 스코어링 작업에 들어간다. 남는 리소스가 더 많은 노드일수록 더 높은 점수를 책정하며, 이 과정에서는 `NodeResourcesFit` 플러그인이 관여한다. 또한 이미 노드에 Pod의 이미지가 캐싱되어 있는 경우는 가산점을 부여하는데 이는 `ImageLocality` 플러그인이 담당한다.

 

4. 마지막으로 바인딩 과정을 거친다. 가장 점수가 높은 노드에 실제로 Pod이 스케줄링되며, `DefaultBinder` 플러그인이 담당한다.

 

Extenstion Point

쿠버네티스 스케줄러의 동작과정을 좀 더 자세히 살펴보면 다음과 같다.

 

Extension Point 설명 대표 플러그인
QueueSort 대기열 정렬 PrioritySort
PreFilter 필터링 전 처리 NodePorts, InterPodAffinity 등
Filter 스케줄 불가 Node 필터링 NodeResourcesFit, NodeName, NodeUnschedulable
PostFilter 필터링 후 처리 DefaultPreemption 등
PreScore 스코어링 전 처리 DefaultPreScore
Score 점수 부여 NodeResourcesFit, ImageLocality
Reserve Node에 임시 할당 DefaultReserve
Permit 마지막 허가 체크 DefaultPermit
PreBind 바인딩 직전 처리 DefaultPreBind
Bind 실제 바인딩 DefaultBinder
PostBind 바인딩 후 처리 DefaultPostBind

 

Kubernetes Scheduler의 확장성

쿠버네티스는 기본적으로 다수의 스케줄러를 동시에 클러스터에 구성할 수 있다.

기존에는 kube-scheduler 바이너리를 여러 개 실행하여 스케줄러를 복수로 구성하였으나 프로세스 관리가 복잡하고 같은 노드에 pod 할당을 시도하면서 race condition이 발생할 수 있다는 문제가 존재했다.

 

이에 대한 개선으로 등장한 것이 Scheduler Profiles 방식으로 하나의 스케줄러 프로세스에서 여러 개의 스케줄링 로직을 수행할 수 있도록 개선되었다.

profiles:
- schedulerName: default-scheduler
  plugins:
    score:
      disabled:
        - name: "NodeResourcesFit"
- schedulerName: my-scheduler
  plugins:
    score:
      enabled:
        - name: "ImageLocality"
      disabled:
        - name: "NodeResourcesFit"

 

 

이후 Pod 스펙에 아래와 같이 명시하면 특정 프로파일로 스케줄링이 가능하다.

spec:
  schedulerName: my-scheduler

 

 

Scheduler Profile의 구조

스케줄러 프로파일을 설정할 때 커스터마이징 가능한 영역은 다음과 같다.

- plugins (사용/비활성화 플러그인 지정)

- pluginConfig (각 플러그인별 상세 설정)

- leaderElection (HA 환경용 leader election 설정)

- percentageOfNodesToScore (몇 %의 Node에 대해서만 스코어링 할 것인지)

 

Scheduler Profile 도입의 장점

1. 별도의 프로세스를 띄우지 않아도 다양한 스케줄링 로직 구현 가능
2. Race Condition 방지
3. Custom Scheduler 개발 및 배포가 쉬워짐 (Custom Plugin 작성 + Profile 등록만 하면 됨)
4. HA 환경에서도 안정적으로 동작
5. 기존 Extension Point 기반으로 유연하게 Plugin 조합 가능

 

 

'CKA' 카테고리의 다른 글

Kubernetes Monitoring  (0) 2025.04.01
Kubernetes Admission Controller의 두 가지 유형  (0) 2025.03.30
(TIL) Kubernetes Static Pods  (0) 2025.03.26
(TIL) Kubernetes DaemonSet  (0) 2025.03.26
(TIL) Kubernetes에서의 Resource Request & Limits  (0) 2025.03.26
    'CKA' 카테고리의 다른 글
    • Kubernetes Monitoring
    • Kubernetes Admission Controller의 두 가지 유형
    • (TIL) Kubernetes Static Pods
    • (TIL) Kubernetes DaemonSet
    심플코더
    심플코더

    티스토리툴바