為了使job file更富有彈性,所以Nomad支援兩種變數Runtime Environment與Node Attributes,透過這兩種方式將變數帶入job file裡,另外還有template可以用來設定dynamic variable.
環境變數表
Runtime environment的變數,只會作用在當job已建立後才會將變數帶入環境中。
範例: 透過CLI啟動一個docker container,指定可以使用的cpu, memory.
task "test-docker" {
driver = "raw_exec"
config {
command = "/usr/bin/docker"
args = [
"run -it",
"tomcat:9.0",
"--memory=${NOMAD_MEMORY_LIMIT}m","--cpu-shares=${NOMAD_CPU_LIMIT}",
...
...
]
}
Node Attributes的變數,會在Nomad讀取job file時生效,所以可以用來指定job要在哪一些種類的node上執行。
官網範例:
task "docs" {
driver = "docker"
config {
image = "my-app"
args = [
"--bind", "${NOMAD_ADDR_RPC}",
"--logs", "${NOMAD_ALLOC_DIR}/logs",
]
port_map {
RPC = 6379
}
}
constraint {
attribute = "${attr.kernel.name}"
value = "linux"
}
env {
"DC" = "Running on datacenter ${node.datacenter}"
"VERSION" = "Version ${NOMAD_META_VERSION}"
}
meta {
VERSION = "v0.3"
}
}
變數說明:
config: 使用Nomad RPC的IP address來作為該task的bind ip, 使用NOMAD_ALLOC_DIR的路徑來ˊ放置log.
constraint: 用來限制該job要放置在哪些種類的node上,他要選擇kernel是linux的node來部屬task.
env: 設定container內的環境變數,使用${node.datacenter}
印出該task跑在哪個DC上,版本資訊是多少。
NOMAD_META_VERSION: 這裡的VERSION
是定義在meta
的key
. 如果進到container執行 env 會看到有兩筆變數是DC與VERSION。
上述的兩種變數都沒有提到儲存成file的模式,所以就有了template的出現,另外也可以透過template來整合Consul與Vault,以下是官網範例:
template {
data = "key= {{ key "erp/http/minsession" }}"
destination = "config/erp.ini"
}
template {
data = <<EOH
---
bind_port: {{ env "NOMAD_PORT_db" }}
scratch_dir: {{ env "NOMAD_TASK_DIR" }}
node_id: {{ env "node.unique.id" }}
service_key: {{ key "service/my-key" }}
EOH
destination = "local/file.yml"
}