잡 스펙의 `reschedule` 블록
잡 스펙의 reschedule 블록
reschedule 블록은 그룹의 재스케줄링 전략을 지정해요. 잡 레벨에서 지정하면 그 설정이 잡 안의 모든 그룹에 적용돼요. 잡과 그룹 양쪽에 reschedule 블록이 있으면 그룹 블록이 가장 높은 우선순위를 차지하고 그다음 잡으로 병합돼요.
출처: 문서
본문
| 배치 | job -> **reschedule** |
|---|---|
job -> group -> **reschedule** |
태스크 상태 중 하나가 failed가 되면 Nomad는 다른 노드에 할당을 스케줄링하려고 시도해요. 스케줄러는 이전 할당이 사용하지 않았던 노드에 교체 할당을 만드는 것을 선호해요.
재스케줄링은 Nomad 에이전트가 할당을 설정하지 못하거나 할당의 태스크가 restart 블록이 허용하는 것보다 많이 실패할 때 발생해요. 노드가 드레이닝되면 Nomad는 할당을 마이그레이션하고 reschedule 블록을 무시해요. 노드가 유실되면 Nomad는 할당을 교체하고 reschedule 블록을 무시해요.
job "docs" {
group "example" {
reschedule {
attempts = 15
interval = "1h"
delay = "30s"
delay_function = "exponential"
max_delay = "120s"
unlimited = false
}
}
}
reschedule 블록은 모든 노드에서 실행되므로 system 또는 sysbatch 잡에는 적용되지 않아요.
매개변수 (Parameters)
-
attempts(int: <varies>)- 구성된 간격 안에서 허용되는 재스케줄링 시도 수. 기본값은 잡 타입에 따라 다르며 아래에서 더 자세히 설명해요. -
interval(string: <varies>)- 첫 번째 재스케줄링 시도가 시작될 때 시작되는 슬라이딩 윈도우. 그 안에서attempts만큼의 재스케줄링만 발생하도록 보장해요. 이 간격 안에서attempts보다 많은 실패가 발생하면 Nomad는 더 이상 재스케줄링하지 않아요. -
delay(string: <varies>)- 실패한 태스크를 재스케줄링하기 전에 기다리는 시간."30s"또는"1h"같은 레이블 접미사로 지정돼요. 지연은 1초보다 작을 수 없어요. 더 낮은 값은unlimited=true와 결합되면, 밑에 있는 태스크가 어디에 배치되든 시작할 수 없을 때 폭주하는 재스케줄링 이벤트를 유발할 수 있어요. -
delay_function(string: <varies>)- 후속 재스케줄링 지연을 계산하는 데 사용되는 함수. 초기 지연은 delay 매개변수로 지정돼요.delay_function은 아래에 설명된 세 가지 가능한 값이 있어요.constant- 재스케줄링 시도 사이의 지연이delay값으로 일정하게 유지돼요.exponential- 재스케줄링 시도 사이의 지연이 두 배가 돼요.fibonacci- 재스케줄링 시도 사이의 지연은 적용된 가장 최근 두 지연을 더해 계산돼요. 예를 들어delay가 5초로 설정되면 다음 5번의 재스케줄링 시도는 각각 5초, 5초, 10초, 15초, 25초로 지연돼요.
-
max_delay(string: <varies>)- 지연의 상한으로, 이 이상으로는 증가하지 않아요. 이 매개변수는delay_function이exponential또는fibonacci일 때 사용되고,constant지연이 사용될 때는 무시돼요. -
unlimited(boolean:<varies>)-unlimited는 무제한 재스케줄링 시도를 활성화해요. 이것이true로 설정되면attempts와interval필드는 사용되지 않아요. 이것이true로 설정될 때 update 블록 안의progress_deadline매개변수는 여전히 준수되어,progress_deadline에 도달하면 더 이상 재스케줄링 시도가 트리거되지 않아요.
재스케줄링 시도에 대한 정보는 CLI와 API의 할당에 표시돼요. 아래에 표시된 옵션으로 service와 batch 잡에 대해 재스케줄링이 기본 활성화돼요.
매개변수 기본값 (Parameter defaults)
reschedule 매개변수 값은 잡 타입에 따라 달라져요. 아래는 잡 타입별 기본값이에요:
- 기본 batch 재스케줄링 정책:
reschedule {
attempts = 1
interval = "24h"
unlimited = false
delay = "5s"
delay_function = "constant"
}
- 기본 service 재스케줄링 정책:
reschedule {
delay = "30s"
delay_function = "exponential"
max_delay = "1h"
unlimited = true
}
재스케줄링 비활성화 (Disabling rescheduling)
재스케줄링을 비활성화하려면 attempts 매개변수를 0으로 설정하고 unlimited를 false로 설정하면 돼요.
job "docs" {
group "example" {
reschedule {
attempts = 0
unlimited = false
}
}
}