Nomad is an open source orchestrator used to deploy and manage applications across different computing environments. It helps the deployment of containerized, VM based, or standalone applications on various infrastructures, including public, private, and hybrid clouds.
On your first visit to the site, you will be presented with the login/signup screen.
When your instance is first created, an account is created for you with the email you chose. You can get the password for this account by going to your Elestio dashboard and clicking on the "Show Password" button.
Enter your username and password and click the "Sign in" button.
Job definition is a configuration file, written in HashiCorp Configuration Language (HCL) or JSON, that describes the work Nomad should schedule and run on client nodes. It includes details like the job ID, job type, data centers to run the job, task groups, and individual tasks. Each task specifies the driver to use (like Docker or Java), the source of the task's executable, and required resources. The job definition provides Nomad with all necessary information to manage the application's lifecycle, handle failures and retries, and perform updates and rollbacks.
Client is a machine that is responsible for running tasks. Clients register themselves with the servers in a Nomad cluster and report their available resources. The Nomad servers then schedule tasks on these clients based on their resource availability and the requirements of the tasks. Each client runs a Nomad agent in client mode, which is responsible for running tasks, reporting resource usage, and communicating with the Nomad servers. Clients can be any machine that can run the Nomad agent, including physical servers, virtual machines, or containers in a cloud environment.
Evaluation is a scheduling decision made by the Nomad servers. When a job is submitted, updated, or when a node fails, an evaluation is created. The evaluation takes into account the current state of the cluster, the defined job requirements, and the scheduling algorithm to determine how to best distribute and allocate tasks across the client nodes. The evaluation process may result in creating, updating, or migrating allocations, which are specific instances of tasks running on client nodes. Evaluations are a key part of Nomad's scheduling and task placement process.
Servers are the components that make scheduling decisions and coordinate task execution across client nodes. Servers maintain the cluster state, respond to queries, and schedule jobs. They operate in a highly available configuration, where data is replicated across multiple servers, and they use the Raft consensus protocol to handle leader election and state replication. A Nomad cluster has a small number of servers and can manage thousands of client nodes. Servers run the Nomad agent in server mode and are the "brains" of a Nomad cluster, while the clients do the "work" of running the tasks.
Topology is the arrangement and interconnections of servers and clients within a Nomad cluster. This includes the number and location of servers and clients, their network connections, and the distribution of tasks across clients. Nomad's topology is flexible and can be adapted to different environments, from a single machine to a global, multi-datacenter setup. Nomad servers, which make scheduling decisions, maintain a view of the cluster topology to effectively distribute and manage tasks. Understanding the topology is crucial for configuring Nomad to ensure high availability, fault tolerance, and efficient resource utilization.
Variables are used within job definitions to inject dynamic or environment specific values. Variables can be used to parameterize various parts of a job definition, such as image names, resource requirements, or environment variables for a task. Nomad supports environment variables, meta variables, attribute references, and node variables. Environment variables can be passed to tasks, while meta variables are user-defined key-value pairs. Attribute references allow access to client attributes, and node variables provide information about the specific client node a task is running on. Variables make job definitions more flexible and reusable across different environments or scenarios.
Volumes are used for persistent data storage and sharing data between tasks. Nomad supports two types of volumes: host volumes and CSI (Container Storage Interface) volumes. Host volumes allow tasks to access directories on the host file system, while CSI volumes provide a standardized interface for using storage systems with container orchestrators. Volumes are defined in the job specification and can be mounted into tasks, providing a place to store data that persists beyond the lifecycle of individual tasks. This is particularly useful for stateful applications that need to persist data across restarts or migrations.