본문 바로가기

DevOps/쿠버네티스(Kubernetes)

[CKA] Kubernetes Scheduler

Kubernetes Scheduler

 

kubernetes 스케줄러는 노드의 Pod 스케줄을 담당한다.
Scheduler는 어떤 Pod가 어떤 노드에서 어떤 Pod 로 이동하는지 결정하는 역할만 담당한다. 이것은 실제로 Pod를 노드에 배치하지 않는다. 실제로 Pod를 노드에 배치하는 것은 kubelet의 일이다. Scheduler는 어떤 Pod 가 어디로 가는지만 결정한다.

스케줄러가 어떻게 하는지 좀 더 자세히 살펴보자
우선 스케줄러가 왜 필요할까? 선박이 많고 컨테이너가 많을 때 올바른 컨테이너가 올바른 선박에 도착하는지 확인하려고 한다.
예를 들어 선박과 컨테이너의 크기가 다를 수 있다. 여러 선박이 다른 목적지로 이동할 수 있는 컨테이너를 수용할 수 있는 충분한 용량이 선박에 있는지 확인하려고 하고 컨테이너가 올바른 선박에 배치되어 올바른 목적지에 도착하는지 확인하려고 한다.

kubernetes에서 스케줄러는 Pod가 배치되는 노드를 결정한다. 일정한 기준에 따라 리소스 요구 사항이 서로 다른 Pos가 있을 수 있다.
클러스터에 특정 애플리케이션 전용 노드를 둘 수 있다.

그러면 스케줄러는 이러한 Pod를 어떻게 할당할까? 스케줄러는 각 Pod를 살펴보고 그에 가장 적합한 노드를 찾으려고 한다.

CPU 및 메모리 요구 사항이 있을때 스케줄러는 첫 번째 단계에서 포드에 가장 적합한 노드를 식별하기 위해 두 단계를 거친다.

 

1. Filter Nodes

2. Rank Nodes

 

스케줄러가 이 포드의 프로파일에 맞지 않는 노드를 필터링한다. 예를 들어 포드에서 요청한 CPU 및 메모리 리소스가 충분하지 않은 노드가 가 있다. 리소스가 충분하지 않은 노드가 필터링 되고  POD를 배치할 수 있는 남은 노드중 하나를 선택 하기 위해 순의를 매긴다.
0에서 10까지의 척도로 노드에 점수를 할당하는 우선 순위 함수를 사용한다. 예를 들어 스케줄러는 포드를 노드에 배치한 후 노드에서 사용 가능한 리소스의 양을 계산한다. 이것이 스케줄러가 높은 수준에서 작동하는 방식이다. 물론 사용자 지정이 가능하며 자신만의 스케줄러를 작성할 수도 있다.

 

  • Resource Requirements and Limits
  • Taints and Tolerations
  • Node Selectors/Affinity

리소스 요구 사항, 제한, 흠집 및 허용치, 노드 선택기, 선호도 규칙 등과 같은 더 많은 항목을 살펴볼 수 있다. 

 

 

 

$ wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-scheduler
    ExecStart=/usr/local/bin/kube-scheduler \\
    --config=/etc/kubernetes/config/kube-scheduler.yaml \\
    --v=2

그럼 큐브 스케줄러는 어떻게 설치 할까?

kubernetes 릴리스 페이지에서 kube-scheduler를 다운로드하고 실행한다. 서비스로 실행할 때 스케줄러 구성 파일을 지정한다.

 

cat /etc/kubernetes/manifests/kube-scheduler.yaml
  spec:
    containers:
    - command:
        - kube-scheduler
        - --address=127.0.0.1
        - --kubeconfig=/etc/kubernetes/scheduler.conf
        - --leader-elect=true

그렇다면 큐브 스케줄러 서버 옵션을 어떻게 볼까?
다시 말해, kubeadm 도구를 사용하여 설정하면 kube-scheduler는 kube-system 네임스페이스에 포드로 kube-scheduler를 배포한다. /etc/kubernetes/manifests 폴더에 있는 POD 정의 파일 내의 옵션을 볼 수 있다. 

 

$ ps -aux | grep kube-scheduler
    root 2477 0.8 1.6 48524 34044 ? Ssl 17:31 0:08 kube-scheduler --
    address=127.0.0.1 --kubeconfig=/etc/kubernetes/scheduler.conf --leader-elect=true

 

또한 마스터에 프로세스를 나열하여 실행 중인 프로세스와 효과적인 옵션을 볼 수 있다.

 

 

 

 

 

 

 

출처:

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/learn/lecture/14298430#content

'DevOps > 쿠버네티스(Kubernetes)' 카테고리의 다른 글

[CKA] Kubernetes Pod  (0) 2022.09.03
[CKA] Kubernetes kubelet / Kube-Proxy  (0) 2022.09.03
[CKA] Kube Controller-Manager  (0) 2022.09.03
[CKA] Kubernetes Kube-API Server  (0) 2022.09.03
[CKA] Kubernetes에서의 ETCD의 역할  (0) 2022.09.03