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

더 알아보기 (Learn more)