Nomad est un orchestrateur. Il peut déployer divers types de tâches appelées job : commandes, conteneurs Docker/rkt/LXC, VM Qemu…
L’architecture Nomad se compose :
Nomad s’intègre avec les autres produits d’Hashicorp tel que Consul et Vault.
Nomad peut être utilisé en multi-master. Nomad peut être configuré pour être client ou serveur ou les deux à la fois. Ce dernier cas est déconseillé d’après la documentation.
Le programme se présente sous la forme d’un fichier binaire. Il faut lui ajouter un fichier service pour l’utiliser avec systemd :
[Unit]
Description=Nomad
After=network.target
[Service]
ExecStart=/usr/bin/nomad agent -config=/etc/nomad/nomad.conf
[Install]
WantedBy=multi-user.target
Le fichier de configuration, écrit en HCL se présente ainsi :
bind_addr = "0.0.0.0"
data_dir = "/var/lib/nomad"
advertise {
http = "10.42.1.11"
rpc = "10.42.1.11"
serf = "10.42.1.11"
}
server {
enabled = true
bootstrap_expect = 2
}
client {
enabled = true
network_speed = 10
options {
"driver.raw_exec.enable" = "1"
}
}
consul {
address = "127.0.0.1:8500"
}
vault {
enabled = true
address = "http://127.0.0.1:8200"
token = "8332917a-08fa-a989-9bbc-277c60fa9026"
}
Voici un modèle de job :
job "docs" {
datacenters = ["dc1"]
group "example" {
task "server" {
driver = "docker"
config {
image = "hashicorp/http-echo"
args = [
"-listen", ":5678",
"-text", "hello world",
]
network_mode = "weave"
}
resources {
network {
port "http" {
static = "5678"
}
}
}
service {
tags = ["default"]
port = "http"
check {
type = "tcp"
interval = "10s"
timeout = "2s"
}
}
vault {
policies = ["http"]
}
}
}
}
Pour l’exécuter :
nomad run docs.nomad