Kubernetes vs Nomad: Side-by-Side Comparison

Jasbirs
Google Cloud - Community
5 min readNov 30, 2022

Kubernetes is an orchestration system for containers originally designed by Google, now governed by the Cloud Native Computing Foundation (CNCF) and developed by Google, Red Hat, and many others. Kubernetes has become an enormously popular choice for containerized applications since its launch in 2014. Kubernetes aims to provide all the features needed to run Linux container-based applications including cluster management, scheduling, service discovery, monitoring, secrets management and more. Many software/application developers rely on the tool. However, there are other choices on the market for container orchestration.

One such tool is Nomad, originally launched in 2015 by Hashicorp. Generally pitched as an alternative to Kubernetes, Nomad, promotes itself as a simple, flexible option for software/application teams. Nomad only aims to focus on cluster management and scheduling and is designed with the Unix philosophy of having a small scope while composing with tools like Consul for service discovery/service mesh and Vault for secret management.

This article will offer a comparison of the two container orchestration tools, so you can decide which will work best for your respective applications/software/systems.

Kubernetes vs Nomad: Similarities

Kubernetes and Nomad are both open-source tools that are built for container orchestration and to support similar use cases. As a result, both carry a number of common features:

Automated Scheduling

Kubernetes uses filters and scores to keep a ranking of feasible machines that pods can bind to. The platform uses factors such as resource requirements, inter-workload interference, policy constraints, and affinity specifications to keep a record of healthy nodes.

Nomad automates workload scheduling by using an evaluation process to change a node’s state and match it with a job’s desired state.

Auto-Recovery and Self-Healing Deployments

Kubernetes reschedules pods to the healthiest available node in case one worker machine fails. Kubernetes deployment environments also include capabilities like scale sets and autoscaling groups that enable self-healing nodes.

Nomad ensures self-healing by checking every node’s emergent state. A failure in the client node’s state triggers a new evaluation, after which Nomad tries to reconcile the emergent state with the system’s desired state.

Rollout and Rollback Strategies

Kubernetes uses ReplicaSets to maintain an application’s desired state. With rolling updates as one of its default deployment strategies, Kubernetes allows a gradual process to replace pods, one at a time. Through rollbacks, Kubernetes also allows the deployment to be updated to an earlier desired state.

Nomad enables rolling updates by limiting parallelism and interfacing with HashiCorp’s monitoring to determine the health of the service. In cases of deployment failures or unhealthy configurations, Nomad automatically rolls back to an older healthy service based on the defined update strategy.

Nomad and Kubernetes Storage Orchestration

Both Nomad and Kubernetes support various third-party plugins that conform to the Container Storage Interface (CSI) standard, allowing applications to attach with external storage volumes. By allowing storage consumption from public/private clouds or bare-metal on-premises infrastructure, both platforms allow efficient storage orchestration to maintain stateful workloads.

Kubernetes vs Nomad: Differences

Though both platforms are meant for container orchestration, Nomad and Kubernetes have a few fundamental differences, including:

Simplicity

Kubernetes is designed as a collection of more than a half-dozen interoperating services which together provide the full functionality. Coordination and storage is provided by etcd at the core. The state is wrapped by API controllers which are consumed by other services that provide higher level APIs for features like scheduling. Kubernetes supports running in a highly available configuration but is operationally complex to setup.

Nomad is architecturally much simpler. Nomad is a single binary, both for clients and servers, and requires no external services for coordination or storage. Nomad combines a lightweight resource manager and a sophisticated scheduler into a single system. By default, Nomad is distributed, highly available, and operationally simple.

Flexible Workload Support

While Kubernetes is specifically focused on Linux containers, Nomad is more general purpose. Nomad supports virtualized, containerized and standalone applications, including Docker, Java, IIS on Windows, Qemu, etc. Nomad is designed with extensible drivers and support will be extended to all common drivers.

Consistent Deployment

A full Kubernetes installation for a production environment is time consuming, operationally complex, and resource intensive. An increasing number of implementations are created by the Kubernetes community to mitigate these challenges, such as minikube, kubeadm, k3s, and more. These trimmed versions of Kubernetes offer easier adoption for development and testing, but lead to inconsistency in capabilities, configuration, and management when moving into production.

In contrast to Kubernetes’ fragmented distributions, Nomad as a single lightweight binary can be deployed in local dev, production, on-prem, at the edge, and in the cloud in a consistent manner, and provides the same operational ease-of-use across all environments.

Scalability

Kubernetes documentation states that they support clusters up to 5,000 nodes and 300,000 total containers. As the environment grows, the interoperating components with different constraints compound the operational complexity. Even operators at Google revealed the significant challenges of managing the system at scale. The lack of maturity in the Federation project and the additional overhead of managing a centralized management plane also make it a hard experience to deploy a distributed system that spans multiple clusters.

Nomad has been proven to scale to cluster sizes that exceed 10,000 nodes in real-world production environments. It can be deployed across multiple availability zones, regions, and data centers with a single cluster or multiple clusters. Nomad is designed to natively handle multi-cluster deployments without the overhead of running clusters on clusters. This makes it easier to scale the application deployment across multiple datacenters, regions, and clouds with no additional complexity.

Which one to Use

Kubernetes platform with extensive community support, enhanced portability and flexibility, Open Source, Multicloud support, is considered perfect for organisations already running applications on Linux containers and have the right skillset to manage its complex ecosystem.

Nomad is a general purpose orchestrating platform that can be used to manage clusters of legacy applications, traditional batch jobs. Nomad advantages like easy to learn and use, requiring less configuration management, being platform agnostic, supports both Windows- and Linux-based containers, makes it ideal for organisations just getting started with container orchestration.

Summary

As compared with Kubernetes, Nomad isn’t a close competitor yet but is an emerging disruptor in the container orchestrator world, offering simpler, more scalable deployments using a single, portable binary agent.

Both platforms, while built to orchestrate containers in clusters, have different features and functions that support different use-cases.

--

--

Jasbirs
Google Cloud - Community

Strategic cloud Engineer, Infrastructure, Application Development, Machine Learning@Google Cloud