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