고급 작업 스케줄링
고급 작업 스케줄링 (Advanced job scheduling)
기본적으로 Nomad 스케줄러는 빈 패킹(bin-packing) 알고리즘을 사용해 Nomad 클러스터에서 애플리케이션의 리소스 사용률과 밀도를 최적화해요. 할당 배치 위치를 더 세밀하게 제어할 수도 있어요. 이를 통해 다음과 같은 사용 사례가 가능해져요:
- 작업 명세
affinity블록으로 특정 애플리케이션에 특정 종류의 노드 클래스를 선호하도록 표현해요. - 작업 명세
spread블록으로 데이터센터, 랙 또는 기타 노드 속성·메타데이터에 걸쳐 할당을 분산해요.
출처: 문서
본문
스케줄링 성능 (Scheduling performance)
서비스 및 배치(batch) 작업의 각 할당에 대해 Nomad 스케줄러는 소수의 실행 가능한 노드를 찾을 때까지 노드를 순회해요. 그런 다음 스케줄러는 그 실행 가능한 노드들을 점수화해 최적의 배치를 찾아요. 점수화되는 정확한 노드 수는 작업 명세에 따라 달라져요. affinity 또는 spread 블록을 사용하면 스케줄링 성능에 큰 영향을 줄 수 있어요.
affinity나 spread가 없는 경우
affinity나 spread 블록을 생략하면 배치 작업의 노드 한도는 2개예요. 서비스 작업의 경우 노드 한도는 최소 2개 또는 데이터센터와 노드 풀의 전체 노드 수에 대한 log2 중 하나예요.
affinity와 spread를 피하면 스케줄링 시간을 줄일 수 있어요. 대신 여러 노드에 걸친 작업의 기본 분포에 의존해요. 이것이 불가능하다면 노드 풀이나 데이터센터의 크기를 줄여 스케줄러가 고려할 수 있는 노드 수를 줄이는 방법을 고려할 수 있어요.
affinity나 spread가 있는 경우
affinity나 spread 블록을 포함하면 스케줄러는 태스크 그룹 수와 동일한 수의 노드(할당당 최대 100개)를 데이터센터와 노드 풀에서 점수화해요. 이로 인해 스케줄링 시간이 한 자릿수 이상으로 증가할 수 있어요.
affinity나 spread를 사용할 때 배치 무작위성을 높이고 스케줄러 경합을 줄이려면 node-limit-for-feasibility-checks 스케줄러 구성 옵션을 설정해요. 작업을 스케줄링할 때 Nomad가 고려해야 하는 실행 가능한 노드 수의 상한을 지정할 수 있어요.
- 숫자가 낮을수록 스케줄러 성능이 더 좋아지고 노드 간 작업 무작위화가 더 커져요.
- 숫자가 높을수록 spread나 affinity 적용이 더 결정적이 돼요.
기본 상한인 100을 줄이면 스케줄링 시간 증가, 빈 패킹 밀도, 그리고 Nomad 스케줄러가 affinity나 spread를 점수화하는 강도를 줄일 수 있어요.
노드 한도가 spread와 affinity 스케줄링 성능에 어떤 영향을 미치는지에 대한 수학적·그래픽적 설명은 GitHub 풀 리퀘스트 댓글을 참조하세요.
모니터링 (Monitoring)
affinity나 spread 블록에 의해 영향을 받을 수 있는 스케줄링 시간을 모니터링하려면 핵심 메트릭 (Key Metrics) 표의 nomad.nomad.worker.invoke_scheduler.*를 살펴보세요.
가이드 (Guides)
affinity와 spread 사용에 대한 다음 가이드를 참조하세요.