Kube-scheduler란?
kube-scheduler는 쿠버네티스 컨트롤 플레인에서 새로 생성된 파드(Pod)를 어떤 노드(Node)에서 실행할지 결정하는 핵심 컴포넌트다.
중요한 점은, 스케줄러는 결정만 할 뿐, 실제로 노드에 파드를 띄우지는 않는다. 파드를 최종적으로 실행하는 것은 해당 노드에 있는 Kubelet의 역할이다. 스케줄러는 마치 물류센터의 배차 전문가처럼, 어떤 화물(파드)을 어떤 트럭(노드)에 실어야 가장 효율적일지 분석하고 할당하는 역할만 수행한다.
스케줄러의 작동 방식: 2단계 프로세스
스케줄러는 최적의 노드를 찾기 위해 모든 노드를 대상으로 다음과 같은 2단계 과정을 거친다.
1단계: 필터링 (Filtering)
가장 먼저, 파드를 실행할 수 없는 노드를 모두 걸러내는 과정이다. 마치 조건에 맞지 않는 후보를 제외하는 것과 같다.
- 필터링 조건의 예:
- 파드가 요청하는 CPU나 메모리 자원이 부족한 노드
- 파드에 설정된
nodeSelector나nodeAffinity와 일치하지 않는 노드 - 노드에 설정된 오염(Taint)을 파드가 용인(Toleration)하지 못하는 경우
이 단계를 거치고 나면, 파드를 실행할 수 있는 최소 자격 요건을 갖춘 '후보 노드'들의 목록이 만들어진다.
2단계: 스코어링 (Scoring)
다음으로, 필터링을 통과한 후보 노드들을 대상으로 점수를 매겨 가장 적합한 노드 하나를 최종 선택하는 과정이다.
- 스코어링 규칙의 예:
- 리소스 여유분: 파드를 배치했을 때 CPU나 메모리 여유 공간이 가장 많이 남는 노드에 높은 점수를 준다.
- 이미지 유무: 파드가 사용할 컨테이너 이미지가 이미 다운로드되어 있는 노드에 높은 점수를 준다. (파드 시작 시간 단축)
- 파드 분산: 여러 개의 파드를 가급적 다른 노드에 분산시켜 배치하려는 규칙 (고가용성 확보)
각 규칙에 따라 0점에서 10점까지 점수를 매긴 후, 모든 점수를 합산하여 가장 높은 총점을 받은 노드가 최종적으로 선택된다.
설정 및 확인 방법
스케줄러 역시 다른 컨트롤 플레인 컴포넌트처럼 설정을 확인하고 관리할 수 있다.
설정 파일 위치
- kubeadm 환경 (대부분의 경우): 스케줄러는 스태틱 파드로 실행되며, 설정 파일은
/etc/kubernetes/manifests/kube-scheduler.yaml이다. 이 파일을 수정하면 자동으로 재시작된다.
실행 상태 확인
마스터 노드에서 아래 명령어를 실행하면 현재 적용된 모든 옵션을 직접 볼 수 있다.
ps aux | grep kube-scheduler
스케줄러의 세부적인 필터링/스코어링 정책은 복잡하며, 별도의 설정 파일을 통해 커스터마이징하거나 직접 개발한 스케줄러를 사용할 수도 있다. 하지만 CKA 수준에서는 기본 스케줄러의 동작 원리와 설정 파일 위치를 아는 것이 중요하다.
'K8s' 카테고리의 다른 글
| Kubelet, Kube-proxy, Pod (0) | 2025.08.14 |
|---|---|
| Kube Controller Manager (0) | 2025.08.09 |
| Kube-apiserver (0) | 2025.08.09 |
| ETCD (0) | 2025.08.08 |
| 컨테이너 런타임 인터페이스 (CRI) (0) | 2025.08.05 |