작업 버전 만들기 및 수정하기
작업 버전 만들기 및 수정하기 (Create and modify job versions)
Nomad는 작업을 실행할 때마다 작업에 대한 새 버전을 만들어요. 작업은 무제한의 버전을 가질 수 있고, 버전 기록은 상태에 저장돼요. 시간이 지나면서 Nomad는 버전 태그가 없는 죽은(dead) 버전을 가비지 컬렉션해요. 버전에 태그를 저장하면 Nomad가 해당 버전을 가비지 컬렉션하지 못하게 해요.
이 가이드는 다음 작업 버전 기능을 보여줘요:
- 작업 버전 태그 생성, 수정, 삭제
- 버전 비교
- 시간이 얼마나 지났든 실행 중인 작업을 이전 버전으로 되돌리기
- 버전 복제
출처: 문서
본문
전제 조건 (Prerequisites)
- 이 기능은 Nomad v1.9.0 이상이 필요해요.
- 작업 버전과 태그에 익숙해야 해요.
hello-world 작업 만들기 (Create the hello-world job)
예제는 Nomad의 작업 템플릿 중 하나인 hello-world라는 작업을 사용해요.
- Jobs 페이지에서 Run Job을 클릭해요.
- Choose from template을 클릭해요.
- Hello world를 선택해요.
- Apply를 클릭해요.
- Plan을 클릭해요.
- Job Plan 출력을 검토해요.
- 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 작업 버전 태그 만들기 참조를 확인하세요.
- Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
- Versions를 클릭해요.
- 목록에서 Version #0을 찾아요.
- Tag this version을 클릭해요.
- Tag Name 필드에
golden version을 입력하고 Tag Description 필드에The version we can roll back to.를 입력해요. - 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 작업 버전 태그 만들기 참조를 확인하세요.
- Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
- Versions를 클릭해요.
- 목록에서 Version #0을 찾아요.
- golden-version을 클릭해요.
- 태그 이름과 설명을 편집해요.
- 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 작업 버전 태그 삭제 참조를 확인하세요.
- Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
- Versions를 클릭해요.
- 목록에서 Version #0을 찾아요.
- golden-version을 클릭해요.
- 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 태그가 있는 버전으로 되돌려요.
- Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
- Versions를 클릭해요.
golden-version태그가 있는 버전을 찾아요.- Revert Version을 클릭해요. UI가 확인을 요청해요.
- Yes, Revert Version을 클릭해 되돌리기 과정을 완료해요.
UI는 새 버전 배포를 검토할 수 있는 Overview 탭을 표시해요.
버전 복제하기 (Clone a version)
웹 UI를 사용해 작업 버전을 복제해요.
복제한 버전은 같은 작업의 새 버전이나 새 작업을 만드는 데 사용할 수 있어요.
새 버전으로 복제하기 (Clone as new version)
이 예제에서 hello-world 작업의 golden-version을 복제하고, 작업 명세를 편집하고, 계획하고, 새 버전을 실행해요.
-
Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
-
Versions 탭을 클릭해요.
-
golden-version태그가 있는 버전 아래에서 Clone and Edit을 클릭해요. -
Clone as New Version of hello-world을 클릭해요.
-
작업 정의를 편집해요.
이 작업 명세는 HCL로 생성되었으므로 UI가 Job Spec 탭에 정의를 표시해요.
네트워크 포트를 8080으로 변경해요.
Warning: Full Definition 탭에서 JSON을 편집하기로 선택하면 JSON 정의가 HCL 정의를 대체하므로 HCL 작업 명세를 잃게 돼요. 작업 명세에는 HCL을 사용할 것을 권장해요.
-
Plan을 클릭해요.
-
계획 출력을 검토해요.
-
Run을 클릭해 새 버전을 실행해요.
Versions 탭이 새 버전을 표시해요.
새 작업으로 복제하기 (Clone as new job)
이 예제에서 hello-world 작업의 golden-version을 복제하고, 작업 이름과 네트워크 포트를 편집하고, 계획하고, 새 작업을 실행해요.
-
Jobs 화면에서 hello-world 작업을 클릭해 작업 세부 정보를 표시해요.
-
Versions 탭을 클릭해요.
-
golden-version태그가 있는 버전 아래에서 Clone and Edit을 클릭해요. -
Clone as New Job을 클릭해요.
-
작업 명세를 편집해요.
작업 이름을 hello-earth로, 네트워크 포트를 9080으로 변경해요. 작업 이름을 변경해야 해요. 그렇지 않으면 Nomad가 원래 작업의 새 버전을 만들어요.
-
Plan을 클릭해요.
-
계획 출력을 검토해요.
-
Run을 클릭해 새 작업을 실행해요.
Nomad는 배포를 검토할 수 있도록 hello-earth 작업의 Overview를 로드해요.