-
Get Nomad from https://learn.hashicorp.com/tutorials/nomad/get-started-install.
-
Run the local agent:
sudo nomad agent -config=nomad.hcl
- Check node status
nomad node status
- Run example deployment
nomad init
nomad run example.nomad
job "hello-world" { | |
datacenters = ["localhashi"] | |
namespace = "default" | |
type = "service" | |
group "redis" { | |
# Specify number of replicas of redis needed. | |
count = 1 | |
# Specify networking for the group, port allocs. | |
network { | |
# Bridge is an isolated network namespace created for this group. | |
# Applications outside this mode don't have access to this namespace. | |
mode = "bridge" | |
port "redis-tcp" { | |
# Map the port to task. | |
to = 6379 | |
host_network = "private" | |
} | |
} | |
# If unhealthy, restart 3 times in 2 minutes with a delay of 15s between each restart. | |
# If it still fails, it'll be marked as unhealthy and won't be restarted again. | |
restart { | |
attempts = 3 | |
interval = "2m" | |
delay = "15s" | |
mode = "fail" | |
} | |
# If alloc is failed, the group will be rescheduled with a preference to a node that | |
# hasn't been used previously. | |
reschedule { | |
attempts = 15 | |
interval = "1h" | |
delay = "30s" | |
delay_function = "exponential" | |
max_delay = "120s" | |
unlimited = false | |
} | |
# Register a service with Consul. | |
service { | |
name = "redis" | |
port = "6379" | |
tags = ["cache", "redis"] | |
# Specify a health check. Since Consul Connect cannot do a TCP check | |
# we need to add a script check here. This check is executed from the task | |
# namespace itself and each check takes about a full second to come up and tear | |
# down, so be mindful when keeping timeouts. | |
check { | |
name = "ping-pong" | |
type = "script" | |
command = "redis-cli" | |
args = ["ping"] | |
task = "redis" | |
interval = "15s" | |
timeout = "7s" | |
} | |
# Expose an envoy proxy. | |
# No upstream is defined here, this is just for Envoy proxy in app to communicate with Envoy proxy in redis. | |
connect { | |
sidecar_service { | |
} | |
} | |
} | |
task "redis" { | |
driver = "docker" | |
config { | |
image = "redis:6" | |
ports = ["redis-tcp"] | |
} | |
resources { | |
cores = 1 | |
memory = 256 | |
} | |
} | |
} | |
group "app" { | |
network { | |
port "http" { | |
to = 8080 | |
} | |
mode = "bridge" | |
} | |
service { | |
name = "app-proxy-sidecar" | |
port = "3000" | |
check { | |
name = "check healthcheck endpoint" | |
type = "http" | |
port = "http" | |
path = "/healthz" | |
interval = "30s" | |
timeout = "7s" | |
} | |
# Expose an envoy proxy. Define upstream as redis. | |
connect { | |
sidecar_service { | |
proxy { | |
config { | |
protocol = "tcp" | |
} | |
upstreams { | |
destination_name = "redis" | |
local_bind_port = 6379 | |
} | |
} | |
} | |
} | |
} | |
restart { | |
attempts = 3 | |
interval = "2m" | |
delay = "15s" | |
mode = "fail" | |
} | |
task "app" { | |
driver = "docker" | |
env { | |
DEMO_REDIS_ADDR = "localhost:6379" | |
} | |
config { | |
image = "registry.service.consul:32000/hello-app:1.1.0" | |
ports = ["http"] | |
// command = "sleep" | |
// args = [ | |
// "infinity" | |
// ] | |
} | |
resources { | |
cores = 1 | |
memory = 512 | |
} | |
} | |
} | |
} |
Get Nomad from https://learn.hashicorp.com/tutorials/nomad/get-started-install.
Run the local agent:
sudo nomad agent -config=nomad.hcl
nomad node status
nomad init
nomad run example.nomad
datacenter = "dc1" | |
data_dir = "/opt/nomad/data" | |
log_level = "DEBUG" | |
bind_addr = "0.0.0.0" | |
server { | |
enabled = true | |
bootstrap_expect = 1 | |
} | |
client { | |
enabled = true | |
} | |
plugin "docker" { | |
config { | |
allow_privileged = true | |
volumes { | |
enabled = true | |
} | |
extra_labels = ["job_name", "job_id", "task_group_name", "task_name", "namespace", "node_name", "node_id"] | |
} | |
} |