Nomad 잡(Job) 이해하기

Nomad 잡(Job) 이해하기

잡은 Nomad의 핵심 워크로드 단위예요. 여러분의 앱이나 유지보수 스크립트, cron 작업처럼 실행하고 싶은 것을 잡으로 선언하면, Nomad가 그 상태를 실제로 만들어 줘요. 잡은 "어디에" 실행할지는 신경 쓰지 않고 "무엇을" 실행할지만 정하면 돼요. 잡 상태와 버전 관리가 어떻게 이뤄지는지도 함께 살펴볼게요.

출처: Hashicorp 공식 문서 - Nomad Job

본문

배경

Nomad에서 **잡(Job)**은 워크로드에 대한 사용자가 정의한 상태예요. 사용자는 "어떤 잡이 실행 중이어야 한다"만 표현하고, "어디에 실행돼야 한다"는 Nomad가 정해요. Nomad가 리소스를 할당하고 실제 상태가 사용자가 원하는 상태와 일치하도록 보장하죠. 잡은 하나 이상의 태스크로 구성되며, 이 태스크들을 태스크 그룹으로 묶을 수 있어요.

잡의 원하는 상태는 잡 스펙(job specification), 줄여서 jobspec 에 선언해요. 이 스펙에는 잡을 실행하는 데 필요한 태스크와 리소스가 담기고, 잡을 어느 클라이언트에서 실행할지 제어하는 제약 조건(constraint)도 넣을 수 있어요.

잡 스펙을 제출하면 Nomad가 자동으로 리소스를 할당해 잡을 실행해요. 또 실제 잡 상태가 여러분이 원하는 상태와 일치하는지도 Nomad가 계속 확인해 줘요.

잡 상태(Job statuses)

잡을 제출하면 Nomad가 잡이 어떻게 수행되고 있는지를 나타내는 상태를 부여해요. 이 상태는 현재 잡의 할당이 원하는 잡 상태와 어떻게 비교되는지를 보여줘요.

Nomad는 잡의 상태를 설명할 때 다음 값 중 하나를 사용해요:

  • dead
  • running

CLI는 소모적(scheduling)·가비지 컬렉션에 유용한 이 고정 상태를 반환해요. 반면 Nomad UI는 잡을 관리하기 쉽도록 사람이 읽을 수 있는 추가 상태를 표시해요.

다음 표는 CLI 상태와 Nomad UI에 나타나는 상태를 매핑한 거예요.

CLI status UI status
dead Complete, Failed, Scaled Down
dead (stopped) Stopped
running Degraded, Deploying, Healthy, Recovering, Running, Scaled Down

CLI 상태

CLI만 반환하는 잡 상태예요.

running

running 상태는 잡에 종결되지 않은(non-terminal) 할당이 있음을 나타내요.

dead

dead 상태는 모든 평가(evaluation)와 할당이 종결 상태(terminal state)임을 나타내요.

dead (stopped)

dead (stopped) 상태는 사용자가 잡을 수동으로 중지했음을 나타내요. 이 잡은 다시 시작할 수 있어요.

UI 상태

이 잡 상태들은 Nomad UI에서만 나타나요.

Complete

Complete 상태는 예상된 모든 할당이 완료되었음을 나타내요. 이 상태는 batch와 sysbatch 잡에만 적용돼요.

Degraded

Degraded 상태는 디플로이먼트가 진행되고 있지 않음을 나타내요. 일부 할당이 실패했거나, 유실되었거나, 배치되지 않았어요.

Deploying

Deploying 상태는 디플로이먼트가 활발히 진행 중임을 나타내요.

Failed

Failed 상태는 모든 할당이 실패했거나, 유실되었거나, 배치되지 않았음을 나타내요.

Healthy

Healthy 상태는 예상된 모든 할당이 실행 중이고 정상임을 나타내요.

Recovering

Recovering 상태는 일부 할당이 대기 중(pending)임을 나타내요.

Removed

Removed 상태는 잡이 초기 쿼리에는 나타났지만 그 사이 가비지 컬렉터가 잡을 제거했음을 나타내요. 사용자가 페이지에 오래 머물러 있을 때 발생해요.

Running

Running 상태는 예상된 모든 할당이 실행 중임을 나타내요. 이 상태는 batch와 sysbatch 잡에만 적용돼요.

Scaled Down

Scaled Down 상태는 사용자가 모든 할당을 0으로 스케일했음을 나타내요. Nomad의 가비지 컬렉터가 아직 잡을 제거하거나 정리(purge)하지는 않았어요.

Stopped

Stopped 상태는 사용자가 잡을 수동으로 중지했음을 나타내요. Nomad의 가비지 컬렉터가 아직 잡을 제거하거나 정리하지는 않았어요.

잡 버전(Job versions)

잡을 실행할 때마다 Nomad는 잡의 새 버전을 만들어요. 잡 버전 수에는 제한이 없고, 버전 이력은 상태(state)에 저장돼요. 시간이 지나면 Nomad는 버전 태그가 없는 죽은 버전들을 가비지 컬렉션해요.

버전에 태그 달기

특정 버전을 저장하거나 고정(pin)하고 싶을 때는 고유한 이름과 선택적 설명이 있는 버전 태그를 만들어요. Nomad는 태그된 버전이 죽은 상태여도 가비지 컬렉션하지 않아요. 그래서 태그된 버전이 아무리 오래됐어도 이전 버전으로 되돌릴 수 있어요.

CLI, API, 웹 UI에서 태그를 만들고, 수정하고, 제거할 수 있어요. 예시는 Job versions 가이드를 참고해요.

버전 비교하기

현재 잡 버전을 모든 이전 버전이나 특정 버전과 비교할 수 있어요. 또 특정 두 버전을 서로 비교할 수도 있어요.

nomad job history 같은 명령을 실행해 과거 잡 버전과 직전 버전 간의 차이를 볼 수 있어요. 또 nomad job plan을 실행하면 업데이트가 현재 잡 버전에 미칠 가상의 차이를 미리 볼 수 있어요.

예시는 Job versions 가이드의 Compare versions 섹션을 참고해요.

이전 버전으로 되돌리기

현재 실행 중인 잡을 이전 버전으로 되돌릴 수 있어요. Nomad가 실행 중인 잡을 중지하고, 새 버전 번호로 선택한 버전을 디플로이해요.

예시는 Job versions 가이드의 Revert to a version 섹션을 참고해요. CLI, API, 웹 UI가 모두 다뤄져요.

복제하고 편집하기

웹 UI에서 버전을 같은 잡의 새 버전으로, 또는 새로운 잡으로 복제할 수 있어요. 복제할 버전을 고른 뒤 새 버전을 편집·플랜·실행할 수 있어요.

Nomad가 쿼리 파라미터로 잡 버전 속성을 전달하기 때문에, 브라우저 주소창의 URL을 Jobs/Run 화면에서 복사해 편집 가능한 잡 스펙 링크를 공유할 수 있어요.

복제 예시는 Job versions 가이드의 Clone a version 섹션을 참고해요.

관련 자료

잡에 대해 더 알고 싶다면 다음 Nomad 문서 페이지를 참고해요:

  • 잡 스펙(job specification)에 상세 설정과 예시가 있어요.
  • Schedulers 페이지에서 Nomad가 지원하는 다양한 스케줄러와 그 스케줄러가 잡을 어떻게 실행하는지 설명해요.
  • 잡 선언(Declare jobs) 섹션에 잡 생성, 태스크 드라이버 사용, 디플로이먼트 전략 가이드가 있어요.

다음 튜토리얼 자료에는 다양한 종류의 잡과 설정 예시가 담겨 있어요:

  • Quick Start 튜토리얼에서 애플리케이션과 그 리소스를 디플로이하는 방법을 다뤄요. 여기엔 parameterized와 periodic 잡이 포함돼요.
  • Create Nomad Job Specifications 컬렉션에 Java 애플리케이션을 Nomad로 마이그레이션하는 가이드가 있어요.

더 알아보기