본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 17: Kube Scheduler

by 공부하는 무니 2023. 1. 1.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


이번 강의에서는 kube-scheduler에 대해 이야기해보겠습니다.

Kube Scheduler

kubernetes scheduler는 노드에서 파드 스케쥴링을 담당한다고 앞에서 언급했습니다. 스케쥴러는 어떤 파드가 어떤 노드로 가야하는지 결정하는 것만 합니다. 실제로 파드를 노드에 배치하지는 않습니다.

그럼 파드를 노드에 배치하는 작업은 누가 할까요? 그 작업을 하는 것이 바로 kubelet입니다. kubelet(배의 선장)은 배에 파드를 만듭니다. 스케쥴러는 어떤 파드가 어디로 가는지만 결정합니다.

스케쥴러가 어떻게 결정하는지 더 자세히 살펴봅시다. 먼저, 스케쥴러가 필요한 이유는 무엇일까요? 배와 컨테이너가 많을 때, 컨테이너가 올바른 컨테이너인지, 올바른 배인지 확인하고 싶습니다. 예를 들어서, 배와 컨테이너의 크기가 다 다르다면, 배가 해당 컨테이너를 수용할 수 있을만큼 충분한 공간을 가지고 있는지 확인해야 할 것입니다.

또한, 컨테이너들이 올바른 배에 잘 배치되어있는지 확인해야 할 것입니다. Kubernetes에서 스케쥴러는 파드가 배치될 노드를 결정합니다. 이는 특정 기준에 따라 배치하게 됩니다. 리소스 요구사항이 다른 파드가 있다고 합시다. 클러스터에 있는 노드는 특정 애플리케이션 전용 노드일 수 있습니다. 그렇다면 스케쥴러는 이러한 파드를 확인하고 최적의 노드를 찾으려고 합니다.

예를 들어 파드가 'CPU: 10'이라는 요구사항이 있을 때, 스케쥴러는 두 단계를 거칩니다.

  1. 파드에 가장 적합한 노드를 식별합니다. 여기서 스케쥴러는 이 파드 프로필에 맞지 않는 노드(ex. CPU가 충분하지 않은 노드) 등 필터링을 시도합니다.
  1. 스케쥴러는 노드의 순위를 매깁니다. 우선순위 함수를 사용하여 0에서 10까지의 점수를 할당합니다. 예를 들어, 스케쥴러는 노드의 프리한 리소스의 양을 계산하고, 파드를 프리 리소스가 더 많은 노드에 배치합니다.

이것이 스케줄러가 대략적으로 작동하는 방식입니다. 물론 커스터마이징하여 자신만의 스케쥴러를 만들 수도 있습니다. 리소스 요구사항과 제한사항, Taints 및 toleration, 노드 셀렉터, 선호도 규칙 등 다룰만한 주제가 많습니다. 스케쥴링에 할애된 현재 섹션에서 더 자세히 다룰 것입니다. 지금은 대략적인 프로세스로서의 스케쥴러 자체에 대해 계속 집중해보겠습니다.

Install kube-scheduler - Manual

kube-scheduler를 어떻게 설치할까요? Kubernetes 릴리즈 페이지에서 kube-scheduler 바이너리를 다운로드하고 extract 하고, 서비스로 실행하면 됩니다.

$ wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-scheduler

서비스로 실행할 때, scheduler configuration file을 지정해줍니다.

View kube-scheduler options - kubeadm

그렇다면, kube-scheduler 서버 옵션은 어떻게 볼 수 있을까요? kubeadmin 툴로 셋업했다면 kubeadm 툴은 kube-scheduler를 kube system 네임스페이스에서 마스터 노드의 파드로 배포합니다.

$ kubectl get pods -n kube-system

/etc/kubernetes/manifests 아래에 있는 pod definition file에서 옵션을 볼 수 있습니다.

$ cat /etc/kubernetes/manifests/kube-scheduler.yaml

또한 실행중인 프로세스들과 적용된 옵션들을 아래 커맨드로 볼 수 있습니다.

$ ps -aux | grep kube-scheduler

 

반응형

댓글