잡 스펙의 `job` 블록
잡 스펙의 job 블록
job 블록은 잡 스펙에서 최상위 설정 옵션이에요. 잡은 Nomad가 실행해야 할 태스크에 대한 선언적 명세예요. 잡은 하나 이상의 태스크 그룹을 가지며, 태스크 그룹은 다시 하나 이상의 태스크 모음이에요. 잡 이름은 region 또는 namespace마다 고유해요.
출처: 문서
본문
| 배치 | **job** |
|---|
job "docs" {
constraint {
# ...
}
datacenters = ["us-east-1"]
node_pool = "prod"
group "example" {
# ...
task "docs" {
# ...
}
}
meta {
my-key = "my-value"
}
parameterized {
# ...
}
periodic {
# ...
}
priority = 100
region = "north-america"
update {
# ...
}
}
매개변수 (Parameters)
-
all_at_once(bool: false)- 낙관적 스케줄링 결과로 노드가 초과 구독되었을 때 스케줄러가 부분 배치를 할 수 있는지 제어. 이건 잡의 모든 할당(각 태스크 그룹의 원하는 count가 모두)이 원자적으로 배치되어야 하는지를 제어하는 게 아니에요. 특별한 상황에서만 사용해야 해요. -
constraint([Constraint]: nil)- 추가 제약 조건을 정의하기 위해 여러 번 제공할 수 있어요. 자세한 내용은 Nomad constraint 레퍼런스를 참고하세요. -
affinity([Affinity]: nil)- 선호하는 배치 기준을 정의하기 위해 여러 번 제공할 수 있어요. 자세한 내용은 Nomad affinity 레퍼런스를 참고하세요. -
spread([Spread]: nil)- 노드 속성 또는 메타데이터 전반에 걸쳐 할당을 분산하는 기준을 정의하기 위해 여러 번 제공할 수 있어요. 자세한 내용은 Nomad spread 레퍼런스를 참고하세요. -
datacenters(array<string>: ["*"])- 태스크 배치에 적합한 region의 데이터센터 목록. 이 필드는*를 사용한 와일드카드 글로빙(문자 여러 개 매칭)을 허용해요. 기본값은["*"]로, 잡을 사용 가능한 모든 데이터센터에 배치할 수 있어요. -
node_pool(string: <optional>)- 잡을 배치할 노드 풀. 잡 등록 시 노드 풀이 존재해야 해요. 기본값은"default". -
group([Group]: <required>)- 태스크 그룹의 시작을 지정. 추가 그룹을 정의하기 위해 여러 번 제공할 수 있어요. 그룹 이름은 잡 파일 안에서 고유해야 해요. -
meta([Meta]: nil)- 사용자 정의 메타데이터로 주석을 다는 키-값 맵. -
name(string: <optional>)- 잡에 이름을 지정. 기본값은 잡 ID. -
migrate([Migrate]: nil)- 드레이닝 중인 노드에서 마이그레이션하는 그룹 전략. 생략하면 기본 마이그레이션 전략이 적용돼요. count가 1보다 큰 서비스 잡만 migrate 블록을 지원해요. -
namespace(string: "default")- 잡을 실행할 네임스페이스. -
parameterized([Parameterized]: nil)- 잡을 파라미터화된 잡으로 지정해 디스패치할 수 있게 함. -
periodic([Periodic]: nil)- 잡을 고정된 시간, 날짜 또는 간격으로 스케줄링할 수 있게 허용. -
priority(int: 50)- 스케줄링과 리소스 접근의 우선순위를 정하는 데 사용되는 잡 우선순위. 1과job_max_priority사이(포함)여야 하고, 값이 클수록 우선순위가 높아요. 값 0이 제공되면job_default_priority로 폴백해요. 우선순위는 잡 선점(preemption)이 활성화될 때만 효과가 있어요. 대기 중인 여러 잡 중 어느 것을 먼저 실행할지에는 영향이 없어요. -
region(string: "global")- 잡을 실행할 region. -
reschedule([Reschedule]: nil)- 재스케줄링 전략을 지정할 수 있게 허용. 그런 다음 Nomad는 할당 상태 중 하나가 "failed"가 되면 다른 노드에 태스크를 스케줄링하려고 시도해요. -
type(string: "service")- 사용할 Nomad 스케줄러를 지정. Nomad는service,system,batch,sysbatch스케줄러를 제공해요. -
update([Update]: nil)- 태스크의 업데이트 전략. 생략하면 기본 업데이트 전략이 적용돼요. -
vault([Vault]: nil)- 이 잡의 모든 태스크가 필요로 하는 Vault 정책 묶음.
예시 (Examples)
다음 예시는 job 블록만 보여줘요. job 블록은 위에 나열된 배치에서만 유효하다는 점을 기억하세요.
Docker 컨테이너 (Docker container)
이 예시 잡은 서비스로 실행되는 Docker 컨테이너를 시작해요. type이 "service"로 지정되지 않았지만 그것이 기본 잡 타입이에요.
job "docs" {
group "example" {
task "server" {
driver = "docker"
config {
image = "hashicorp/http-echo"
args = ["-text", "hello"]
}
resources {
memory = 128
}
}
}
}
배치 잡 (Batch job)
이 예시 잡은 fleet의 Nomad 클라이언트 10개에서 uptime 명령을 실행하고, 적격 노드를 Linux 머신으로 제한해요.
job "docs" {
type = "batch"
constraint {
attribute = "${attr.kernel.name}"
value = "linux"
}
group "example" {
count = 10
task "uptime" {
driver = "exec"
config {
command = "uptime"
}
}
}
}
시크릿 사용 (Consuming secrets)
이 예시는 Vault에서 시크릿을 가져와 그 시크릿을 디스크의 파일에 쓰고, 애플리케이션이 이를 사용하는 잡을 보여줘요. Nomad가 Vault와의 모든 상호작용을 처리해요.
job "docs" {
group "example" {
task "cat" {
driver = "exec"
config {
command = "cat"
args = ["local/secrets.txt"]
}
template {
data = "{{ secret \"secret/data\" }}"
destination = "local/secrets.txt"
}
vault {
policies = ["secret-readonly"]
}
}
}
}
이 잡을 제출할 때는 다음을 실행하면 돼요:
$ VAULT_TOKEN="..." nomad job run example.nomad.hcl