Part 2: 구현

스케줄러 확장(Extender) 접근 방식

스케줄러 확장 접근 방식은 기본 스케줄러의 기능을 확장하는 방법입니다. 이 접근 방식에서는 기본 스케줄러가 HTTP 요청을 통해 외부 서비스(스케줄러 확장)를 호출하여 추가 필터링 및 우선순위 기능을 제공합니다.

스케줄러 확장 아키텍처

다음 다이어그램은 스케줄러 확장 접근 방식의 아키텍처를 보여줍니다:

스케줄러 확장 아키텍처

스케줄러 확장 워크플로우

스케줄러 확장의 워크플로우는 다음과 같습니다:

spinner

스케줄러 확장 구현

스케줄러 확장은 다음과 같은 HTTP 엔드포인트를 제공해야 합니다:

  1. 필터(Filter): 포드를 실행할 수 없는 노드를 필터링합니다.

  2. 우선순위(Prioritize): 노드에 우선순위 점수를 할당합니다.

  3. 바인드(Bind): 포드를 노드에 바인딩합니다(선택 사항).

  4. 사전 필터(Prefilter): 필터링 전에 포드를 검사합니다(선택 사항).

  5. 사전 점수(Prescore): 점수 매기기 전에 포드를 검사합니다(선택 사항).

다음은 Go 언어를 사용한 간단한 스케줄러 확장 예제입니다:

스케줄러 확장 배포

스케줄러 확장을 컨테이너 이미지로 빌드하고 Kubernetes에 배포합니다:

스케줄러 구성

스케줄러 확장을 사용하려면 기본 스케줄러의 구성을 수정해야 합니다. EKS에서는 다음과 같이 구성할 수 있습니다:

  1. 스케줄러 구성 파일 생성:

  1. 스케줄러 구성을 ConfigMap으로 생성:

  1. Custom Scheduler 배포:

스케줄러 프레임워크 플러그인

Kubernetes 1.15부터 도입된 스케줄러 프레임워크는 플러그인 기반 아키텍처를 제공합니다. 이 접근 방식을 사용하면 스케줄링 파이프라인의 다양한 단계에 플러그인을 구현할 수 있습니다.

스케줄러 프레임워크 아키텍처

다음 다이어그램은 스케줄러 프레임워크의 아키텍처를 보여줍니다:

스케줄러 프레임워크 아키텍처

스케줄러 프레임워크 플러그인 구성

다음 다이어그램은 스케줄러 프레임워크 플러그인의 구성을 보여줍니다:

스케줄링 프레임워크 확장 포인트

스케줄링 프레임워크는 다음과 같은 확장 포인트를 제공합니다:

  1. QueueSort: 스케줄링 큐에서 포드의 순서를 결정합니다.

  2. PreFilter: 필터링 전에 포드를 검사하고 필터링 데이터를 준비합니다.

  3. Filter: 포드를 실행할 수 없는 노드를 필터링합니다.

  4. PreScore: 점수 매기기 전에 포드를 검사하고 점수 매기기 데이터를 준비합니다.

  5. Score: 노드에 점수를 할당합니다.

  6. NormalizeScore: 각 점수 플러그인의 점수를 정규화합니다.

  7. Reserve: 포드를 위한 리소스를 예약합니다.

  8. Permit: 포드가 스케줄링될 수 있는지 여부를 결정합니다.

  9. PreBind: 바인딩 전에 필요한 작업을 수행합니다.

  10. Bind: 포드를 노드에 바인딩합니다.

  11. PostBind: 바인딩 후에 필요한 작업을 수행합니다.

스케줄러 플러그인 구현

다음은 Go 언어를 사용한 간단한 스케줄러 플러그인 예제입니다:

스케줄러 플러그인 등록

스케줄러 플러그인을 등록하려면 스케줄러 구성 파일을 수정해야 합니다:

EKS에서의 스케줄러 프레임워크 구현

Amazon EKS에서 스케줄러 프레임워크를 구현할 때는 다음과 같은 사항을 고려해야 합니다:

  1. 컨테이너 이미지 빌드: Custom Scheduler 플러그인을 컨테이너 이미지로 빌드하고 Amazon ECR과 같은 컨테이너 레지스트리에 푸시합니다.

  2. 스케줄러 구성: 스케줄러 구성을 ConfigMap으로 생성하고 Custom Scheduler 파드에 마운트합니다.

  3. RBAC 권한: Custom Scheduler가 필요한 리소스에 액세스할 수 있도록 적절한 RBAC 권한을 설정합니다.

  4. 노드 레이블링: 특정 하드웨어 특성(예: GPU)에 따라 노드에 레이블을 지정합니다.

EKS 스케줄러 프레임워크 아키텍처

다음 다이어그램은 EKS에서 스케줄러 프레임워크를 구현하는 방법을 보여줍니다:

EKS 스케줄러 프레임워크 구현 단계

  1. Custom Scheduler 플러그인 개발:

  1. Dockerfile 생성:

  1. 이미지 빌드 및 푸시:

  1. 스케줄러 구성 ConfigMap 생성:

  1. Custom Scheduler 배포:

  1. 포드에 스케줄러 지정:

결론

이 장에서는 스케줄러 확장(Extender) 접근 방식과 스케줄러 프레임워크 플러그인을 사용하여 Custom Scheduler를 구현하는 방법을 알아보았습니다. 또한 EKS 클러스터에서 스케줄러 프레임워크를 구현하는 방법도 살펴보았습니다.

다음 장에서는 EKS에서의 Custom Scheduler 구현 사례와 모니터링 방법을 알아보겠습니다.

퀴즈

이 장에서 배운 내용을 테스트하려면 주제 퀴즈를 풀어보세요.

마지막 업데이트