잡 스펙의 `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"
  }
}

더 알아보기 (Learn more)