잡 스펙의 `multiregion` 블록
잡 스펙의 multiregion 블록
multiregion 블록은 잡이 여러 연합 region에 배포될 것임을 지정해요. 생략하면 잡은 단일 region—region 필드 또는 nomad job run의 -region 커맨드 라인 플래그로 지정된 region—에 배포돼요.
출처: 문서
본문
| 배치 | job -> **multi-region** |
|---|
Enterprise
이 기능은 Nomad Enterprise(새 탭에서 열림)가 필요해요.
연합 Nomad 클러스터는 같은 gossip 클러스터의 구성원이지만 같은 raft 클러스터는 아니에요. 즉 데이터 저장소를 공유하지 않아요. 멀티 region 배포의 각 region은 region 블록의 값으로 파라미터화된 잡의 독립적인 복사본을 얻어요. Nomad region들은 strategy 블록이 결정하는 규칙으로 각 region 배포의 롤아웃을 조정해요.
job "docs" {
multiregion {
strategy {
max_parallel = 1
on_failure = "fail_all"
}
region "west" {
count = 2
datacenters = ["west-1"]
meta {
my-key = "my-value-west"
}
}
region "east" {
count = 5
datacenters = ["east-1", "east-2"]
meta {
my-key = "my-value-east"
}
}
}
}
멀티 region 배포 상태 (Multi-region deployment states)
여러 업그레이드 전략 중 하나를 사용하는 단일 region 배포는 running 상태로 시작하고, successful 상태, canceled 상태(다른 배포가 완료되기 전에 그것을 대체하는 경우), 또는 failed 상태로 끝나요. 실패한 단일 region 배포는 update 블록에 auto_revert 설정이 있으면 잡의 이전 버전으로 자동 되돌아갈 수 있어요.
멀티 region 배포에서 region들은 pending 상태로 시작해요. 이렇게 해서 Nomad는 계속 진행하기 전에 모든 region이 잡을 수락했는지 확인할 수 있어요. 이 시점에서 최대 max_parallel region이 한 번에 running에 들어가요. 각 region이 로컬 배포를 완료하면 마지막 region이 배포를 완료할 때까지 기다리는 blocked 상태에 들어가요. 마지막 region이 region들을 차단 해제해 successful로 표시해요.
파라미터화된 디스패치 (Parameterized dispatch)
잡 디스패치는 region별로 달라요. 파라미터화된 잡은 다른 잡처럼 여러 연합 region에 등록될 수 있지만, 변수 입력을 받는 함수 정의처럼 동작해요. 운영자는 CLI의 job dispatch 또는 HTTP API를 호출해 그 region에 적절한 디스패치 옵션을 제공해 잡을 호출해야 해요.
주기적 시간대 (Periodic time zones)
멀티 region 주기적 잡은 시간대 설정을 공유하며, 기본은 UTC예요. 운영자는 멀티 region 잡을 등록할 때 이걸 염두에 둬야 해요. 예를 들어 잡이 매일 뉴욕 시간 자정에 실행되어야 한다고 지정하는 주기적 설정은, 대상 region 중 하나가 도쿄 시간으로 설정되어 있으면 바람직하지 않은 실행 시간을 초래할 수 있어요.
매개변수 (Parameters)
-
strategy([Strategy]: nil)- region들의 롤아웃 전략을 지정. -
region([Region]: nil)- 특정 region의 매개변수. 멀티 region 배포의 region 집합을 정의하기 위해 여러 번 지정할 수 있어요. Region은 순서가 있으며, 롤아웃 전략에 따라 Nomad가 각 region에 순서대로 또는 여러 개씩 한 번에 롤아웃할 수 있어요.
참고: Region은 추가할 수 있지만, 제거된 region은 중지되지 않으며 배포에 의해 무시돼요. 이 동작은 멀티 region 배포가 GA로 간주되기 전에 바뀔 수 있어요.
strategy 매개변수
-
max_parallel(int: <optional>)- 멀티 region이 한 번에 running 상태로 가질 수 있는 region 배포 최대 수. 기본적으로 Nomad는 모든 region을 동시에 배포해요. -
on_failure(string: <optional>)- region 배포가 실패할 때의 동작. 사용 가능한 옵션은"fail_all","fail_local", 또는 기본값(빈"")이에요. 이 필드와 잡의update블록과의 상호작용은 아래 예시에서 설명돼요.
멀티 region 배포 안의 각 region은 자체 update 블록(있으면)의 auto_revert 전략을 따르는 것은 아니에요. 멀티 region on_failure 필드는 한 region 배포가 실패할 때 다른 region 몇 개가 failed로 표시되어야 하는지 Nomad에 알려줘요:
-
기본 동작은 실패한 region과 그 뒤에 순서상 오는 모든 region이 failed로 표시되는 것이에요.
-
on_failure: "fail_all"이 설정되면 모든 region이 failed로 표시돼요. 모든 region이 이미 배포를 완료했다면, 한 region이 실패하는 동안 다른 region이blocked에서successful로 전환될 수 있어요. 이 successful region은 롤백할 수 없어요. -
on_failure: "fail_local"이 설정되면 실패한 region만 failed로 표시돼요. 나머지 region은blocked상태로 진행돼요. 이 시점에서nomad deployment unblock명령으로 region을 수동으로 차단 해제해 successful로 표시하거나, 실패 원인이 된 조건을 고친 후 잡을 다시 제출해야 해요.
system 잡의 경우 max_parallel만 적용돼요. system 스케줄러는 향후 릴리스에서 system 잡에 update 블록이 완전히 지원될 때 on_failure를 지원하도록 업데이트될 거예요.
region 매개변수
region의 이름은 연합 region 중 하나의 이름과 일치해야 해요.
-
count(int: <optional>)- region의 태스크 그룹에 대한 count 오버라이드. 태스크 그룹이count = 0을 지정하면 그 count가 이 값으로 대체돼요. 태스크 그룹이 자체count를 지정하거나count필드를 생략하면 이 값은 무시돼요. 이 값은 음수가 아니어야 해요. -
datacenters(array<string>: <optional>)- 태스크 배치에 적합한 region의 데이터센터 목록. 제공되지 않으면 잡의datacenters필드가 사용돼요. -
node_pool(string: <optional>)- 이 region에서 사용할 노드 풀. 잡 레벨node_pool과 네임스페이스 기본 노드 풀을 덮어써요. -
meta-Meta: nil- 사용자 정의 임의의 키-값 쌍을 허용하는 meta 블록. 각 region에 지정된 meta는 잡 레벨의 meta 블록과 병합돼요.
위에서 설명한 대로, 각 region의 매개변수는 같은 이름을 가진 필드의 기본값을 각 region에 대해 대체해요.
예시 (Examples)
다음 예시는 multi-region 블록과 그것이 상호작용할 수 있는 다른 블록만 보여줘요.
Max parallel
이 예시는 max_parallel의 사용을 보여줘요. 이 잡은 먼저 "north"와 "south" region에 배포돼요. "north"가 완료되고 blocked 상태에 들어가면 "east"가 다음이 돼요. 주어진 시점에 최대 2개의 region이 running 상태가 돼요.
multi-region {
strategy {
max_parallel = 2
}
region "north" {}
region "south" {}
region "east" {}
region "west" {}
}
Region 롤백 (Rollback regions)
이 예시는 on_failure의 기본값을 보여줘요. max_parallel = 1이므로 "north" region이 먼저 배포되고 그다음 "south" 등이 이어져요. 하지만 "east" region이 실패했다고 가정하면 "east"와 "west" region 모두 failed로 표시돼요. 잡에 auto_revert=true인 update 블록이 있으므로 두 region 모두 이전 잡 버전으로 롤백돼요. "north"와 "south" region은 운영자가 개입할 때까지 blocked 상태로 남아요.
multiregion {
strategy {
on_failure = ""
max_parallel = 1
}
region "north" {}
region "south" {}
region "east" {}
region "west" {}
}
update {
auto_revert = true
}
count 오버라이드 (Override counts)
이 예시는 count 필드가 태스크 그룹의 기본 count를 덮어쓰는 방법을 보여줘요. 이 잡은 "west" region에 "worker" 2개와 "controller" 1개 할당을, "east" region에 "worker" 5개와 "controller" 1개 태스크 그룹을 배포해요.
multiregion {
region "west" {
count = 2
}
region "east" {
count = 5
}
}
group "worker" {
count = 0
}
group "controller" {
count = 1
}
meta 병합 (Merging meta)
이 예시는 meta가 잡, 그룹, 태스크의 meta 필드와 병합되는 방법을 보여줘요. "west"의 태스크는 first-key="regional-west", second-key="group-level" 값을 갖고, "east"의 태스크는 first-key="job-level", second-key="group-level" 값을 갖게 돼요.
multiregion {
region "west" {
meta {
first-key = "regional-west"
second-key = "regional-west"
}
}
region "east" {
meta {
second-key = "regional-east"
}
}
}
meta {
first-key = "job-level"
}
group "worker" {
meta {
second-key = "group-level"
}
}