잡 스펙의 `restart` 블록
잡 스펙의 restart 블록
restart 블록은 태스크 실패 시 태스크의 동작을 구성해요. 재시작은 태스크를 실행 중인 클라이언트에서 발생해요. 재시작은 태스크가 재시작 시도를 소진했을 때 발생하는 재스케줄링과 다르다는 점을 유의하세요.
출처: 문서
본문
| 배치 | job -> group -> **restart** |
|---|---|
job -> group -> task -> **restart** |
job "docs" {
group "example" {
restart {
attempts = 3
delay = "30s"
}
}
}
그룹 레벨에서 지정하면 그 구성은 사이드카 태스크를 포함해 그룹의 모든 태스크에 상속돼요. 태스크에도 있으면 그 정책은 감싸는 태스크 그룹의 재시작 정책과 병합돼요.
예를 들어 태스크 그룹 재시작 정책이 다음과 같다고 가정해요:
restart {
interval = "30m"
attempts = 2
delay = "15s"
mode = "fail"
render_templates = true
}
그리고 개별 태스크 재시작 정책이 다음과 같다고 가정해요:
restart {
attempts = 5
}
그러면 태스크의 효과적인 재시작 정책은 다음과 같아요:
restart {
interval = "30m"
attempts = 5
delay = "15s"
mode = "fail"
render_templates = true
}
사이드카 태스크는 restart 블록을 받지 않으므로, 사이드카 태스크가 있는 잡은 태스크 레벨에서 restart를 설정해서 Connect 사이드카가 기본 restart를 상속하도록 하는 것이 권장돼요.
매개변수 (Parameters)
-
attempts(int: <varies>)- 구성된 간격 안에서 허용되는 재시작 수. 기본값은 잡 타입에 따라 다르며 아래를 참고하세요. -
delay(string: "15s")- 태스크를 재시작하기 전에 기다리는 시간."30s"또는"1h"같은 레이블 접미사로 지정돼요. 지연에 최대 25%의 무작위 지터가 추가돼요. -
interval(string: <varies>)- 첫 번째 태스크가 시작될 때 시작되는 기간. 그 안에서attempts만큼의 재시작만 발생하도록 보장해요.attempts보다 많은 실패가 발생하면 동작은mode에 의해 제어돼요."30s"또는"1h"같은 레이블 접미사로 지정돼요. 기본값은 잡 타입에 따라 다르며 아래를 참고하세요. -
mode(string: "fail")- 태스크가 간격 안에서attempts보다 많이 실패할 때의 동작을 제어. 이 값들과 그 동작에 대한 자세한 설명은 mode 값 섹션을 참고하세요. -
render_templates(bool: false)- 태스크가 재시작될 때 모든 템플릿을 다시 렌더링할지 여부.true로 설정하면 태스크 재시작 시 모든 템플릿이 다시 렌더링돼요. 이는 기존 시크릿의 임대 기간이 아직 만료되지 않았더라도 Vault 시크릿을 다시 가져오는 데 유용할 수 있어요.
매개변수 기본값 (Parameter defaults)
많은 restart 매개변수의 값은 잡 타입에 따라 달라져요. 잡 타입별 기본값:
- 기본 batch 재시작 정책:
restart {
attempts = 3
delay = "15s"
interval = "24h"
mode = "fail"
render_templates = false
}
- 기본 service 및 system 잡 재시작 정책:
restart {
interval = "30m"
attempts = 2
delay = "15s"
mode = "fail"
render_templates = false
}
재시작 비활성화 (Disabling restart)
재시작을 비활성화하려면 attempts 매개변수를 0으로 설정하고 mode를 "fail"로 설정하면 돼요.
job "docs" {
group "example" {
restart {
attempts = 0
mode = "fail"
}
}
}
mode 값 (mode values)
이 섹션은 제약 조건에 대한 Nomad 잡 스펙의 "mode" 매개변수의 특정 값을 자세히 설명해요. mode는 항상 문자열로 지정돼요:
restart {
mode = "..."
}
-
"delay"- 태스크를 재시작하기 전에 또 다른interval까지 기다리도록 클라이언트에 지시. -
"fail"-attempts수가 사용된 후 태스크 재시작을 시도하지 않도록 클라이언트에 지시. 이것이 기본 동작이에요. 이 모드는 몇 번 실패 후 성공할 가능성이 낮은 비멱등(non-idempotent) 잡에 유용해요. 할당은 failed로 표시되고 스케줄러는reschedule블록에 따라 할당을 재스케줄링하려고 시도해요.
예시 (Examples)
다음 restart 블록에서 실패하는 태스크는 시도 사이에 15초 간격으로 3번 재시작된 다음, 10분을 기다린 후 또 3번 시도해요. 태스크 재시작은 결코 전체 할당을 실패시키지 않아요.
restart {
attempts = 3
delay = "15s"
interval = "10m"
mode = "delay"
}
다음 restart 블록에서 1분 후, 2분 후, 3분 후 실패하는 태스크는 매번 재시작돼요. 10분 전에 다시 실패하면 전체 할당이 failed로 표시되고 스케줄러가 그룹의 reschedule 스펙을 따라 새 평가가 발생할 수 있어요.
restart {
attempts = 3
delay = "15s"
interval = "10m"
mode = "fail"
}