Nomad 잡 스케줄러 종류

Nomad 잡 스케줄러 종류

Nomad는 잡을 어디에, 어떻게 배치할지 결정하는 데 네 가지 잡 스케줄러를 제공해요: service, batch, system, sysbatch예요. 워크로드의 특성에 따라 어떤 스케줄러를 쓸지 달라져요. 이 페이지에서는 각 스케줄러가 언제, 왜 유용한지 하나씩 설명드릴게요.

출처: Hashicorp 공식 문서 - Nomad job schedulers

본문

Service

service 스케줄러는 절대 내려가면 안 되는 장기 실행 서비스를 스케줄링하도록 설계됐어요. 그래서 service 스케줄러는 잡의 제약 조건을 충족하는 상당수의 노드에 순위를 매기고, 태스크 그룹을 배치할 최적의 노드를 선택해요. service 스케줄러는 Google의 Borg 연구에 영향을 받은 최적 적합(best fit) 점수 알고리즘을 써요. 후보 노드의 더 큰 집합에 순위를 매기면 스케줄링 시간은 늘지만, 잡 배치의 최적성에 대한 보장이 커져요. 서비스 워크로드에는 이 점이 매우 바람직하죠.

서비스 잡은 운영자가 명시적으로 중지할 때까지 실행되도록 설계됐어요. 서비스 태스크가 종료되면 실패로 간주하고, 잡의 restartreschedule 블록에 따라 처리해요.

Batch

배치 잡은 단기적인 성능 변동에 훨씬 덜 민감하고, 수명이 짧아 몇 분에서 며칠 안에 끝나요. batch 스케줄러는 service 스케줄러와 매우 비슷하지만 배치 워크로드를 위한 몇 가지 최적화를 해요. 가장 큰 차이는 잡의 제약 조건을 충족하는 노드 집합을 찾은 뒤, Berkeley의 Sparrow 스케줄러에서 설명한 "두 가지 선택의 힘(power of two choices)"을 사용해 순위를 매길 노드 수를 제한한다는 점이에요.

배치 잡은 성공적으로 종료될 때까지 실행되도록 설계됐어요. 오류로 종료된 배치 태스크는 잡의 restartreschedule 블록에 따라 처리해요.

System

system 스케줄러는 잡의 제약 조건을 충족하는 모든 클라이언트에서 실행해야 하는 잡을 등록하는 데 사용돼요. system 스케줄러는 클라이언트가 클러스터에 합류하거나 ready 상태로 전환될 때도 호출돼요. 즉 등록된 모든 system 잡이 재평가되고, 제약 조건이 충족되면 새로 사용 가능해진 노드에 태스크가 배치돼요.

이 스케줄러 유형은 클러스터의 모든 노드에 있어야 하는 태스크를 배포·관리하는 데 매우 유용해요. 이런 태스크는 Nomad가 관리하므로 잡 업데이트, 서비스 디스커버리 등을 활용할 수 있어요.

노드에 system 잡을 배치할 용량이 충분하지 않으면 system 스케줄러는 노드에서 실행 중인 자격 있는 저우선순위 태스크를 선점(preempt)해요. 선점당하는 태스크가 어떻게 선택되는지에 대한 자세한 내용은 preemption을 참고해요.

시스템 잡은 운영자나 선점에 의해 명시적으로 중지될 때까지 실행되도록 설계됐어요. 시스템 태스크가 종료되면 실패로 간주하고 잡의 restart 블록에 따라 처리해요. 시스템 잡에는 리스케줄링(rescheduling)이 없어요.

노드 풀과 함께 사용하면 system 잡은 잡이 사용하는 풀의 모든 노드에서 실행돼요. 내장 노드 풀 all은 클러스터의 모든 클라이언트에 할당을 배치할 수 있게 해줘요.

System Batch

sysbatch 스케줄러는 잡의 제약 조건을 충족하는 모든 클라이언트에서 완료까지 실행해야 하는 잡을 등록하는 데 사용돼요. sysbatch 스케줄러는 system 스케줄러와 비슷하게 잡을 스케줄하지만, batch 잡처럼 태스크가 성공적으로 종료되면 해당 클라이언트에서 다시 시작되지 않아요.

이 스케줄러 유형은 클러스터의 모든 노드에서 실행할 "일회성(one-off)" 명령을 내릴 때 유용해요. Sysbatch 잡은 periodicparameterized 잡으로도 만들 수 있어요. 이 태스크는 Nomad가 관리하므로 잡 업데이트, 서비스 디스커버리, 모니터링 등을 활용할 수 있어요.

sysbatch 스케줄러는 잡을 배치할 용량이 충분하지 않으면 노드에서 실행 중인 저우선순위 태스크를 선점해요. 선점당하는 태스크가 어떻게 선택되는지는 preemption 세부 내용을 참고해요.

Sysbatch 잡은 성공적인 완료, 운영자에 의한 명시적 중지, 또는 선점을 통한 축출까지 실행되도록 설계됐어요. 오류로 종료된 sysbatch 태스크는 잡의 restart 블록에 따라 처리해요.

batch 스케줄러와 마찬가지로 system batch 잡의 태스크 그룹은 count를 1보다 크게 설정해 몇 개의 인스턴스를 실행할지 제어할 수 있어요. 즉시 배치할 수 없는 인스턴스는 리소스가 사용 가능해질 때 스케줄될 텐데, 잠재적으로 같은 잡의 다른 인스턴스를 이미 실행한 노드에서 실행될 수 있어요.

더 알아보기