Nomad v0.9.0 Release Notes

Release Date: 2019-04-09 // about 5 years ago
  • BACKWARDS INCOMPATIBILITIES:

    • core: Drop support for CentOS/RHEL 6. glibc >= 2.14 is required.
    • core: Switch to structured logging using go-hclog. If you have tooling that parses Nomad's logs, the format of logs has changed and your tools may need updating.
    • core: IOPS as a resource is now deprecated [GH-4970]. Nomad continues to parse IOPS in jobs to allow job authors time to remove iops from their jobs.
    • core: Allow the != constraint to match against keys that do not exist [GH-4875]
    • client: Task config validation is more strict in 0.9. For example unknown parameters in stanzas under the task config were ignored in previous versions but in 0.9 this will cause a task failure.
    • client: Task config interpolation requires names to be valid identifiers (node.region or NOMAD_DC). Interpolating other variables requires a new indexing syntax: env[".invalid.identifier."]. [GH-4843]
    • client: Node metadata variables must have valid identifiers, whether specified in the config file (client.meta stanza) or on the command line (-meta). [GH-5158]
    • driver/lxc: The LXC driver is no longer packaged with Nomad and is instead distributed separately as a driver plugin. Further, the LXC driver codebase is now in a separate repository. If you are using LXC, please follow the 0.9.0 upgrade guide as you will have to install the LXC driver before conducting an in-place upgrade to Nomad 0.9.0 [GH-5162]

    ๐Ÿ”‹ FEATURES:

    • Affinities and Spread: Jobs may now specify affinities towards certain node attributes. Affinities act as soft constraints, and inform the scheduler that the job has a preference for certain node properties. The new spread stanza informs the scheduler that allocations should be spread across a specific property such as datacenter or availability zone. This is useful to increase failure tolerance of critical applications.
    • System Job Preemption: System jobs may now preempt lower priority allocations. The ability to place system jobs on all targeted nodes is critical since system jobs often run applications that provide services for all allocations on the node.
    • Driver Plugins: Nomad now supports task drivers as plugins. Driver plugins operate the same as built-in drivers and can be developed and distributed independently from Nomad.
    • Device Plugins: Nomad now supports scheduling and mounting devices via device plugins. Device plugins expose hardware devices such as GPUs to Nomad and instruct the client on how to make them available to tasks. Device plugins can expose the health of devices, the devices attributes, and device usage statistics. Device plugins can be developed and distributed independently from Nomad.
    • Nvidia GPU Device Plugin: Nomad builds-in a Nvidia GPU device plugin to add out-of-the-box support for scheduling Nvidia GPUs.
    • Client Refactor: Major focus has been put in this release to refactor the Nomad Client codebase. The goal of the refactor has been to make the codebase more modular to increase developer velocity and testability.
    • Mobile UI Views: The side-bar navigation, breadcrumbs, and various other page elements are now responsively resized and repositioned based on your browser size.
    • Job Authoring from the UI: It is now possible to plan and submit new jobs, edit existing jobs, stop and start jobs, and promote canaries all from the UI.
    • Improved Stat Tracking in UI: The client detail, allocation detail, and task detail pages now have line charts that plot CPU and Memory usage changes over time.
    • Structured Logging: Nomad now uses structured logging with the ability to output logs in a JSON format.

    ๐Ÿ‘Œ IMPROVEMENTS:

    • core: Added advertise address to client node meta data [GH-4390]
    • core: Added support for specifying node affinities. Affinities allow job operators to specify weighted placement preferences according to different node attributes [GH-4512]
    • core: Added support for spreading allocations across a specific attribute. Operators can specify spread target percentages across failure domains such as datacenter or rack [GH-4512]
    • core: Added preemption support for system jobs. System jobs can now preempt other jobs of lower priority. See preemption for more details. [GH-4794]
    • acls: Allow support for using globs in namespace definitions [GH-4982]
    • agent: Support JSON log output [GH-5173]
    • api: Reduced api package dependencies [GH-5213]
    • client: Extend timeout to 60 seconds for Windows CPU fingerprinting [GH-4441]
    • client: Refactor client to support plugins and improve state handling [GH-4792]
    • client: Updated consul-template library to pick up recent fixes and improvements[GH-4885]
    • client: When retrying a failed artifact, do not download any successfully downloaded artifacts again [GH-5322]
    • client: Added service metadata tag that enables the Consul UI to show a Nomad icon for services registered by Nomad [GH-4889]
    • cli: Added support for coloured output on Windows [GH-5342]
    • driver/docker: Rename Logging type to driver [GH-5372]
    • driver/docker: Support logs when using Docker for Mac [GH-4758]
    • driver/docker: Added support for specifying storage_opt in the Docker driver [GH-4908]
    • driver/docker: Added support for specifying cpu_cfs_period in the Docker driver [GH-4462]
    • driver/docker: Added support for setting bind and tmpfs mounts in the Docker driver [GH-4924]
    • driver/docker: Report container images with user friendly name rather than underlying image ID [GH-4926]
    • driver/docker: Add support for collecting stats on Windows [GH-5355] drivers/docker: Report docker driver as undetected before first connecting to the docker daemon [GH-5362]
    • drivers: Added total memory usage to task resource metrics [GH-5190]
    • server/rpc: Reduce logging when undergoing temporary network errors such as hitting file descriptor limits [GH-4974]
    • server/vault: Tweaked logs to better identify vault connection errors [GH-5228]
    • server/vault: Added Vault token expiry info in nomad status CLI, and some improvements to token refresh process [GH-4817]
    • telemetry: All client metrics include a new node_class tag [GH-3882]
    • telemetry: Added new tags with value of child job id and parent job id for parameterized and periodic jobs [GH-4392]
    • ui: Improved JSON editor [GH-4541]
    • ui: Mobile friendly views [GH-4536]
    • ui: Filled out the styleguide [GH-4468]
    • ui: Support switching regions [GH-4572]
    • ui: Canaries can now be promoted from the UI [GH-4616]
    • ui: Stopped jobs can be restarted from the UI [GH-4615]
    • ui: Support widescreen format in alloc logs view [GH-5400]
    • ui: Gracefully handle errors from the stats end points [GH-4833]
    • ui: Added links to Jobs and Clients from the error page template [GH-4850]
    • ui: Jobs can be authored, planned, submitted, and edited from the UI [GH-4600]
    • ui: Display recent allocations on job page and introduce allocation tab [GH-4529]
    • ui: Refactored breadcrumbs and adjusted the breadcrumb paths on each page [GH-4458]
    • ui: Switching namespaces in the UI will now always "reset" back to the jobs list page [GH-4533]
    • ui: CPU and Memory metrics are plotted over time during a session in line charts on node detail, allocation detail, and task detail pages [GH-4661], [GH-4718], [GH-4727]

    ๐Ÿ› BUG FIXES:

    • core: Removed some GPL code inadvertently added for macOS support [GH-5202]
    • core: Fix an issue where artifact checksums containing interpolated variables failed validation [GH-4810]
    • core: Fix an issue where job summaries for parent dispatch/periodic jobs were not being computed correctly [GH-5205]
    • core: Fix an issue where a canary allocation with a deployment no longer in the state store caused a panic [GH-5259
    • client: Fix an issue reloading the client config [GH-4730]
    • client: Fix an issue where driver attributes are not updated in node API responses if they change after after startup [GH-4984]
    • driver/docker: Fix a path traversal issue where mounting paths outside alloc dir might be possible despite docker.volumes.enabled set to false [GH-4983]
    • driver/raw_exec: Fix an issue where tasks that used an interpolated command in driver configuration would not start [GH-4813]
    • drivers: Fix a bug where exec and java drivers get reported as detected and healthy when nomad is not running as root and without cgroup support
    • quota: Fixed a bug in Nomad enterprise where quota specifications were not being replicated to non authoritative regions correctly.
    • scheduler: When dequeueing evals ensure workers wait to the proper Raft index [GH-5381]
    • scheduler: Allow schedulers to handle evaluations that are created due to previous evaluation failures [GH-4712]
    • server/api: Fixed bug when trying to route to a down node [GH-5261]
    • server/vault: Fixed bug in Vault token renewal that could panic on a malformed Vault response [GH-4904], [GH-4937]
    • template: Fix parsing of environment templates when destination path is interpolated [GH-5253]
    • ui: Fixes for viewing objects that contain dots in their names [GH-4994]
    • ui: Correctly labeled certain classes of unknown errors as 404 errors [GH-4841]
    • ui: Fixed an issue where searching while viewing a paginated table could display no results [GH-4822]
    • ui: Fixed an issue where the task group breadcrumb didn't always include the namesapce query param [GH-4801]
    • ui: Added an empty state for the tasks list on the allocation detail page, for when an alloc has no tasks [GH-4860]
    • ui: Fixed an issue where dispatched jobs would get the wrong template type which could cause runtime errors [GH-4852]
    • ui: Fixed an issue where distribution bar corners weren't rounded when there was only one or two slices in the chart [GH-4507]