跳转至

Nomad 任务调度

一句话概述:Nomad 是 HashiCorp 出品的轻量级任务调度器,比 Kubernetes 简单得多,可以调度 Docker 容器、Java 应用、批处理任务等各种工作负载。

核心知识点

概念白话解释
Job作业 = 要运行的工作描述(如"跑一个 Web 服务")
Task Group任务组 = 一组需要一起运行的任务
Task任务 = 一个具体的进程(如一个 Docker 容器)
Driver驱动 = 用什么方式运行任务(docker/exec/java)
Allocation分配 = 任务被调度到某台机器上运行的实例
Client客户端 = 真正干活的机器节点
Server服务端 = 负责调度决策的管理节点

安装配置

# macOS
brew install nomad  # Homebrew 安装

# Ubuntu
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg  # 导入密钥
sudo apt update && sudo apt install nomad  # 安装

# 开发模式启动(单节点,学习用)
nomad agent -dev  # 启动开发模式(Server+Client 一体)

# 查看状态
nomad status  # 查看集群状态

基本使用

1. 运行 Docker 容器

# webapp.nomad.hcl
job "webapp" {
  datacenters = ["dc1"]  # 数据中心
  type = "service"  # 类型:服务(持续运行)

  group "web" {
    count = 3  # 运行 3 个实例

    network {
      port "http" { to = 8080 }  # 映射端口
    }

    task "server" {
      driver = "docker"  # 使用 Docker 驱动

      config {
        image = "nginx:latest"  # Docker 镜像
        ports = ["http"]  # 使用定义的端口
      }

      resources {
        cpu    = 500   # 500 MHz CPU
        memory = 256   # 256 MB 内存
      }
    }
  }
}
nomad job run webapp.nomad.hcl  # 提交作业
nomad job status webapp  # 查看作业状态
nomad alloc status <alloc-id>  # 查看分配详情
nomad job stop webapp  # 停止作业

2. 批处理任务(生信分析)

job "fastqc-analysis" {
  type = "batch"  # 批处理类型(跑完就停)
  datacenters = ["dc1"]

  group "analysis" {
    task "fastqc" {
      driver = "docker"
      config {
        image = "biocontainers/fastqc:v0.12.1"
        command = "fastqc"
        args = ["/data/*.fastq.gz", "-o", "/output"]
        volumes = ["/data:/data", "/output:/output"]
      }
      resources { cpu = 2000; memory = 4096 }
    }
  }
}

常见报错

报错信息原因解决方法
No nodes eligible for evaluation没有可用节点检查 Client 是否在线
Driver docker is not detectedDocker 未安装在 Client 上安装 Docker
Failed to place all allocations资源不足增加节点或减少资源需求

速查表

nomad agent -dev         # 开发模式启动
nomad job run <file>     # 提交作业
nomad job status <name>  # 查看状态
nomad job stop <name>    # 停止作业
nomad alloc logs <id>    # 查看日志
nomad node status        # 查看节点
nomad server members     # 查看服务端成员

参考:Nomad 文档 | 更新于 2026 年