iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
0
DevOps

Hashicorp 0 到 0.003系列 第 18

Day 18. Submit Jobs to Nomad

  • 分享至 

  • xImage
  •  

到目前為止,我們的環境都準備就緒了,今天來啟動一個Nomad job.
記得剛開始學寫Kubernetes object時,是從網路上抄別人的來改,再慢慢越學越多變化,在Nomad有提供一個job init的指令可以產出一個範例,從範例來學習怎麼寫job specification.

自動產出一個job file

執行下列的指令,會幫你產出一個名為example.nomad的job file, 這份job file裡面已有大部分常用的語法了,並附上說明。

$ nomad job init
Example job file written to example.nomad

如果覺得一大堆東西覺得太複雜,可以加入option -short, 命名為example-short.nomad, 內容會變得比較簡單好入門。

$ nomad job init -short example-short.nomad
Example job file written to example-short.nomad
# example-short.nomad
job "example" {
  datacenters = ["Nomad-ithome"]

  group "cache" {
    task "redis" {
      driver = "docker"

      config {
        image = "redis:3.2"

        port_map {
          db = 6379
        }
      }

      resources {
        cpu    = 500
        memory = 256

        network {
          mbits = 10
          port "db" {}
        }
      }
    }
  }
}

參數說明:

job: 一個job file, 只有一個job.
datacenters: 設定job要部屬到哪一個dc上。
group: 一個job可以有多個group.(類似pod)
task: 一個group可以有多個task.(最小的單位container或是batch等等)

The general hierarchy for a job is:

job
 \_ group
       \_ task

Each job file has only a single job, however a job may have multiple groups, and each group may have multiple tasks. Groups contain a set of tasks that are co-located on a machine.

driver: 設定使用docker container.
config: 設定docker image, port等等的資訊。
resources: 設定resource使用限制。

Submit a Job

當一切都準備好,就送出我們第一個job吧!

在開始前nomad提供一個dry-run的指令,可以測試job被提交後是否可以被部屬。

$ nomad job plan example-short.nomad
+/- Job: "example"
- NomadTokenID: "723414cf-d755-1f35-e55c-d157253ffc1e"
  Task Group: "cache" (1 in-place update)
    Task: "redis"

Scheduler dry-run:
- All tasks successfully allocated.

Job Modify Index: 98542
To submit the job with version verification run:

nomad job run -check-index 98542 example-short.nomad

When running the job with the check-index flag, the job will only be run if the
job modify index given matches the server-side version. If the index has
changed, another user has modified the job and the plan's results are
potentially invalid.

看到job plan後的結果All tasks successfully allocated.我們可以放心的submit job了

$ nomad job run example-short.nomad
==> Monitoring evaluation "019407d7"
    Evaluation triggered by job "example"
    Evaluation within deployment: "b8ca5a9d"
    Allocation "4ed3652c" created: node "728069bc", group "cache"
    Evaluation status changed: "pending" -> "complete"
==> Evaluation "019407d7" finished with status "complete"

檢查job status

$ nomad job status
ID               Type     Priority  Status   Submit Date
example          service  50        running  2020-09-18T23:14:16+08:00

想查看更詳細的資訊可以執行

$ nomad job inspect example
{
    "Job": {
        "Affinities": null,
        "AllAtOnce": false,
        "Constraints": null,
        "ConsulToken": "",
        "CreateIndex": 96387,
        "Datacenters": [
            "Nomad-WHQ-DEV"
        ],
        "Dispatched": false,
        "ID": "example",
        "JobModifyIndex": 98542,
        "Meta": null,
        "Migrate": null,
        "ModifyIndex": 98550,
        "Multiregion": null,
        "Name": "example",
        "Namespace": "default",
....
....
....

透過Nomad Web UI查看,job有成功部屬並運行中,點入example後,還有更多資訊可以查看。
https://ithelp.ithome.com.tw/upload/images/20200918/20129223nTa7zz5tKH.png

https://ithelp.ithome.com.tw/upload/images/20200918/20129223zRtckQ9LkE.png

透過Nomad Web UI也可以stop job,或是進入container裡。
https://ithelp.ithome.com.tw/upload/images/20200918/20129223EVa4VjkLuW.png


上一篇
DAY 17. Nomad integrates with Consul
下一篇
Day 19. Nomad's Variable and Template
系列文
Hashicorp 0 到 0.00330
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言