github.com/adityamillind98/nomad@v0.11.8/website/pages/docs/upgrade/upgrade-specific.mdx (about)

     1  ---
     2  layout: docs
     3  page_title: Upgrade Guides
     4  sidebar_title: Specific Version Details
     5  description: |-
     6    Specific versions of Nomad may have additional information about the upgrade
     7    process beyond the standard flow.
     8  ---
     9  
    10  # Upgrade Guides
    11  
    12  The [upgrading page](/docs/upgrade) covers the details of doing
    13  a standard upgrade. However, specific versions of Nomad may have more
    14  details provided for their upgrades as a result of new features or changed
    15  behavior. This page is used to document those details separately from the
    16  standard upgrade flow.
    17  
    18  ## Nomad 0.11.7
    19  
    20  ### Docker volume mounts
    21  
    22  Nomad 0.11.7 includes a security fixes for the handling of Docker volume
    23  mounts. Docker driver mounts of type "volume" (but not "bind") were not
    24  sandboxed and could mount arbitrary locations from the client host. The
    25  `docker.volumes.enabled` configuration will now disable Docker mounts with
    26  type "volume" when set to `false`.
    27  
    28  This change Docker impacts jobs that use a `mounts` with type "volume", as
    29  shown below. This job will fail when placed unless `docker.volumes.enabled =
    30  true`.
    31  
    32  ```hcl
    33  mounts = [
    34    {
    35      type     = "volume"
    36      target   = "/path/in/container"
    37      source   = "docker_volume"
    38      volume_options = {
    39        driver_config = {
    40          name = "local"
    41          options = [
    42            {
    43              device = "/"
    44              o      = "ro,bind"
    45              type   = "ext4"
    46            }
    47          ]
    48        }
    49      }
    50    }
    51  ]
    52  ```
    53  
    54  ## Nomad 0.11.5
    55  
    56  ### Artifact and Template Paths
    57  
    58  Nomad 0.11.5 includes backported security fixes for privilege escalation
    59  vulnerabilities in handling of job `template` and `artifact` stanzas:
    60  
    61  - The `template.source` and `template.destination` fields are now protected by
    62    the file sandbox introduced in 0.9.6. These paths are now restricted to fall
    63    inside the task directory by default. An operator can opt-out of this
    64    protection with the
    65    [`template.disable_file_sandbox`](/docs/configuration/client#template-parameters)
    66    field in the client configuration.
    67  - The paths for `template.source`, `template.destination`, and
    68    `artifact.destination` are validated on job submission to ensure the paths
    69    do not escape the file sandbox. It was possible to use interpolation to
    70    bypass this validation. The client now interpolates the paths before
    71    checking if they are in the file sandbox.
    72  
    73  ~> **Warning:** Due to a [bug][gh-9148] in Nomad v0.11.5, the
    74  `template.destination` and `artifact.destination` paths do not support
    75  absolute paths, including the interpolated `NOMAD_SECRETS_DIR`,
    76  `NOMAD_TASK_DIR`, and `NOMAD_ALLOC_DIR` variables. This bug is fixed in
    77  v0.11.6. To work around the bug, use a relative path.
    78  
    79  ## Nomad 0.11.3
    80  
    81  Nomad 0.11.3 fixes a critical bug causing the nomad agent to become
    82  unresponsive. The issue is due to a [Go 1.14.1 runtime
    83  bug](https://github.com/golang/go/issues/38023) and affects Nomad 0.11.1 and
    84  0.11.2.
    85  
    86  ## Nomad 0.11.2
    87  
    88  ### Scheduler Scoring Changes
    89  
    90  Prior to Nomad 0.11.2 the scheduler algorithm used a [node's reserved
    91  resources][reserved]
    92  incorrectly during scoring. The result of this bug was that scoring biased in
    93  favor of nodes with reserved resources vs nodes without reserved resources.
    94  
    95  Placements will be more correct but slightly different in v0.11.2 vs earlier
    96  versions of Nomad. Operators do *not* need to take any actions as the impact of
    97  the bug fix will only minimally affect scoring.
    98  
    99  Feasability (whether a node is capable of running a job at all) is *not*
   100  affected.
   101  
   102  ### Periodic Jobs and Daylight Saving Time
   103  
   104  Nomad 0.11.2 fixed a long outstanding bug affecting periodic jobs that are
   105  scheduled to run during Daylight Saving Time transitions.
   106  
   107  Nomad 0.11.2 provides a more defined behavior: Nomad evaluates the cron
   108  expression with respect to specified time zone during transition. A 2:30am
   109  nightly job with `America/New_York` time zone will not run on the day daylight
   110  saving time starts; similarly, a 1:30am nightly job will run twice on the day
   111  daylight saving time ends. See the [Daylight Saving Time][dst] documentation
   112  for details.
   113  
   114  ## Nomad 0.11.0
   115  
   116  ### client.template: `vault_grace` deprecation
   117  
   118  Nomad 0.11.0 updates
   119  [consul-template](https://github.com/hashicorp/consul-template) to v0.24.1.
   120  This library deprecates the [`vault_grace`][vault_grace] option for templating
   121  included in Nomad. The feature has been ignored since Vault 0.5 and as long as
   122  you are running a more recent version of Vault, you can safely remove
   123  `vault_grace` from your Nomad jobs.
   124  
   125  ### Rkt Task Driver Removed
   126  
   127  The `rkt` task driver has been deprecated and removed from Nomad. While the
   128  code is available in an external repository,
   129  [https://github.com/hashicorp/nomad-driver-rkt](https://github.com/hashicorp/nomad-driver-rkt),
   130  it will not be maintained as `rkt` is [no longer being developed
   131  upstream](https://github.com/rkt/rkt). We encourage all `rkt` users to find a
   132  new task driver as soon as possible.
   133  
   134  ## Nomad 0.10.8
   135  
   136  ### Docker volume mounts
   137  
   138  Nomad 0.10.8 includes a security fixes for the handling of Docker volume
   139  mounts. Docker driver mounts of type "volume" (but not "bind") were not
   140  sandboxed and could mount arbitrary locations from the client host. The
   141  `docker.volumes.enabled` configuration will now disable Docker mounts with
   142  type "volume" when set to `false`.
   143  
   144  This change Docker impacts jobs that use a `mounts` with type "volume", as
   145  shown below. This job will fail when placed unless `docker.volumes.enabled =
   146  true`.
   147  
   148  ```hcl
   149  mounts = [
   150    {
   151      type     = "volume"
   152      target   = "/path/in/container"
   153      source   = "docker_volume"
   154      volume_options = {
   155        driver_config = {
   156          name = "local"
   157          options = [
   158            {
   159              device = "/"
   160              o      = "ro,bind"
   161              type   = "ext4"
   162            }
   163          ]
   164        }
   165      }
   166    }
   167  ]
   168  ```
   169  
   170  ## Nomad 0.10.6
   171  
   172  ### Artifact and Template Paths
   173  
   174  Nomad 0.10.6 includes backported security fixes for privilege escalation
   175  vulnerabilities in handling of job `template` and `artifact` stanzas:
   176  
   177  - The `template.source` and `template.destination` fields are now protected by
   178    the file sandbox introduced in 0.9.6. These paths are now restricted to fall
   179    inside the task directory by default. An operator can opt-out of this
   180    protection with the
   181    [`template.disable_file_sandbox`](/docs/configuration/client#template-parameters)
   182    field in the client configuration.
   183  - The paths for `template.source`, `template.destination`, and
   184    `artifact.destination` are validated on job submission to ensure the paths
   185    do not escape the file sandbox. It was possible to use interpolation to
   186    bypass this validation. The client now interpolates the paths before
   187    checking if they are in the file sandbox.
   188  
   189  ~> **Warning:** Due to a [bug][gh-9148] in Nomad v0.10.6, the
   190  `template.destination` and `artifact.destination` paths do not support
   191  absolute paths, including the interpolated `NOMAD_SECRETS_DIR`,
   192  `NOMAD_TASK_DIR`, and `NOMAD_ALLOC_DIR` variables. This bug is fixed in
   193  v0.10.7. To work around the bug, use a relative path.
   194  
   195  ## Nomad 0.10.4
   196  
   197  ### Same-Node Scheduling Penalty Removed
   198  
   199  Nomad 0.10.4 includes a fix to the scheduler that removes the
   200  same-node penalty for allocations that have not previously failed. In
   201  earlier versions of Nomad, the node where an allocation was running
   202  was penalized from receiving updated versions of that allocation,
   203  resulting in a higher chance of the allocation being placed on a new
   204  node. This was changed so that the penalty only applies to nodes where
   205  the previous allocation has failed or been rescheduled, to reduce the
   206  risk of correlated failures on a host. Scheduling weighs a number of
   207  factors, but this change should reduce movement of allocations that
   208  are being updated from a healthy state. You can view the placement
   209  metrics for an allocation with `nomad alloc status -verbose`.
   210  
   211  ### Additional Environment Variable Filtering
   212  
   213  Nomad will by default prevent certain environment variables set in the client
   214  process from being passed along into launched tasks. The `CONSUL_HTTP_TOKEN`
   215  environment variable has been added to the default list. More information can
   216  be found in the `env.blacklist` [configuration](/docs/configuration/client#env-blacklist) .
   217  
   218  ## Nomad 0.10.3
   219  
   220  ### mTLS Certificate Validation
   221  
   222  Nomad 0.10.3 includes a fix for a privilege escalation vulnerability in
   223  validating TLS certificates for RPC with mTLS. Nomad RPC endpoints validated
   224  that TLS client certificates had not expired and were signed by the same CA as
   225  the Nomad node, but did not correctly check the certificate's name for the role
   226  and region as described in the [Securing Nomad with TLS][tls-guide] guide. This
   227  allows trusted operators with a client certificate signed by the CA to send RPC
   228  calls as a Nomad client or server node, bypassing access control and accessing
   229  any secrets available to a client.
   230  
   231  Nomad clusters configured for mTLS following the [Securing Nomad with TLS][tls-guide]
   232  guide or the [Vault PKI Secrets Engine Integration][tls-vault-guide] guide
   233  should already have certificates that will pass validation. Before upgrading to
   234  Nomad 0.10.3, operators using mTLS with `verify_server_hostname = true` should
   235  confirm that the common name or SAN of all Nomad client node certs is
   236  `client.<region>.nomad`, and that the common name or SAN of all Nomad server
   237  node certs is `server.<region>.nomad`.
   238  
   239  ### Connection Limits Added
   240  
   241  Nomad 0.10.3 introduces the [limits][limits] agent configuration parameters for
   242  mitigating denial of service attacks from users who are not authenticated via
   243  mTLS. The default limits stanza is:
   244  
   245  ```hcl
   246  limits {
   247    https_handshake_timeout   = "5s"
   248    http_max_conns_per_client = 100
   249    rpc_handshake_timeout     = "5s"
   250    rpc_max_conns_per_client  = 100
   251  }
   252  ```
   253  
   254  If your Nomad agent's endpoints are protected from unauthenticated users via
   255  other mechanisms these limits may be safely disabled by setting them to `0`.
   256  
   257  However the defaults were chosen to be safe for a wide variety of Nomad
   258  deployments and may protect against accidental abuses of the Nomad API that
   259  could cause unintended resource usage.
   260  
   261  ## Nomad 0.10.2
   262  
   263  ### Preemption Panic Fixed
   264  
   265  Nomad 0.9.7 and 0.10.2 fix a [server crashing bug][gh-6787] present in
   266  scheduler preemption since 0.9.0. Users unable to immediately upgrade Nomad can
   267  [disable preemption][preemption-api] to avoid the panic.
   268  
   269  ### Dangling Docker Container Cleanup
   270  
   271  Nomad 0.10.2 addresses an issue occurring in heavily loaded clients, where
   272  containers are started without being properly managed by Nomad. Nomad 0.10.2
   273  introduced a reaper that detects and kills such containers.
   274  
   275  Operators may opt to run reaper in a dry-mode or disabling it through a client config.
   276  
   277  For more information, see [Docker Dangling containers][dangling-containers].
   278  
   279  ## Nomad 0.10.0
   280  
   281  ### Deployments
   282  
   283  Nomad 0.10 enables rolling deployments for service jobs by default
   284  and adds a default update stanza when a service job is created or updated.
   285  This does not affect jobs with an update stanza.
   286  
   287  In pre-0.10 releases, when updating a service job without an update stanza,
   288  all existing allocations are stopped while new allocations start up,
   289  and this may cause a service degradation or an outage.
   290  You can regain this behavior and disable deployments by setting `max_parallel` to 0.
   291  
   292  For more information, see [`update` stanza][update].
   293  
   294  ## Nomad 0.9.5
   295  
   296  ### Template Rendering
   297  
   298  Nomad 0.9.5 includes security fixes for privilege escalation vulnerabilities in handling of job `template` stanzas:
   299  
   300  - The client host's environment variables are now cleaned before rendering the template. If a template includes the `env` function, the job should include an [`env`](/docs/job-specification/env) stanza to allow access to the variable in the template.
   301  - The `plugin` function is no longer permitted by default and will raise an error if used in a template. Operator can opt-in to permitting this function with the new [`template.function_blacklist`](/docs/configuration/client#template-parameters) field in the client configuration.
   302  - The `file` function has been changed to restrict paths to fall inside the task directory by default. Paths that used the `NOMAD_TASK_DIR` environment variable to prefix file paths should work unchanged. Relative paths or symlinks that point outside the task directory will raise an error. An operator can opt-out of this protection with the new [`template.disable_file_sandbox`](/docs/configuration/client#template-parameters) field in the client configuration.
   303  
   304  ## Nomad 0.9.0
   305  
   306  ### Preemption
   307  
   308  Nomad 0.9 adds preemption support for system jobs. If a system job is submitted
   309  that has a higher priority than other running jobs on the node, and the node
   310  does not have capacity remaining, Nomad may preempt those lower priority
   311  allocations to place the system job. See [preemption][preemption] for more
   312  details.
   313  
   314  ### Task Driver Plugins
   315  
   316  All task drivers have become [plugins][plugins] in Nomad 0.9.0. There are two
   317  user visible differences between 0.8 and 0.9 drivers:
   318  
   319  - [LXC][lxc] is now community supported and distributed independently.
   320  - Task driver [`config`][task-config] stanzas are no longer validated by
   321    the [`nomad job validate`][validate] command. This is a regression that will
   322    be fixed in a future release.
   323  
   324  There is a new method for client driver configuration options, but existing
   325  `client.options` settings are supported in 0.9. See [plugin
   326  configuration][plugin-stanza] for details.
   327  
   328  #### LXC
   329  
   330  LXC is now an external plugin and must be installed separately. See [the LXC
   331  driver's documentation][lxc] for details.
   332  
   333  ### Structured Logging
   334  
   335  Nomad 0.9.0 switches to structured logging. Any log processing on the pre-0.9
   336  log output will need to be updated to match the structured output.
   337  
   338  Structured log lines have the format:
   339  
   340  ```
   341  # <Timestamp> [<Level>] <Component>: <Message>: <KeyN>=<ValueN> ...
   342  
   343  2019-01-29T05:52:09.221Z [INFO ] client.plugin: starting plugin manager: plugin-type=device
   344  ```
   345  
   346  Values containing whitespace will be quoted:
   347  
   348  ```
   349  ... starting plugin: task=redis args="[/opt/gopath/bin/nomad logmon]"
   350  ```
   351  
   352  ### HCL2 Transition
   353  
   354  Nomad 0.9.0 begins a transition to [HCL2][hcl2], the next version of the
   355  HashiCorp configuration language. While Nomad has begun integrating HCL2,
   356  users will need to continue to use HCL1 in Nomad 0.9.0 as the transition is
   357  incomplete.
   358  
   359  If you interpolate variables in your [`task.config`][task-config] containing
   360  consecutive dots in their name, you will need to change your job specification
   361  to use the `env` map. See the following example:
   362  
   363  ```hcl
   364  env {
   365    # Note the multiple consecutive dots
   366    image...version = "3.2"
   367  
   368    # Valid in both v0.8 and v0.9
   369    image.version = "3.2"
   370  }
   371  
   372  # v0.8 task config stanza:
   373  task {
   374    driver = "docker"
   375    config {
   376      image = "redis:${image...version}"
   377    }
   378  }
   379  
   380  # v0.9 task config stanza:
   381  task {
   382    driver = "docker"
   383    config {
   384      image = "redis:${env["image...version"]}"
   385    }
   386  }
   387  ```
   388  
   389  This only affects users who interpolate unusual variables with multiple
   390  consecutive dots in their task `config` stanza. All other interpolation is
   391  unchanged.
   392  
   393  Since HCL2 uses dotted object notation for interpolation users should
   394  transition away from variable names with multiple consecutive dots.
   395  
   396  ### Downgrading clients
   397  
   398  Due to the large refactor of the Nomad client in 0.9, downgrading to a
   399  previous version of the client after upgrading it to Nomad 0.9 is not supported.
   400  To downgrade safely, users should erase the Nomad client's data directory.
   401  
   402  ## Nomad 0.8.0
   403  
   404  ### Raft Protocol Version Compatibility
   405  
   406  When upgrading to Nomad 0.8.0 from a version lower than 0.7.0, users will need
   407  to set the
   408  [`raft_protocol`](/docs/configuration/server#raft_protocol) option
   409  in their `server` stanza to 1 in order to maintain backwards compatibility with
   410  the old servers during the upgrade. After the servers have been migrated to
   411  version 0.8.0, `raft_protocol` can be moved up to 2 and the servers restarted
   412  to match the default.
   413  
   414  The Raft protocol must be stepped up in this way; only adjacent version numbers are
   415  compatible (for example, version 1 cannot talk to version 3). Here is a table of the
   416  Raft Protocol versions supported by each Nomad version:
   417  
   418  <table>
   419    <thead>
   420      <tr>
   421        <th>Version</th>
   422        <th>Supported Raft Protocols</th>
   423      </tr>
   424    </thead>
   425    <tbody>
   426      <tr>
   427        <td>0.6 and earlier</td>
   428        <td>0</td>
   429      </tr>
   430      <tr>
   431        <td>0.7</td>
   432        <td>1</td>
   433      </tr>
   434      <tr>
   435        <td>0.8 and later</td>
   436        <td>1, 2, 3</td>
   437      </tr>
   438    </tbody>
   439  </table>
   440  
   441  In order to enable all [Autopilot](https://learn.hashicorp.com/nomad/operating-nomad/autopilot) features, all servers
   442  in a Nomad cluster must be running with Raft protocol version 3 or later.
   443  
   444  #### Upgrading to Raft Protocol 3
   445  
   446  This section provides details on upgrading to Raft Protocol 3 in Nomad 0.8 and higher. Raft protocol version 3 requires Nomad running 0.8.0 or newer on all servers in order to work. See [Raft Protocol Version Compatibility](/docs/upgrade/upgrade-specific#raft-protocol-version-compatibility) for more details. Also the format of `peers.json` used for outage recovery is different when running with the latest Raft protocol. See [Manual Recovery Using peers.json](https://learn.hashicorp.com/nomad/operating-nomad/outage#manual-recovery-using-peersjson) for a description of the required format.
   447  
   448  Please note that the Raft protocol is different from Nomad's internal protocol as shown in commands like `nomad server members`. To see the version of the Raft protocol in use on each server, use the `nomad operator raft list-peers` command.
   449  
   450  The easiest way to upgrade servers is to have each server leave the cluster, upgrade its `raft_protocol` version in the `server` stanza, and then add it back. Make sure the new server joins successfully and that the cluster is stable before rolling the upgrade forward to the next server. It's also possible to stand up a new set of servers, and then slowly stand down each of the older servers in a similar fashion.
   451  
   452  When using Raft protocol version 3, servers are identified by their `node-id` instead of their IP address when Nomad makes changes to its internal Raft quorum configuration. This means that once a cluster has been upgraded with servers all running Raft protocol version 3, it will no longer allow servers running any older Raft protocol versions to be added. If running a single Nomad server, restarting it in-place will result in that server not being able to elect itself as a leader. To avoid this, either set the Raft protocol back to 2, or use [Manual Recovery Using peers.json](https://learn.hashicorp.com/nomad/operating-nomad/outage#manual-recovery-using-peersjson) to map the server to its node ID in the Raft quorum configuration.
   453  
   454  ### Node Draining Improvements
   455  
   456  Node draining via the [`node drain`][drain-cli] command or the [drain
   457  API][drain-api] has been substantially changed in Nomad 0.8. In Nomad 0.7.1 and
   458  earlier draining a node would immediately stop all allocations on the node
   459  being drained. Nomad 0.8 now supports a [`migrate`][migrate] stanza in job
   460  specifications to control how many allocations may be migrated at once and the
   461  default will be used for existing jobs.
   462  
   463  The `drain` command now blocks until the drain completes. To get the Nomad
   464  0.7.1 and earlier drain behavior use the command: `nomad node drain -enable -force -detach <node-id>`
   465  
   466  See the [`migrate` stanza documentation][migrate] and [Decommissioning Nodes
   467  guide](https://learn.hashicorp.com/nomad/operating-nomad/node-draining) for details.
   468  
   469  ### Periods in Environment Variable Names No Longer Escaped
   470  
   471  _Applications which expect periods in environment variable names to be replaced
   472  with underscores must be updated._
   473  
   474  In Nomad 0.7 periods (`.`) in environment variables names were replaced with an
   475  underscore in both the [`env`](/docs/job-specification/env) and
   476  [`template`](/docs/job-specification/template) stanzas.
   477  
   478  In Nomad 0.8 periods are _not_ replaced and will be included in environment
   479  variables verbatim.
   480  
   481  For example the following stanza:
   482  
   483  ```text
   484  env {
   485    registry.consul.addr = "${NOMAD_IP_http}:8500"
   486  }
   487  ```
   488  
   489  In Nomad 0.7 would be exposed to the task as
   490  `registry_consul_addr=127.0.0.1:8500`. In Nomad 0.8 it will now appear exactly
   491  as specified: `registry.consul.addr=127.0.0.1:8500`.
   492  
   493  ### Client APIs Unavailable on Older Nodes
   494  
   495  Because Nomad 0.8 uses a new RPC mechanism to route node-specific APIs like
   496  [`nomad alloc fs`](/docs/commands/alloc/fs) through servers to the node,
   497  0.8 CLIs are incompatible using these commands on clients older than 0.8.
   498  
   499  To access these commands on older clients either continue to use a pre-0.8
   500  version of the CLI, or upgrade all clients to 0.8.
   501  
   502  ### CLI Command Changes
   503  
   504  Nomad 0.8 has changed the organization of CLI commands to be based on
   505  subcommands. An example of this change is the change from `nomad alloc-status`
   506  to `nomad alloc status`. All commands have been made to be backwards compatible,
   507  but operators should update any usage of the old style commands to the new style
   508  as the old style will be deprecated in future versions of Nomad.
   509  
   510  ### RPC Advertise Address
   511  
   512  The behavior of the [advertised RPC
   513  address](/docs/configuration#rpc-1) has changed to be only used
   514  to advertise the RPC address of servers to client nodes. Server to server
   515  communication is done using the advertised Serf address. Existing cluster's
   516  should not be effected but the advertised RPC address may need to be updated to
   517  allow connecting client's over a NAT.
   518  
   519  ## Nomad 0.6.0
   520  
   521  ### Default `advertise` address changes
   522  
   523  When no `advertise` address was specified and Nomad's `bind_addr` was loopback
   524  or `0.0.0.0`, Nomad attempted to resolve the local hostname to use as an
   525  advertise address.
   526  
   527  Many hosts cannot properly resolve their hostname, so Nomad 0.6 defaults
   528  `advertise` to the first private IP on the host (e.g. `10.1.2.3`).
   529  
   530  If you manually configure `advertise` addresses no changes are necessary.
   531  
   532  ## Nomad Clients
   533  
   534  The change to the default, advertised IP also effect clients that do not specify
   535  which network_interface to use. If you have several routable IPs, it is advised
   536  to configure the client's [network
   537  interface](/docs/configuration/client#network_interface)
   538  such that tasks bind to the correct address.
   539  
   540  ## Nomad 0.5.5
   541  
   542  ### Docker `load` changes
   543  
   544  Nomad 0.5.5 has a backward incompatible change in the `docker` driver's
   545  configuration. Prior to 0.5.5 the `load` configuration option accepted a list
   546  images to load, in 0.5.5 it has been changed to a single string. No
   547  functionality was changed. Even if more than one item was specified prior to
   548  0.5.5 only the first item was used.
   549  
   550  To do a zero-downtime deploy with jobs that use the `load` option:
   551  
   552  - Upgrade servers to version 0.5.5 or later.
   553  
   554  - Deploy new client nodes on the same version as the servers.
   555  
   556  - Resubmit jobs with the `load` option fixed and a constraint to only run on
   557    version 0.5.5 or later:
   558  
   559  ```hcl
   560      constraint {
   561        attribute = "${attr.nomad.version}"
   562        operator  = "version"
   563        value     = ">= 0.5.5"
   564      }
   565  ```
   566  
   567  - Drain and shutdown old client nodes.
   568  
   569  ### Validation changes
   570  
   571  Due to internal job serialization and validation changes you may run into
   572  issues using 0.5.5 command line tools such as `nomad run` and `nomad validate`
   573  with 0.5.4 or earlier agents.
   574  
   575  It is recommended you upgrade agents before or alongside your command line
   576  tools.
   577  
   578  ## Nomad 0.4.0
   579  
   580  Nomad 0.4.0 has backward incompatible changes in the logic for Consul
   581  deregistration. When a Task which was started by Nomad v0.3.x is uncleanly shut
   582  down, the Nomad 0.4 Client will no longer clean up any stale services. If an
   583  in-place upgrade of the Nomad client to 0.4 prevents the Task from gracefully
   584  shutting down and deregistering its Consul-registered services, the Nomad Client
   585  will not clean up the remaining Consul services registered with the 0.3
   586  Executor.
   587  
   588  We recommend draining a node before upgrading to 0.4.0 and then re-enabling the
   589  node once the upgrade is complete.
   590  
   591  ## Nomad 0.3.1
   592  
   593  Nomad 0.3.1 removes artifact downloading from driver configurations and places them as
   594  a first class element of the task. As such, jobs will have to be rewritten in
   595  the proper format and resubmitted to Nomad. Nomad clients will properly
   596  re-attach to existing tasks but job definitions must be updated before they can
   597  be dispatched to clients running 0.3.1.
   598  
   599  ## Nomad 0.3.0
   600  
   601  Nomad 0.3.0 has made several substantial changes to job files included a new
   602  `log` block and variable interpretation syntax (`${var}`), a modified `restart`
   603  policy syntax, and minimum resources for tasks as well as validation. These
   604  changes require a slight change to the default upgrade flow.
   605  
   606  After upgrading the version of the servers, all previously submitted jobs must
   607  be resubmitted with the updated job syntax using a Nomad 0.3.0 binary.
   608  
   609  - All instances of `$var` must be converted to the new syntax of `${var}`
   610  
   611  - All tasks must provide their required resources for CPU, memory and disk as
   612    well as required network usage if ports are required by the task.
   613  
   614  - Restart policies must be updated to indicate whether it is desired for the
   615    task to restart on failure or to fail using `mode = "delay"` or `mode = "fail"` respectively.
   616  
   617  - Service names that include periods will fail validation. To fix, remove any
   618    periods from the service name before running the job.
   619  
   620  After updating the Servers and job files, Nomad Clients can be upgraded by first
   621  draining the node so no tasks are running on it. This can be verified by running
   622  `nomad node status <node-id>` and verify there are no tasks in the `running`
   623  state. Once that is done the client can be killed, the `data_dir` should be
   624  deleted and then Nomad 0.3.0 can be launched.
   625  
   626  [dangling-containers]: /docs/drivers/docker#dangling-containers
   627  [drain-api]: /api-docs/nodes#drain-node
   628  [drain-cli]: /docs/commands/node/drain
   629  [dst]: /docs/job-specification/periodic#daylight-saving-time
   630  [gh-6787]: https://github.com/hashicorp/nomad/issues/6787
   631  [hcl2]: https://github.com/hashicorp/hcl2
   632  [limits]: /docs/configuration#limits
   633  [lxc]: /docs/drivers/external/lxc
   634  [migrate]: /docs/job-specification/migrate
   635  [plugin-stanza]: /docs/configuration/plugin
   636  [plugins]: /docs/drivers/external
   637  [preemption-api]: /api-docs/operator#update-scheduler-configuration
   638  [preemption]: /docs/internals/scheduling/preemption
   639  [reserved]: /docs/configuration/client#reserved-parameters
   640  [task-config]: /docs/job-specification/task#config
   641  [tls-guide]: https://learn.hashicorp.com/nomad/transport-security/enable-tls
   642  [tls-vault-guide]: https://learn.hashicorp.com/nomad/vault-integration/vault-pki-nomad
   643  [update]: /docs/job-specification/update
   644  [validate]: /docs/commands/job/validate
   645  [vault_grace]: /docs/job-specification/template