잡 스펙의 `group` 블록
잡 스펙의 group 블록
group 블록은 같은 Nomad 클라이언트에 함께 배치(co-located)되어야 하는 일련의 태스크를 정의해요. 그룹 안의 어떤 태스크든 같은 클라이언트에 배치돼요.
출처: 문서
본문
| 배치 | job -> **group** |
|---|
job "docs" {
group "example" {
# ...
}
}
매개변수 (Parameters)
-
constraint([Constraint]: nil)- 추가 제약 조건을 정의하기 위해 여러 번 제공할 수 있어요. -
affinity([Affinity]: nil)- 선호하는 배치 기준을 정의하기 위해 여러 번 제공할 수 있어요. -
spread([Spread]: nil)- 노드 속성 또는 메타데이터 전반에 걸쳐 할당을 분산하는 기준을 정의하기 위해 여러 번 제공할 수 있어요. 자세한 내용은 Nomad spread 레퍼런스를 참고하세요. -
count(int)- 이 그룹 아래 실행되어야 하는 인스턴스 수. 이 값은 음수가 아니어야 해요. 기본값은scaling블록에 지정된min값이고, 없으면1이에요. -
consul([Consul]: nil)- 그룹에 특화된 Consul 설정 옵션. 태스크가 자체consul블록을 갖고 있지 않는 한 이 옵션은 그룹의 모든 태스크와 서비스에 적용돼요. -
ephemeral_disk([EphemeralDisk]: nil)- 그룹의 임시 디스크 요구 사항. 임시 디스크는 sticky로 표시할 수 있고 라이브 데이터 마이그레이션을 지원해요. -
disconnect([disconnect]: nil)- 네트워크 분할이 발생했을 때 이 그룹의 모든 태스크에 대해 서버와 클라이언트의 disconnect 전략을 지정해요. 클라이언트가 연결을 끊으면 태스크는 연결되지 않은 채로 두거나, 중지하거나, 교체할 수 있어요. 클라이언트가 연결을 되찾은 경우의 재조정 정책도 여기 지정돼요. -
max_run_duration(string: "")- 이 그룹의 각 할당이 실행될 수 있는 최대 기간.batch와sysbatch잡에서만 유효해요. 이 기간을 초과하면 그룹의 모든 태스크가 종료되고 할당이 클라이언트 설명allocation exceeded max_run_duration과 함께complete로 표시돼요.
타이머는 개별 태스크 상태와 무관하게 클라이언트에서 할당이 생성되는 즉시 시작돼요. 따라서 구성된 타임아웃보다 시작에 더 오래 걸리는 태스크도 종료돼요 — 이미지나 아티팩트 다운로드를 끝내지 못한 할당도 포함이에요.
prestart와 poststart 라이프사이클 태스크 실행 시간은 max_run_duration에 포함돼요. 이 타임아웃으로 할당이 중지되면 poststop 태스크는 시작되지 않아요.
태스크 재시작은 타이머를 초기화하지 않아요 — 데드라인이 정해지면 잡 업데이트에서 max_run_duration 자체가 바뀌지 않는 한 다시 계산되지 않아요. 따라서 모든 재시작 시도는 같은 예산에서 시간을 소비해요. Nomad 클라이언트 프로세스가 카운트다운 도중 재시작되면, 각 태스크 러너의 보존된 StartedAt 타임스탬프에서 원래 데드라인이 재구성되어 남은 예산이 초기화되는 대신 존중돼요.
타임아웃이 발생하면 할당은 failed가 아니라 complete로 표시되므로 그룹의 reschedule 정책이 트리거되지 않아요. 할당이 독립적인 이유로 재스케줄링되면(예: 타임아웃 전 노드 실패), 교체 할당은 0부터 자체 max_run_duration 타이머를 시작해요.
-
meta([Meta]: nil)- 사용자 정의 메타데이터로 주석을 다는 키-값 맵. -
migrate([Migrate]: nil)- 드레이닝 중인 노드에서 마이그레이션하는 그룹 전략. count가 1보다 큰 서비스 잡만 migrate 블록을 지원해요. -
network([Network]: <optional>)- 그룹의 네트워크 요구 사항과 설정(정적·동적 포트 할당 포함). -
reschedule([Reschedule]: nil)- 재스케줄링 전략을 지정할 수 있게 해요. 그룹 할당 상태 중 하나가 "failed"가 되면 Nomad가 다른 노드에 태스크를 스케줄링하려고 시도해요. -
restart([Restart]: nil)- 이 그룹의 모든 태스크 재시작 정책. 생략하면 잡 타입별 기본 정책이 있으며, restart 블록 문서에서 찾을 수 있어요. -
service([Service]: nil)- Nomad 또는 Consul과의 서비스 디스커버리 통합. Nomad는 할당이 시작될 때 각 서비스를 자동으로 등록하고, 할당이 파괴될 때 등록을 해제해요. -
shutdown_delay(string: "0s")- 그룹 태스크를 중지할 때 기다리는 시간. 이 지연은 Consul 또는 Nomad 서비스 등록 해제와 각 태스크에 종료 신호를 보내는 사이에 발생해요. 이상적으로는 서비스가 종료 신호를 받으면 헬스 체크에 실패해야 해요. 반대로shutdown_delay는 종료 전에 진행 중인 요청이 완료될 시간을 주기 위해 설정할 수도 있어요. 그룹 레벨shutdown_delay는 그룹 서비스가 정의되어 있는지와 무관하게 실행되고, 이 서비스에만 적용돼요. 또한 태스크는 태스크 서비스 등록 해제와 태스크 중지 사이에 기다리는 자체shutdown_delay를 가질 수 있어요. -
task([Task]: <required>)- 이 그룹 안에서 실행할 태스크 하나 이상. 그룹의 일부로 태스크를 추가하기 위해 여러 번 지정할 수 있어요. -
update([Update]: nil)- 태스크의 업데이트 전략. 생략하면 기본 업데이트 전략이 적용돼요. -
vault([Vault]: nil)- 이 그룹의 모든 태스크가 필요로 하는 Vault 정책 묶음.job레벨에 설정된vault블록을 덮어써요. -
volume([Volume]: nil)- 그룹 안의 태스크가 필요로 하는 볼륨.
예시 (Examples)
다음 예시는 group 블록만 보여줘요. group 블록은 위에 나열된 배치에서만 유효하다는 점을 기억하세요.
count 지정 (Specifying Count)
이 예시는 이 그룹 안의 태스크 인스턴스 5개가 실행되어야 함을 지정해요:
group "example" {
count = 5
}
제약 조건이 있는 태스크 (Tasks with constraint)
이 예시는 그룹에 제약 조건이 있는 두 개의 축약된 태스크를 보여줘요. 태스크를 64비트 운영체제로 제한해요.
group "example" {
constraint {
attribute = "${attr.cpu.arch}"
value = "amd64"
}
task "cache" {
# ...
}
task "server" {
# ...
}
}
메타데이터 (Metadata)
이 예시는 그룹에 임의의 사용자 정의 메타데이터를 보여줘요:
group "example" {
meta {
my-key = "my-value"
}
}
네트워크 (Network)
이 예시는 bridge 네트워킹 모드를 사용하고 두 포트를 동적으로, 한 포트를 정적으로 할당하는 network 블록의 네트워크 제약 조건을 보여줘요:
group "example" {
network {
mode = "bridge"
port "http" {}
port "https" {}
port "lb" {
static = "8889"
}
}
}
서비스 디스커버리 (Service discovery)
이 예시는 Consul에 서비스를 만들어요. Nomad에서 서비스 디스커버리에 대해 더 읽으려면 Nomad 서비스 디스커버리 문서를 참고하세요.
group "example" {
network {
port "api" {}
}
service {
name = "example"
port = "api"
tags = ["default"]
check {
type = "tcp"
interval = "10s"
timeout = "2s"
}
}
task "api" { ... }
}