작업 버전 만들기 및 수정하기

작업 버전 만들기 및 수정하기 (Create and modify job versions)

Nomad는 작업을 실행할 때마다 작업에 대한 새 버전을 만들어요. 작업은 무제한의 버전을 가질 수 있고, 버전 기록은 상태에 저장돼요. 시간이 지나면서 Nomad는 버전 태그가 없는 죽은(dead) 버전을 가비지 컬렉션해요. 버전에 태그를 저장하면 Nomad가 해당 버전을 가비지 컬렉션하지 못하게 해요.

이 가이드는 다음 작업 버전 기능을 보여줘요:

  • 작업 버전 태그 생성, 수정, 삭제
  • 버전 비교
  • 시간이 얼마나 지났든 실행 중인 작업을 이전 버전으로 되돌리기
  • 버전 복제

출처: 문서

본문

전제 조건 (Prerequisites)

hello-world 작업 만들기 (Create the hello-world job)

예제는 Nomad의 작업 템플릿 중 하나인 hello-world라는 작업을 사용해요.

  1. Jobs 페이지에서 Run Job을 클릭해요.
  2. Choose from template을 클릭해요.
  3. Hello world를 선택해요.
  4. Apply를 클릭해요.
  5. Plan을 클릭해요.
  6. Job Plan 출력을 검토해요.
  7. Run을 클릭해 hello-world 작업을 실행해요.

버전 태그 만들기 (Create a version tag)

버전 태그를 만들 때는 Nomad에 다음 속성을 제공해야 해요:

  • 태그 이름
  • 작업 이름
  • 버전 번호

다음 예제는 hello-world의 버전 0에 대해 golden-version이라는 태그를 만들어요. 태그에 대한 설명을 포함해요.

nomad job tag apply [options] <job_id> 명령을 사용해 태그를 만들어요.

$ nomad job tag apply -version 0 -name "golden-version" \
    -description "The version we can roll back to." \
    hello-world

Job version 0 tagged with name "golden-version"

버전 번호를 생략하면 Nomad가 최신 버전에 태그를 단다는 점에 유의하세요.

namespace 같은 일반 옵션을 포함하는 방법에 대한 자세한 내용은 job tag apply 명령 참조를 확인하세요.

메서드 경로 생성
POST /v1/job/:job_id/versions/:tag_name/tag application/json

이 예제는 Nomad API가 localhost:4646에서 접근 가능하다고 가정해요.

$ curl -X POST \
 localhost:4646/v1/job/hello-world/versions/golden-version/tag \
 -H "Content-Type: application/json" -d \
 '{"Version": 0, "Description": "The version we can roll back to."}'

JSON 응답은 다음 예제와 유사해요.

{
  "Name":"golden-version",
  "Description":"The version we can roll back to.",
  "TaggedTime":1728325495829793000,
  "Index":361,
  "LastContact":0,
  "KnownLeader":false,
  "NextToken":""}

경로와 페이로드 매개변수에 대한 자세한 내용은 Jobs HTTP API 작업 버전 태그 만들기 참조를 확인하세요.

  1. Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
  2. Versions를 클릭해요.
  3. 목록에서 Version #0을 찾아요.
  4. Tag this version을 클릭해요.
  5. Tag Name 필드에 golden version을 입력하고 Tag Description 필드에 The version we can roll back to.를 입력해요.
  6. Save를 클릭해요.

이제 버전 0에 golden-version 태그가 있어요.

CLI를 사용해 작업의 새 버전을 실행하고 해당 새 버전에 대한 태그를 만들 수 있어요. 다음 예제는 hello-world 작업의 새 버전을 실행하고 즉시 해당 버전에 태그를 달아요.

$ nomad job run hello-world.nomad.hcl && \
  nomad job tag apply -name "high-traffic-version" hello-world

==> 2024-10-08T14:42:30-05:00: Monitoring evaluation "90714134"
    2024-10-08T14:42:30-05:00: Evaluation triggered by job "hello-world"
    2024-10-08T14:42:31-05:00: Evaluation within deployment: "192ecea1"
    2024-10-08T14:42:31-05:00: Allocation "ec85c1bd" created: node "d6ee954e", group "servers"
    2024-10-08T14:42:31-05:00: Evaluation status changed: "pending" -> "complete"
==> 2024-10-08T14:42:31-05:00: Evaluation "90714134" finished with status "complete"
==> 2024-10-08T14:42:31-05:00: Monitoring deployment "192ecea1"
  ✓ Deployment "192ecea1" successful

    2024-10-08T14:42:48-05:00
    ID          = 192ecea1
    Job ID      = hello-world
    Job Version = 4
    Status      = successful
    Description = Deployment completed successfully

    Deployed
    Task Group  Desired  Placed  Healthy  Unhealthy  Progress Deadline
    servers     1        1       1        0          2024-10-08T14:52:46-05:00
Job version 1 tagged with name "high-traffic-version"

버전 태그 수정하기 (Modify a version tag)

다음 예제는 hello-world 작업의 golden-version 태그 이름과 설명을 모두 업데이트해요.

nomad job tag apply [options] <job_id> 명령을 사용해 태그의 속성을 수정해요.

$ nomad job tag apply -version 0 -name "golden-version-0" \
    -description "Low traffic version." \
    hello-world

Job version 0 tagged with name "golden-version-0"

namespace 같은 일반 옵션을 포함하는 방법에 대한 자세한 내용은 job tag apply 명령 참조를 확인하세요.

메서드 경로 생성
POST /v1/job/:job_id/versions/:tag_name/tag application/json

이 예제는 Nomad API가 localhost:4646에서 접근 가능하다고 가정해요.

$ curl -X POST \
 localhost:4646/v1/job/hello-world/versions/golden-version-0/tag \
 -H "Content-Type: application/json" -d \
 '{"Version": 0, "Description": "Low traffic version."}'

응답은 다음과 유사해요.

{
  "Name":"golden-version-0",
  "Description":"Low traffic version.",
  "TaggedTime":1728407951089465000,
  "Index":3460,
  "LastContact":0,
  "KnownLeader":false,
  "NextToken":""}

경로와 페이로드 매개변수에 대한 자세한 내용은 Jobs HTTP API 작업 버전 태그 만들기 참조를 확인하세요.

  1. Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
  2. Versions를 클릭해요.
  3. 목록에서 Version #0을 찾아요.
  4. golden-version을 클릭해요.
  5. 태그 이름과 설명을 편집해요.
  6. Save를 클릭해요.

버전 태그 삭제하기 (Delete a version tag)

다음 예제는 hello-world 작업에 연결된 golden-version 태그를 삭제해요.

nomad job tag unset -name "<tag_name>" <job_id>을 사용해 버전에서 태그를 삭제해요. 이 명령은 태그 이름과 작업 ID가 필요해요.

$ nomad job tag unset -name "golden-version" hello-world

removed from job "hello-world"

namespace 같은 일반 옵션을 포함하는 방법에 대한 자세한 내용은 job tag unset 명령 참조를 확인하세요.

메서드 경로 생성
DELETE /v1/job/:job_id/versions/:tag_name/tag application/json

이 예제는 Nomad API가 localhost:4646에서 접근 가능하다고 가정해요.

$ curl -X DELETE \
  localhost:4646/v1/job/hello-world/versions/golden-version/tag \
  -H "Content-Type: application/json"

응답은 다음과 유사해요.

{
  "Name":"",
  "Description":"",
  "TaggedTime":0,
  "Index":5135,
  "LastContact":0,
  "KnownLeader":false,
  "NextToken":""
}

경로와 페이로드 매개변수에 대한 자세한 내용은 Jobs HTTP API 작업 버전 태그 삭제 참조를 확인하세요.

  1. Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
  2. Versions를 클릭해요.
  3. 목록에서 Version #0을 찾아요.
  4. golden-version을 클릭해요.
  5. Delete를 클릭해 태그를 제거해요.

버전 비교하기 (Compare versions)

nomad job history -p 명령을 사용해 다른 작업 버전을 비교해요. -p 옵션은 각 버전과 가장 최근 버전의 차이를 표시해요. 다음 옵션도 있어요:

  • -diff-version: 비교할 작업의 버전 번호를 지정해요. -diff-tag 플래그와 상호 배타적이에요.
  • -diff-tag: 태그 이름으로 참조되는 비교할 작업 버전을 지정해요. 기본값은 최신 버전이에요. -diff-version과 상호 배타적이에요.

버전 기반 diff 보기 (Show diff based on a version)

nomad job history -p -diff-version <job_id> 명령은 모든 버전을 지정된 diff-version과 비교해요.

다음 예제는 모든 작업 버전을 버전 4와 비교해요.

$ nomad job history -p -diff-version=4 hello-world

두 특정 버전 사이의 diff도 수행할 수 있어요. 이 예제는 hello-world 작업의 버전 4를 버전 1과 비교해요.

$ nomad job history -p -version=4 -diff-version=1 hello-world

태그 기반 diff 보기 (Show diff based on a tag)

nomad job history -p -diff-tag <job_id> 명령은 모든 버전을 지정된 diff-tag와 비교해요.

다음 예제는 모든 작업 버전을 golden-version 이름으로 태그된 버전과 비교해요.

$ nomad job history -p -diff-tag="golden-version" hello-world

태그와 버전 번호 사이의 diff도 수행할 수 있어요. 다음 예제는 현재 버전 -version=4를 golden-version 태그가 붙은 버전과 비교해요.

$ nomad job history -p -version=4 -diff-tag="golden-version" hello-world

Version     = 4
Stable      = true
Submit Date = 2024-10-08T14:42:30-05:00
Tag Name    = high-traffic-version
Diff        =
+/- Job: "hello-world"
+/- Task Group: "servers"
  +   Network {
        Hostname: ""
        Mode:     ""
      + Dynamic Port {
        + HostNetwork: "default"
        + Label:       "www"
        + To:          "8002"
        }
      }
  -   Network {
        Hostname: ""
        Mode:     ""
      - Dynamic Port {
        - HostNetwork: "default"
        - Label:       "www"
        - To:          "8001"
        }
      }

Diffs 필드가 채워진 버전 목록을 얻을 수 있어요. 모든 버전을 특정 버전과 비교하려면 diff_version 조회 매개변수를 사용해요.

이 예제는 모든 버전을 버전 1과 비교해요.

$ curl -X GET \
  localhost:4646/v1/job/hello-world/versions?diffs=true&diff_version=1

자세한 내용과 완전한 예제는 Jobs HTTP API 작업 버전 목록 참조를 확인하세요.

작업 세부 정보의 Versions 탭은 버전 목록을 보여줘요.

두 가지 중요한 요소는 "1"로 표시된 Diff against 드롭다운과 "2"로 표시된 변경 사항 표시/숨기기 토글 이에요.

Diff against 드롭다운에는 UI가 버전을 서로 비교하는 방식을 바꾸는 버전 또는 태그가 포함돼요.

Diff against previous version 옵션은 각 버전이 목록의 이전 버전과의 차이를 표시한다는 뜻이에요. See Change 토글은 변경 수를 표시해요. See Change 화살표를 클릭해 실제 차이를 검토해요.

버전이나 태그를 선택하면 UI가 각 버전이 선택한 버전과 가진 차이를 자동으로 표시해요.

버전으로 되돌리기 (Revert to a version)

작업 태그를 사용해 현재 실행 중인 작업을 이전 버전으로 되돌릴 수 있어요.

다음 예제는 hello-world 작업의 버전을 특정 버전 번호나 태그 이름으로 되돌려요.

nomad job revert [options] <job_id> <version|tag> 명령을 사용해 현재 작업을 이전 버전으로 되돌려요.

이 예제는 작업을 버전 3으로 되돌려요.

$ nomad job revert hello-world 3

이 예제는 golden-version 태그가 있는 버전으로 작업을 되돌려요.

$ nomad job revert hello-world "golden-version"

더 많은 예제와 namespace 같은 일반 옵션을 포함하는 방법에 대한 자세한 내용은 job revert 명령 참조를 확인하세요.

메서드 경로 생성
POST /v1/job/:job_id/revert application/json

버전 번호나 태그 이름을 지정해 작업을 이전 버전으로 되돌릴 수 있어요.

이 예제는 현재 작업을 버전 6으로 되돌려요.

$ curl -X POST \
 localhost:4646/v1/job/hello-world/revert \
 -H "Content-Type: application/json" -d \
 '{"JobID": "hello-world", "JobVersion": 6}'

이 예제는 현재 작업을 golden-version 태그가 붙은 버전으로 되돌려요.

$ curl -X POST \
 localhost:4646/v1/job/hello-world/revert \
 -H "Content-Type: application/json" -d \
 '{"JobID": "hello-world", "TaggedVersion": "golden-version"}'

두 예제 모두의 JSON 응답은 다음과 유사해요.

{
  "EvalID":"c3b8b0b1-85b5-34f9-de70-80d859c6466a",
  "EvalCreateIndex":6442,
  "JobModifyIndex":6442,
  "Warnings":"",
  "Index":6442,
  "LastContact":0,
  "KnownLeader":false,
  "NextToken":""
}

경로와 페이로드 매개변수에 대한 자세한 내용은 Jobs HTTP API 이전 작업 버전으로 되돌리기 참조를 확인하세요.

이 예제에서 현재 작업을 golden-version 태그가 있는 버전으로 되돌려요.

  1. Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
  2. Versions를 클릭해요.
  3. golden-version 태그가 있는 버전을 찾아요.
  4. Revert Version을 클릭해요. UI가 확인을 요청해요.
  5. Yes, Revert Version을 클릭해 되돌리기 과정을 완료해요.

UI는 새 버전 배포를 검토할 수 있는 Overview 탭을 표시해요.

버전 복제하기 (Clone a version)

웹 UI를 사용해 작업 버전을 복제해요.

복제한 버전은 같은 작업의 새 버전이나 새 작업을 만드는 데 사용할 수 있어요.

새 버전으로 복제하기 (Clone as new version)

이 예제에서 hello-world 작업의 golden-version을 복제하고, 작업 명세를 편집하고, 계획하고, 새 버전을 실행해요.

  1. Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.

  2. Versions 탭을 클릭해요.

  3. golden-version 태그가 있는 버전 아래에서 Clone and Edit을 클릭해요.

  4. Clone as New Version of hello-world을 클릭해요.

  5. 작업 정의를 편집해요.

이 작업 명세는 HCL로 생성되었으므로 UI가 Job Spec 탭에 정의를 표시해요.

네트워크 포트를 8080으로 변경해요.

Warning: Full Definition 탭에서 JSON을 편집하기로 선택하면 JSON 정의가 HCL 정의를 대체하므로 HCL 작업 명세를 잃게 돼요. 작업 명세에는 HCL을 사용할 것을 권장해요.

  1. Plan을 클릭해요.

  2. 계획 출력을 검토해요.

  3. Run을 클릭해 새 버전을 실행해요.

Versions 탭이 새 버전을 표시해요.

새 작업으로 복제하기 (Clone as new job)

이 예제에서 hello-world 작업의 golden-version을 복제하고, 작업 이름과 네트워크 포트를 편집하고, 계획하고, 새 작업을 실행해요.

  1. Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.

  2. Versions 탭을 클릭해요.

  3. golden-version 태그가 있는 버전 아래에서 Clone and Edit을 클릭해요.

  4. Clone as New Job을 클릭해요.

  5. 작업 명세를 편집해요.

작업 이름을 hello-earth로, 네트워크 포트를 9080으로 변경해요. 작업 이름을 변경해야 해요. 그렇지 않으면 Nomad가 원래 작업의 새 버전을 만들어요.

  1. Plan을 클릭해요.

  2. 계획 출력을 검토해요.

  3. Run을 클릭해 새 작업을 실행해요.

Nomad는 배포를 검토할 수 있도록 hello-earth 작업의 Overview를 로드해요.

더 알아보기 (Learn more)