nomad

Announcing General Availability of HashiCorp Nomad 0.12

We are pleased to announce the general availability of HashiCorp Nomad 0.12. Nomad is a simple and flexible orchestrator to deploy and manage containers and non-containerized applications across on-premises and cloud environments at scale. Nomad is widely adopted and used in production by organizations like Cloudflare, Roblox, Pandora, PagerDuty, and more.

Nomad 0.12 introduces our breakthrough Multi-Cluster Deployment feature, which makes Nomad the first and only orchestrator on the market with complete and fully-supported federation capabilities for production.

This release also delivers 15+ new and powerful features with thematic emphasis on application deployment flexibility and operator maintainability at scale.

To watch a live demo of these new features, please register below.

Live Demo

Nomad 0.12 includes the following major features:

  • Multi-Cluster Deployment (Enterprise - Beta): Deploy applications seamlessly to federated Nomad clusters with configurable rollout and rollback strategies. Achieve simple and elegant federated deployments without the architectural complexity and overhead of clusters on clusters. In contrast, the industry approach (Mesos, Kubernetes) has been two-layer scheduling, requiring organizations to provision and maintain new clusters on top of existing clusters to achieve federation.

  • Spread Scheduling: Deploy applications across a cluster evenly for greater load distribution with the new spread scheduling feature. Use this as an alternative to bin packing.

  • Container Network Interface (CNI): Deploy containerized applications on Nomad with their desired network configurations from any third-party vendors you choose via the CNI plugin system.

  • Multi-Interface Networking: Bind applications to their desired network interface. Nomad now automatically fingerprints all interfaces and IP addresses on a Nomad client to support modern networking patterns.

  • Soft Memory Limits: Enable memory oversubscription for applications deployed with the Docker task driver for memory consumption flexibility.

  • Windows IIS Task Driver: Deploy and manage ASP.NET, PHP, and other Windows-based web applications on Nomad without needing to containerize them with Windows IIS task driver.

  • Podman Task Driver: Deploy and manage first-class OCI containers as an alternative to Docker with the Podman task driver — most applicable for RHEL and CentOS environments.

  • Cluster Autoscaling (Beta): Autoscale Nomad nodes in a cluster based on real-time load using a first-class integration with AWS Auto Scaling Groups (ASG).

  • Nomad Snapshot: Capture and save point-in-time snapshots of Nomad cluster state with a single command for easy disaster recovery and backup.

  • Nomad Debug: Generate a diagnostic bundle of logs across the entire Nomad cluster with a single command for easier ticket creation and faster support from HashiCorp.

  • Global Search (UI): Jump to desired jobs and client pages from anywhere in the UI with a new search box that populates with real-time suggestions across the cluster.

  • Nomad Monitor (UI): Stream node and server logs remotely through the UI.

  • Job Scaling (UI): Scale up or down application deployments through the UI with a click of a button.

  • Preemption (OSS): Automatically evict lower priority application deployments in favor of higher priority applications when the targeted nodes are at capacity. This Enterprise feature is now available in open source for service, batch, and system jobs.

  • Cross-Namespace Queries (Enterprise): Query jobs and allocations across all namespaces for faster operator debugging and visibility in multi-tenant clusters.

  • Automated Backups (Enterprise): Enables automatic snapshotting and storing of Nomad cluster state locally or to a cloud storage service of choice.

» Multi-Cluster Deployment - Beta (Enterprise)

Users can now deploy applications to federated Nomad clusters with flexible and configurable rollout and rollback strategies. With Multi-Cluster Deployment, Nomad’s federation functionality extends to application deployment — enabling users to achieve a single, unified control and monitoring plane for all their clusters.

For more information on multi-cluster deployment, please see the dedicated feature blog here.

» Cluster Autoscaling - Beta

In Nomad 0.11, we introduced native horizontal application autoscaling in Nomad with the Nomad Autoscaler. In Nomad 0.12, the Nomad Autoscaler graduates to beta while expanding its functionality to horizontal cluster autoscaling. Users can now dynamically and natively scale up and scale down Nomad client nodes with a first-class integration for AWS ASGs (autoscaling groups).

For a deep dive into the Nomad Autoscaler, please see the presentation and hands-on demo from Nomad Engineering at HashiConf Digital here and read the dedicated feature blog here.

» Spread Scheduling

With spread scheduling, users can now deploy applications evenly across their Nomad cluster to achieve greater load distribution. While bin-packing (Nomad’s default scheduling) optimizes for resource utilization and scheduling density, spread scheduling improves availability and performance. Spread scheduling deploys applications by prioritizing placement on least-utilized nodes, distributing risk, and minimizing impacts in cases of node outages.

server {
  default_scheduler_config {
    scheduler_algorithm = "spread"

    preemption_config {
      batch_scheduler_enabled   = true
      system_scheduler_enabled  = true
      service_scheduler_enabled = true
    }
  }
}

Users can choose between bin-packing or spread scheduling depending on their needs. The chosen scheduling algorithm applies for all applications deployed on the cluster.

» Soft Memory Limits

Users can now enable memory oversubscription for applications deployed with the Docker task driver for greater flexibility in memory consumption.

task "redis" {
  driver = "docker"
  config {
    image = "redis:3.2"
    memory_hard_limit = 512
    resources {
      cpu    = 500
      memory = 256
    }
  }
}

Nomad 0.12 introduces a new optional parameter of memory_hard_limit to the Docker task driver. When specified, the existing memory parameter and its input serves as the soft limit. For more details, please refer to the Docker task driver documentation.

» Preemption

With preemption configured, users can set Nomad to automatically evict lower-priority applications in favor of deploying higher-priority applications when nodes are at capacity.

Preemption is now available in open source for service, batch, and system jobs. For more details, please refer to the preemption documentation.

» Container Network Interface (CNI)

Users can now deploy containerized applications on Nomad with their desired network configurations from third-party vendors via the CNI plugin system. This enables Nomad users to easily integrate workloads with container networking vendors such as Calico, Cilium, and WeaveNet.

For more information on CNI, please see the dedicated feature blog here.

» Multi-Interface Networking

Users can now bind applications to their desired network interface as Nomad now automatically fingerprints all interfaces on a Nomad client node. This feature directly supports modern networking patterns of multi-VLAN environments which run multiple virtual interfaces on each host node — the most common pattern of having user-facing applications on a public interface and internal applications on a private interface.

Users can now define multiple host networks in their Nomad client configuration with the introduction of the new host_network parameter in the port block. For more information on CNI, please see the dedicated feature blog here.

» Nomad Snapshot

The new Nomad snapshot feature enables users to capture and save point-in-time snapshots of their Nomad cluster state with a single command.

$ nomad snapshot save backup.snap

Each snapshot includes information on jobs, allocations, periodic jobs, and ACLs. Organizations can now achieve a native and simplified back-up-and-restore solution within Nomad for disaster recovery purposes.

An automated version of Nomad snapshot is available in Nomad Enterprise as Automated Backups. This enterprise feature enables automatic snapshotting and storing of Nomad cluster state locally or in a cloud storage service of your choice, such as Amazon S3.

For more details, please refer to the snapshot save documentation.

» Nomad Debug

The new Nomad debug feature generates a diagnostic bundle of logs across the entire Nomad cluster with a single command.

$ nomad debug 
Created debug archive: nomad-debug-2020-06-10-145821Z.tar.gz

For Nomad Enterprise customers, this feature enables easier ticket creation and faster support. No more time lost in chasing logs or email back-and-forth with HashiCorp support. Diagnostic bundles contain Nomad cluster configurations and state, including server and client node logs with options for further information.

For more details, please refer to the debug command documentation.

» Cross-Namespace Queries

The new enterprise feature allows operators to query jobs and allocations across all namespaces for faster debugging and better visibility in multi-tenant clusters.

$ nomad alloc status -namespace=*
$ nomad job status -namespace=*

By setting namespace to '*', job and alloc subcommands query all namespaces authorized to users. This feature helps operators accelerate and simplify debugging by easily locating faulty jobs and allocations reported by developers and enables a prescriptive, secure, and scalable support workflow for operating Nomad in a self-service model. For more details, please refer to cross-namespace queries documentation.

» Windows IIS Task Driver

Deploy and manage ASP.NET, PHP, and other Windows-based web applications on Nomad without needing to containerize them through the Windows IIS task driver. Thank you to our valued customer Roblox for creating, maintaining, and contributing to this task driver to the Nomad community.

task "iis-test" {
  driver = "win_iis"
  config {
    path = "C:\\inetpub\\wwwroot"
    apppool_identity {
      identity = "SpecificUser"
      username = "vagrant"
      password = "vagrant"
    }
    resources {
      cpu    = 100
      memory = 20
      network {
        port "httplabel" {}
      }
    }
  }
}

In the near future, we'll publish a dedicated blog and host a joint webinar to demonstrate this new feature and real-world use cases. Check this GitHub repo for more information.

» Podman Task Driver

Nomad 0.12 introduces the Podman task driver as a new and supported container runtime. This is applicable for users in RHEL/CentOS environments where Docker is no longer officially supported. Thank you to our community member Thomas Weber and his organization pascom for contributing to the early beginnings of this task driver.

task "redis" {
  driver = "podman"
  config {
    image = "docker://redis:3.2"
    resources {
      cpu    = 500
      memory = 256
    }
  }
}

For more information on Podman Task Driver, please see the dedicated guest blog from Thomas here.

» Global Search (UI)

Users can now jump to desired jobs and client pages from anywhere in the UI through a new search box that populates with real-time suggestions across the cluster.

» Job Scaling (UI)

Users can now scale up or down application deployments through the UI with a click of a button.

» Nomad Monitor (UI)

In Nomad 0.12, nomad monitor has been extended to the UI. Users can now stream node and server logs remotely through the UI.

» Conclusion

Thank you to the community for providing feedback on the beta and release candidate versions of Nomad 0.12. The full list of changes can be viewed in the v0.12 changelog. Learn more about Nomad at the HashiCorp Learn website. To start a free trial of Nomad Enterprise, please sign up here.


Sign up for the latest HashiCorp news