[CKA] 1.4 kube-Scheduler 기본
[CKA] 1.4 kube-Scheduler 기본 — #개발자의도구들 #kube-scheduler #cka #쿠버네티스 #쿠버네티스스케줄러 kube-Scheduler Kube-Schedule...
#개발자의도구들 #kube-scheduler #cka #쿠버네티스 #쿠버네티스스케줄러
kube-Scheduler
Kube-Scheduler
다시 항구 비유로 돌아갑시다.
항구에 새로운 컨테이너가 도착했다고 생각해봅시다. 이 컨테이너를 어느 배에 실어야 할까요? 컨테이너의 크기, 무게, 목적지, 그리고 각 배의 남은 공간과 함께 일정 등을 고려해서 가장 적합한 배를 골라야 합니다.
이런 결정을 내리는 사람이 바로 화물 배정 담당자입니다. 쿠버네티스에서는 kube-scheduler가 이 역할을 수행하고 있습니다.
주의사항
여기서 주의할 부분이 있습니다. 스케줄러는 Pod를 직접 생성하지 않습니다. 실제로 Pod를 만드는 것은 kubelet의 일입니다.
왜 스케쥴러가 필요한가?
아무 컨테이너를 아무 노드에 배치해서는 안됩니다. 이유는 아래와 같습니다.
노드마다 상황(condition)이 다릅니다.
- 리소스: 노드별 CPU, Memory, DISK 용량이 모두 다릅니다.
- 남은 공간이 다릅니다. 이미 많은 파드가 돌고 있는 노드에는 배치하기 어렵습니다.
- 용도가 다를 수 있습니다: 이미지가 수행하는 작업에 따라 최적화된 노드를 찾아가야 합니다.
Pod마다 요구사항이 다릅니다.
- 필요하 리소스가 다릅니다: 어떤 Pod는 CPU를 많이 사용하고, 어떤 Pod는 메모리를 많이 사용합니다.
- 특별한 조건이 있을 수 있습니다: "SSD가 있는 노드에서만 실행해줘!" 라는 요구사항이 존재할 수 있습니다.
How to Schedule?
스케쥴러가 파드를 배치할 노드를 결정하는 과정은 크게 두 단계로 나뉩니다.
- 필터링(Filtering)
조건에 맞지 않는 노드를 걸러냅니다.
예를들어, Pod 요구사항이 "4 cpu, 8GB Memory"라고 가정했을때, 이에 맞지 않는 노드들은 빠르게 걸러집니다.
노드 A: CPU 2코어 남음, 메모리 4GB 남음 → ❌ 탈락 (리소스 부족)
노드 B: CPU 1코어 남음, 메모리 16GB 남음 → ❌ 탈락 (CPU 부족)
노드 C: CPU 8코어 남음, 메모리 16GB 남음 → ✅ 통과
노드 D: CPU 6코어 남음, 메모리 10GB 남음 → ✅ 통과
이 단계가 끝나면 후보 노드가 만들어집니다.
- Scoring
남은 후보들 중 가장 적합한 후보를 고릅니다. 이를 위해 특정 기준에 따라 점수를 부여합니다.
스케쥴러는 각 노드별 0에서 10점까지의 점수를 매깁니다. 여러가지 기준이 있지만, 대표적인 건 파드 배치 후 남는 리소스입니다.
노드 C: 파드 배치 후 CPU 4코어, 메모리 8GB 남음 → 점수: 8점
노드 D: 파드 배치 후 CPU 2코어, 메모리 2GB 남음 → 점수: 4점
이 경우 점수가 높은 노드 C가 선택됩니다.
기본적인 알고리즘은 이러하고, 사용자가 자체적으로 알고리즘을 만들어서 사용할 수 있습니다.
설정
kubeadm으로 설치한 경우
kube-scheduler는 마스터 노드의 kube-system 네임스페이스에 Pod 형태로 배포됩니다:
/etc/kubernetes/manifests/kube-scheduler.yaml
수동으로 설치한 경우
바이너리를 다운로드해서 서비스로 실행합니다. 이때 스케줄러 설정 파일을 지정해줘야 해요:
--config=/etc/kubernetes/scheduler-config.yaml
실행 중인 옵션 확인
ps aux | grep kube-scheduler
정리
kube-scheduler는 새로운 파드가 생성될 때 어느 노드에 배치할지 결정하는 역할을 합니다. 실제 파드 생성은 해당 노드의 kubelet이 담당합니다.
스케줄링 과정은 두 단계로 이루어집니다:
- 필터링: 조건에 맞지 않는 노드를 제외
- 점수 매기기: 남은 후보 중 가장 적합한 노드 선택
이렇게 해서 쿠버네티스는 클러스터의 리소스를 효율적으로 활용하면서, 각 파드가 최적의 환경에서 실행될 수 있도록 해줍니다.