4.5 KiB
layout | page_title | sidebar_current | description |
---|---|---|---|
docs | network Stanza - Job Specification | docs-job-specification-network | The "network" stanza specifies the networking requirements for the task, including the minimum bandwidth and port allocations. |
network
Stanza
Placement |
job -> group -> task -> resources -> **network**
|
---|
The network
stanza specifies the networking requirements for the task,
including the minimum bandwidth and port allocations. When scheduling jobs in
Nomad they are provisioned across your fleet of machines along with other jobs
and services. Because you don't know in advance what host your job will be
provisioned on, Nomad will provide your tasks with network configuration when
they start up.
Note that this document only applies to services that want to listen on a port. Batch jobs or services that only make outbound connections do not need to allocate ports, since they will use any available interface to make an outbound connection.
job "docs" {
group "example" {
task "server" {
resources {
network {
mbits = 200
port "http" {}
port "https" {}
port "lb" {
static = "8889"
}
}
}
}
}
}
network
Parameters
-
mbits
(int: 10)
- Specifies the bandwidth required in MBits. -
port
(Port: nil)
- Specifies a port allocation and can be used to specify both dynamic ports and reserved ports.
port
Parameters
static
(int: nil)
- Specifies the static port to allocate. If omitted, a dynamic port is chosen. We do not recommend using static ports, except forsystem
or specialized jobs like load balancers.
The label assigned to the port is used to identify the port in service discovery, and used in the name of the environment variable that indicates which port your application should bind to. For example:
port "foo" {}
When the task starts, it will be passed the following environment variables:
- NOMAD_IP_foo - The IP to bind on for the given port label.
- NOMAD_PORT_foo - The port value for the given port label.
- NOMAD_ADDR_foo - A combined ip:port that can be used for convenience.
The label of the port is just text - it has no special meaning to Nomad.
network
Examples
The following examples only show the network
stanzas. Remember that the
network
stanza is only valid in the placements listed above.
Bandwidth
This example specifies a resource requirement of 1GBits in bandwidth:
network {
mbits = 1000
}
Dynamic Ports
This example specifies a dynamic port allocation for the port labeled "http".
Dynamic ports are allocated in a range from 20000
to 60000
.
Most services run in your cluster should use dynamic ports. This means that the port will be allocated dynamically by the scheduler, and your service will have to read an environment variable to know which port to bind to at startup.
task "example" {
resources {
network {
port "http" {}
port "https" {}
}
}
}
network {
port "http" {}
}
Static Ports
This example specifies a static port allocation for the port labeled "lb". Static ports bind your job to a specific port on the host they' are placed on. Since multiple services cannot share a port, the port must be open in order to place your task.
network {
port "lb" {
static = 6539
}
}
Mapped Ports
Some drivers (such as Docker and QEMU) allow you to map ports. A mapped port means that your application can listen on a fixed port (it does not need to read the environment variable) and the dynamic port will be mapped to the port in your container or virtual machine.
task "example" {
driver = "docker"
config {
port_map = {
http = 8080
}
}
resources {
network {
port "http" {}
}
}
}
The above example is for the Docker driver. The service is listening on port
8080
inside the container. The driver will automatically map the dynamic port
to this service.
When the task is started, it is passed an additional environment variable named
NOMAD_HOST_PORT_http
which indicates the host port that the HTTP service is
bound to.