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 detected | Docker 未安装 | 在 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 年