내 잡다한 노트
Multiple Scheduler 본문
말그대로 여러 스케줄러를 배포하는 방법에 대한 글이다.
기본 스케줄러는 파드를 노드에 고르게 배분하는 알고리즘을 가지고 있으며 taints와 tolerations, node affinity 등을 고려한다.
하지만 이러한 것들을 사용해도 우리의 필요를 충족시키지 못한다면, 우리가 직접 스케줄러 프로그램을 작성하고, 추가 스케줄러로 배포할 수 있다. 이렇게 하면 다른 거는 기본 스케줄러로 처리될 수 있지만, 특정 애플리케이션은 우리가 만든 커스텀 스케줄러를 사용할 수 있다.
따라서 클러스터에는 여러 스케줄러가 동시에 존재할 수 있다.
파드나 deployment를 생성할 때, 우리는 쿠버네티스에게 특정 스케줄러에 의해 파드가 스케줄링되도록 지시할 수 있다.
여러 스케줄러가 있을 때 구분하는 방법은 이름이다. 기본 스케줄러는 default scheduler로 명명된다. 이 이름은 kube-scheduler 설정 파일에서 설정된다.
# 추가 스케줄러를 파드로 배포하는 방법
kube-scheduler 바이너를 다운로드하고 옵션을 설정하여 서비스로 실행하는 방법이 있다.
추가 스케줄러를 배포하려면 동일한 바이너리를 사용할 수도 있고, 필요에 따라 다르게 동작하는 스케줄러를 만들기 위해 직접 빌드한 것을 사용할 수도 있다. 그리고 커스텀 설정 파일로 설정을 지정한다.
다만, API에 인증하기 위한 kubeconfig 파일과 같은 다른 옵션들이 전달되어야 한다는 점에 유의해야 한다.
오늘날의 대부분의 경우엔 커스텀 스케줄러를 이렇게 배포하지는 않는다. 왜냐하면 kubeadm 배포에서는 모든 control plane이 kubernetes 클러스터 내에서 파드 또는 deployment로 실행되기 때문이다.
스케줄러를 파드로 배포하는 방법
파드 정의 파일을 생성하고, API 서버에 연결하기 위한 인증 정보를 가진 스케줄러 설정 파일의 경로를 kubeconfig 속성에 지정한다. 그 다음, kube-scheduler 설정 파일을 스케줄러에 대한 설정 옵션으로 전달하면 된다.
leader elect 옵션은 여러 마스터 노드에서 고가용성 설정으로 스케줄러의 여러 복사본이 실행되는 경우 사용된다.
동일한 스케줄러의 여러 복사본이 다른 노드에서 실행되고 있다면, 한 번에 하나만 활성화될 수 있으며, 이때 leader elect 옵션이 리더를 선택하는 데 도움을 준다.
# 추가 스케줄러를 배포로 배포하는 방법
새 스케줄려를 사용하는 방법
pod definition file에서 scheduler name이라는 새 필드를 추가하고 여기에 새 스케줄러의 이름을 지정하는 것이다.
잘 됐다면 running이 되겠지만 그렇지 않다면 pending 상태로 남아 있게 된다.
스케줄러으 ㅣ로그를 살펴보려면 kubectl logs를 사용하면 된다.
'DevOps > 쿠버네티스' 카테고리의 다른 글
쿠버네티스[K8S] 오브젝트의 명세 설정 (0) | 2024.11.06 |
---|---|
k8s helm (0) | 2024.08.12 |
Static Pods (0) | 2024.08.10 |
Vagrant (0) | 2023.11.17 |
k8s 자격증 따야할 때 보면 좋을 강의 (0) | 2023.11.10 |