HashiCorp Nomad Task Dependencies
Nomad 0.11 introduces the lifecycle
stanza for tasks which can be used to express task dependencies. This can be used to express task dependencies between tasks in a task group, and it can even be leveraged to express inter-job task dependencies with Consul.
In this blog post, we’ll go over the lifecycle stanza, task dependency patterns, and how to implement a sidecar task dependency in your own job.
» The lifecycle stanza
The lifecycle
stanza enables users to control when a task is run within the lifecycle of a task group allocation.
» lifecycle Parameters
-
hook
- Specifies when a task should be launched within the lifecycle of a group. Hooks break up the allocation lifecycle into phases. If a task lifecycle specifies Prestart Hook, then those tasks will be started before the main tasks are started. Currently only Prestart Hooks are supported, but later 0.11 releases will add PostStart, PreStop and PostStop hooks. -
sidecar
- Indicates if a task should run for the full duration of an allocation (sidecar = true
), or whether the task should be ephemeral and run until completion (sidecar = false
) before starting the next lifecycle phase in the allocation.
» Task Dependency Patterns
The combination of prestart hooks and the sidecar flag creates two task dependency patterns for prestart tasks: init tasks and sidecar tasks.
Init tasks are ephemeral prestart tasks that must run to completion before the main workload is started. They are commonly used to download assets or to create necessary tables for an extract-transform-load (ETL) job.
You can create an init task by adding a lifecycle
stanza with hook
set to prestart
and sidecar
to false
as below.
lifecycle {
hook = "prestart"
sidecar = false
}
Sidecar tasks are prestart tasks that are started before main workload starts and run for the lifetime of the main workload. Typical sidecars tasks are log forwarders, proxies, and for platform abstractions.
You can create a sidecar task by adding a lifecycle
stanza with hook
set to
prestart
and sidecar
to true
as below.
lifecycle {
hook = "prestart"
sidecar = true
}
» Describing Sidecar Tasks in a Nomad Job
Now we will demonstrate how to configure two remote_syslog
containers — one for stderr and one for stdout—to ship log events to Papertail for a sample Redis instance. In this example, the log-shippers are sidecar tasks and the Redis instance is the main task.
job "example" {
datacenters = ["dc1"]
group "cache" {
task "remote_syslog_stdout" {
driver = "docker"
config {
image = "octohost/remote_syslog"
args = [
# REPLACE placeholders with your Papertrail information.
"-p", "«papertrail port»", "-d", "logs.papertrailapp.com", "/alloc/logs/redis.stdout.0"
]
}
lifecycle {
sidecar = true
hook = "prestart"
}
}
task "remote_syslog_stderr" {
driver = "docker"
config {
image = "octohost/remote_syslog"
args = [
# REPLACE placeholders with your Papertrail information.
"-p", "«papertrail port»", "-d", "logs.papertrailapp.com", "/alloc/logs/redis.stderr.0"
]
}
lifecycle {
sidecar = true
hook = "prestart"
}
}
task "redis" {
driver = "docker"
config {
image = "redis:3.2"
port_map {
db = 6379
}
}
resources {
cpu = 500
memory = 256
network {
mbits = 10
port "db" {}
}
}
}
}
}
Once you run the job, you can navigate to your Papertrail UI and view the logs.
» Getting Started
We're releasing Nomad's Task Dependencies feature in beta for Nomad 0.11 to get feedback from our practitioners. We’d like to hear what other task dependencies features you are interested in seeing. Feel free to try it out and give us feedback in the issue tracker. To see this feature in action, please register for the upcoming live demo session here. Learn more about Task dependencies at the HashiCorp Learn website.
Sign up for the latest HashiCorp news
More blog posts like this one
Nomad 1.9 adds NVIDIA MIG support, golden job versions, and more
HashiCorp Nomad 1.9 introduces NVIDIA multi-instance GPU support, NUMA and quotas for devices, exec2 GA, and golden job versions.
Terraform, Packer, Nomad, and Waypoint updates help scale ILM at HashiConf 2024
New Infrastructure Lifecycle Management (ILM) offerings from HashiCorp Terraform, Packer, Nomad, and Waypoint help organizations manage their infrastructure at scale with reduced complexity.
Terraform Enterprise improves deployment flexibility with Nomad and OpenShift
Customers can now deploy Terraform Enterprise using Red Hat OpenShift or HashiCorp Nomad runtime platforms.