2016-02-25 04:11:16 +00:00
|
|
|
---
|
|
|
|
layout: "docs"
|
2016-10-09 07:01:59 +00:00
|
|
|
page_title: "Upgrade Guides"
|
2016-02-25 04:11:16 +00:00
|
|
|
sidebar_current: "docs-upgrade-specific"
|
|
|
|
description: |-
|
|
|
|
Specific versions of Nomad may have additional information about the upgrade
|
|
|
|
process beyond the standard flow.
|
|
|
|
---
|
|
|
|
|
|
|
|
# Upgrading Specific Versions
|
|
|
|
|
|
|
|
The [upgrading page](/docs/upgrade/index.html) covers the details of doing
|
|
|
|
a standard upgrade. However, specific versions of Nomad may have more
|
|
|
|
details provided for their upgrades as a result of new features or changed
|
|
|
|
behavior. This page is used to document those details separately from the
|
|
|
|
standard upgrade flow.
|
|
|
|
|
2017-12-18 21:16:33 +00:00
|
|
|
## Nomad 0.8.0
|
|
|
|
|
2018-04-03 18:18:47 +00:00
|
|
|
### Raft Protocol Version Compatibility
|
2017-12-18 21:16:33 +00:00
|
|
|
|
|
|
|
When upgrading to Nomad 0.8.0 from a version lower than 0.7.0, users will need to
|
|
|
|
set the [`-raft-protocol`](/docs/agent/options.html#_raft_protocol) option to 1 in
|
|
|
|
order to maintain backwards compatibility with the old servers during the upgrade.
|
|
|
|
After the servers have been migrated to version 0.8.0, `-raft-protocol` can be moved
|
|
|
|
up to 2 and the servers restarted to match the default.
|
|
|
|
|
|
|
|
The Raft protocol must be stepped up in this way; only adjacent version numbers are
|
|
|
|
compatible (for example, version 1 cannot talk to version 3). Here is a table of the
|
|
|
|
Raft Protocol versions supported by each Consul version:
|
|
|
|
|
|
|
|
<table class="table table-bordered table-striped">
|
|
|
|
<tr>
|
|
|
|
<th>Version</th>
|
|
|
|
<th>Supported Raft Protocols</th>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>0.6 and earlier</td>
|
|
|
|
<td>0</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>0.7</td>
|
|
|
|
<td>1</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>0.8</td>
|
|
|
|
<td>1, 2, 3</td>
|
|
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
In order to enable all [Autopilot](/guides/cluster/autopilot.html) features, all servers
|
|
|
|
in a Nomad cluster must be running with Raft protocol version 3 or later.
|
|
|
|
|
2018-04-12 18:42:23 +00:00
|
|
|
### Node Draining Improvements
|
|
|
|
|
|
|
|
Node draining via the [`node drain`][drain-cli] command or the [drain
|
|
|
|
API][drain-api] has been substantially changed in Nomad 0.8. In Nomad 0.7.1 and
|
|
|
|
earlier draining a node would immediately stop all allocations on the node
|
|
|
|
being drained. Nomad 0.8 now supports a [`migrate`][migrate] stanza in job
|
2018-04-12 23:24:57 +00:00
|
|
|
specifications to control how many allocations may be migrated at once and the
|
|
|
|
default will be used for existing jobs.
|
2018-04-12 18:42:23 +00:00
|
|
|
|
2018-04-12 23:24:57 +00:00
|
|
|
The `drain` command now blocks until the drain completes. To get the Nomad
|
|
|
|
0.7.1 and earlier drain behavior use the command: `nomad node drain -enable
|
|
|
|
-force -detach <node-id>`
|
2018-04-12 22:54:21 +00:00
|
|
|
|
2018-04-12 22:39:46 +00:00
|
|
|
See the [`migrate` stanza documentation][migrate] and [Decommissioning Nodes
|
|
|
|
guide](/guides/node-draining.html) for details.
|
2018-04-12 18:42:23 +00:00
|
|
|
|
2018-04-03 18:18:47 +00:00
|
|
|
### Periods in Environment Variable Names No Longer Escaped
|
|
|
|
|
|
|
|
*Applications which expect periods in environment variable names to be replaced
|
|
|
|
with underscores must be updated.*
|
|
|
|
|
|
|
|
In Nomad 0.7 periods (`.`) in environment variables names were replaced with an
|
|
|
|
underscore in both the [`env`](/docs/job-specification/env.html) and
|
|
|
|
[`template`](/docs/job-specification/template.html) stanzas.
|
|
|
|
|
|
|
|
In Nomad 0.8 periods are *not* replaced and will be included in environment
|
|
|
|
variables verbatim.
|
|
|
|
|
|
|
|
For example the following stanza:
|
|
|
|
|
|
|
|
```text
|
|
|
|
env {
|
|
|
|
registry.consul.addr = "${NOMAD_IP_http}:8500"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
In Nomad 0.7 would be exposed to the task as
|
|
|
|
`registry_consul_addr=127.0.0.1:8500`. In Nomad 0.8 it will now appear exactly
|
|
|
|
as specified: `registry.consul.addr=127.0.0.1:8500`.
|
|
|
|
|
2018-04-06 23:03:44 +00:00
|
|
|
### Client APIs Unavailable on Older Nodes
|
|
|
|
|
|
|
|
Because Nomad 0.8 uses a new RPC mechanism to route node-specific APIs like
|
|
|
|
[`nomad alloc fs`](/docs/commands/alloc/fs.html) through servers to the node,
|
|
|
|
0.8 CLIs are incompatible using these commands on clients older than 0.8.
|
|
|
|
|
|
|
|
To access these commands on older clients either continue to use a pre-0.8
|
|
|
|
version of the CLI, or upgrade all clients to 0.8.
|
|
|
|
|
2018-04-11 22:11:38 +00:00
|
|
|
### CLI Command Changes
|
|
|
|
|
|
|
|
Nomad 0.8 has changed the organization of CLI commands to be based on
|
|
|
|
subcommands. An example of this change is the change from `nomad alloc-status`
|
|
|
|
to `nomad alloc status`. All commands have been made to be backwards compatible,
|
|
|
|
but operators should update any usage of the old style commands to the new style
|
|
|
|
as the old style will be deprecated in future versions of Nomad.
|
|
|
|
|
|
|
|
### RPC Advertise Address
|
|
|
|
|
|
|
|
The behavior of the [advertised RPC
|
|
|
|
address](/docs/agent/configuration/index.html#rpc-1) has changed to be only used
|
|
|
|
to advertise the RPC address of servers to client nodes. Server to server
|
|
|
|
communication is done using the advertised Serf address. Existing cluster's
|
|
|
|
should not be effected but the advertised RPC address may need to be updated to
|
|
|
|
allow connecting client's over a NAT.
|
|
|
|
|
|
|
|
|
2017-07-26 00:15:39 +00:00
|
|
|
## Nomad 0.6.0
|
|
|
|
|
|
|
|
### Default `advertise` address changes
|
|
|
|
|
|
|
|
When no `advertise` address was specified and Nomad's `bind_addr` was loopback
|
|
|
|
or `0.0.0.0`, Nomad attempted to resolve the local hostname to use as an
|
|
|
|
advertise address.
|
|
|
|
|
|
|
|
Many hosts cannot properly resolve their hostname, so Nomad 0.6 defaults
|
|
|
|
`advertise` to the first private IP on the host (e.g. `10.1.2.3`).
|
|
|
|
|
|
|
|
If you manually configure `advertise` addresses no changes are necessary.
|
|
|
|
|
2017-09-25 20:50:07 +00:00
|
|
|
## Nomad Clients
|
|
|
|
|
|
|
|
The change to the default, advertised IP also effect clients that do not specify
|
|
|
|
which network_interface to use. If you have several routable IPs, it is advised
|
|
|
|
to configure the client's [network
|
|
|
|
interface](https://www.nomadproject.io/docs/agent/configuration/client.html#network_interface)
|
|
|
|
such that tasks bind to the correct address.
|
|
|
|
|
2017-03-17 16:52:18 +00:00
|
|
|
## Nomad 0.5.5
|
|
|
|
|
2017-03-20 23:20:43 +00:00
|
|
|
### Docker `load` changes
|
|
|
|
|
2017-03-17 16:52:18 +00:00
|
|
|
Nomad 0.5.5 has a backward incompatible change in the `docker` driver's
|
|
|
|
configuration. Prior to 0.5.5 the `load` configuration option accepted a list
|
|
|
|
images to load, in 0.5.5 it has been changed to a single string. No
|
2017-07-17 18:41:50 +00:00
|
|
|
functionality was changed. Even if more than one item was specified prior to
|
2017-03-17 16:52:18 +00:00
|
|
|
0.5.5 only the first item was used.
|
|
|
|
|
2017-05-04 17:14:03 +00:00
|
|
|
To do a zero-downtime deploy with jobs that use the `load` option:
|
|
|
|
|
2017-05-04 17:24:50 +00:00
|
|
|
* Upgrade servers to version 0.5.5 or later.
|
2017-05-04 17:14:03 +00:00
|
|
|
|
2017-05-04 17:24:50 +00:00
|
|
|
* Deploy new client nodes on the same version as the servers.
|
2017-05-04 17:14:03 +00:00
|
|
|
|
|
|
|
* Resubmit jobs with the `load` option fixed and a constraint to only run on
|
|
|
|
version 0.5.5 or later:
|
|
|
|
|
|
|
|
```hcl
|
|
|
|
constraint {
|
2017-05-08 18:30:08 +00:00
|
|
|
attribute = "${attr.nomad.version}"
|
2017-05-04 17:14:03 +00:00
|
|
|
operator = "version"
|
|
|
|
value = ">= 0.5.5"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
* Drain and shutdown old client nodes.
|
2017-03-17 16:52:18 +00:00
|
|
|
|
2017-03-20 23:20:43 +00:00
|
|
|
### Validation changes
|
|
|
|
|
|
|
|
Due to internal job serialization and validation changes you may run into
|
|
|
|
issues using 0.5.5 command line tools such as `nomad run` and `nomad validate`
|
|
|
|
with 0.5.4 or earlier agents.
|
|
|
|
|
|
|
|
It is recommended you upgrade agents before or alongside your command line
|
|
|
|
tools.
|
|
|
|
|
2016-07-06 18:46:41 +00:00
|
|
|
## Nomad 0.4.0
|
|
|
|
|
2016-07-06 19:00:06 +00:00
|
|
|
Nomad 0.4.0 has backward incompatible changes in the logic for Consul
|
2017-07-17 18:41:50 +00:00
|
|
|
deregistration. When a Task which was started by Nomad v0.3.x is uncleanly shut
|
2016-07-06 19:00:06 +00:00
|
|
|
down, the Nomad 0.4 Client will no longer clean up any stale services. If an
|
|
|
|
in-place upgrade of the Nomad client to 0.4 prevents the Task from gracefully
|
|
|
|
shutting down and deregistering its Consul-registered services, the Nomad Client
|
|
|
|
will not clean up the remaining Consul services registered with the 0.3
|
|
|
|
Executor.
|
2016-07-06 18:46:41 +00:00
|
|
|
|
|
|
|
We recommend draining a node before upgrading to 0.4.0 and then re-enabling the
|
|
|
|
node once the upgrade is complete.
|
|
|
|
|
2016-07-06 19:00:06 +00:00
|
|
|
|
2016-03-16 16:56:04 +00:00
|
|
|
## Nomad 0.3.1
|
|
|
|
|
2017-07-17 18:41:50 +00:00
|
|
|
Nomad 0.3.1 removes artifact downloading from driver configurations and places them as
|
2016-03-16 16:56:04 +00:00
|
|
|
a first class element of the task. As such, jobs will have to be rewritten in
|
|
|
|
the proper format and resubmitted to Nomad. Nomad clients will properly
|
|
|
|
re-attach to existing tasks but job definitions must be updated before they can
|
|
|
|
be dispatched to clients running 0.3.1.
|
|
|
|
|
2016-02-25 04:11:16 +00:00
|
|
|
## Nomad 0.3.0
|
|
|
|
|
|
|
|
Nomad 0.3.0 has made several substantial changes to job files included a new
|
|
|
|
`log` block and variable interpretation syntax (`${var}`), a modified `restart`
|
|
|
|
policy syntax, and minimum resources for tasks as well as validation. These
|
|
|
|
changes require a slight change to the default upgrade flow.
|
|
|
|
|
|
|
|
After upgrading the version of the servers, all previously submitted jobs must
|
|
|
|
be resubmitted with the updated job syntax using a Nomad 0.3.0 binary.
|
|
|
|
|
|
|
|
* All instances of `$var` must be converted to the new syntax of `${var}`
|
|
|
|
|
|
|
|
* All tasks must provide their required resources for CPU, memory and disk as
|
|
|
|
well as required network usage if ports are required by the task.
|
|
|
|
|
|
|
|
* Restart policies must be updated to indicate whether it is desired for the
|
|
|
|
task to restart on failure or to fail using `mode = "delay"` or `mode =
|
|
|
|
"fail"` respectively.
|
|
|
|
|
|
|
|
* Service names that include periods will fail validation. To fix, remove any
|
|
|
|
periods from the service name before running the job.
|
|
|
|
|
|
|
|
After updating the Servers and job files, Nomad Clients can be upgraded by first
|
|
|
|
draining the node so no tasks are running on it. This can be verified by running
|
2018-03-22 20:39:18 +00:00
|
|
|
`nomad node status <node-id>` and verify there are no tasks in the `running`
|
2016-02-25 04:11:16 +00:00
|
|
|
state. Once that is done the client can be killed, the `data_dir` should be
|
|
|
|
deleted and then Nomad 0.3.0 can be launched.
|
2018-04-12 18:42:23 +00:00
|
|
|
|
|
|
|
[drain-api]: /api/nodes.html#drain-node
|
|
|
|
[drain-cli]: /docs/commands/node/drain.html
|
|
|
|
[migrate]: /docs/job-specification/migrate.html
|