Nomad — HashiCorp 的"Kubernetes 杀手"还是最佳替代品?
> 一句话版本:一个轻量级工作负载编排器,单个二进制文件就能部署容器、虚拟机、Java 应用和传统程序。比 Kubernetes 简单 10 倍,能管理 10K+ 节点,但 2023 年改为 BSL 许可证后社区开始分裂。
| 项目 | 信息 | |
|---|---|---|
| 来源 | https://github.com/hashicorp/nomad | |
| 官网 | https://developer.hashicorp.com/nomad | |
| 作者 | HashiCorp | |
| 创建时间 | 2015-06-01 | |
| Stars | 16,414 | Forks 2,073 |
| 语言 | Go | |
| 许可证 | BSL 1.1(2023-08 起从 MPL 2.0 更改) | |
| 最新推送 | 2026-04-14(持续活跃) | |
| 生产用户 | PagerDuty、Target、SAP、Roblox、eBay、Citadel、Trivago、Pandora |
核心内容
一、Nomad 是什么?
Nomad 是一个通用工作负载编排器,核心能力是在一组机器上调度和运行应用程序。与 Kubernetes 专注于容器不同,Nomad 可以运行:
| 工作负载类型 | 任务驱动(Task Driver) |
|---|---|
| Docker 容器 | `docker` |
| Podman 容器 | `podman`(社区插件) |
| Java 应用 | `java` |
| 虚拟机 | `qemu` |
| 原生二进制 | `exec` / `raw exec` |
| 隔离进程 | `isolated exec`(chroot + namespace) |
| LXC/Singularity | 社区插件 |
关键卖点:单个二进制文件。不需要 etcd、不需要一堆组件,下载一个二进制就能跑起来。
二、架构设计
┌─────────────────────────────────────────────┐
│ Nomad Server(3-5 个,Raft 共识) │
│ ├── Leader 选举 │
│ ├── Job 调度(bin packing) │
│ ├── 状态管理(内置 Raft,无需 etcd) │
│ └── API + CLI + Web UI │
├─────────────────────────────────────────────┤
│ Nomad Client(每个节点一个) │
│ ├── 任务驱动(Docker/QEMU/Java/Exec...) │
│ ├── 资源上报(CPU/Memory/Disk/GPU) │
│ ├── Device Plugins(GPU/FPGA/TPU) │
│ └── 健康检查 + 自动恢复 │
├─────────────────────────────────────────────┤
│ 集成(可选) │
│ ├── Consul → 服务发现 + Service Mesh │
│ ├── Vault → 密钥管理 + 动态凭证 │
│ ├── Terraform → 基础设施编排 │
│ └── HCP Waypoint → 应用生命周期管理 │
└─────────────────────────────────────────────┘
三、核心特性
1. Job Specification(HCL 格式)
一个 Nomad Job 文件定义一个完整应用,不像 Kubernetes 需要 Deployment + Service + ConfigMap + Secret 多个文件:
job "web" {
datacenters = ["dc1"]
group "web" {
count = 3
task "nginx" {
driver = "docker"
config {
image = "nginx:latest"
}
resources {
cpu = 500
memory = 256
}
service {
name = "web"
port = "http"
}
}
}
}
2. 三种 Job 类型
| 类型 | 用途 | 特点 |
|---|---|---|
| Service | 长期运行服务 | 自动重启、滚动更新、健康检查 |
| Batch | 批处理任务 | 运行完即退出,支持参数化 |
| System | 每节点一个 | DaemonSet 等价物 |
3. Bin Packing 调度
Nomad 使用 bin packing 算法(尽量填满节点),而不是 Kubernetes 的 spread 策略(尽量分散)。优势:资源利用率更高,需要的节点更少。
4. 多区域联邦(Federation)
原生支持跨区域部署:
- 多个集群互联,Job 可以指定部署到任意区域
- ACL 策略、命名空间、资源配额自动跨集群同步
- 比 Kubernetes Federation 成熟得多
5. GPU / AI 工作负载
通过 Device Plugins 支持 GPU、FPGA、TPU:
- 自动检测硬件资源
- 支持 NVIDIA、AMD GPU
- 适合 ML/AI 训练和推理任务调度
6. 可扩展性数据
| 指标 | 数据 |
|---|---|
| 单集群最大节点 | 10,000+(生产验证) |
| 调度速度 | 数千容器/秒 |
| 乐观并发控制 | 高吞吐、低延迟 |
| Server 推荐数量 | 3 或 5(Raft 共识) |
四、Nomad vs Kubernetes
| 维度 | Nomad | Kubernetes |
|---|---|---|
| 部署复杂度 | 单二进制,零外部依赖 | 6+ 组件(etcd、api-server、scheduler...) |
| 运维成本 | 低,Operator 友好 | 高,需要专职团队 |
| 工作负载类型 | 容器 + 虚拟机 + 原生 | 仅容器 |
| 生态系统 | HashiCorp 全家桶 | CNCF 庞大生态 |
| 学习曲线 | 低(HCL 语法 + 单文件) | 高(100+ API 对象) |
| 规模上限 | 10K+ 节点 | 5K 节点(官方上限) |
| 服务发现 | Consul(可选) | CoreDNS(内置) |
| 密钥管理 | Vault(可选) | Secrets(内置但简单) |
| 社区规模 | 较小 | 庞大 |
| Windows 支持 | 原生 | 支持(复杂) |
| 多集群联邦 | 原生成熟 | 实验性 |
五、BSL 许可证变更(2023-08)
这是 Nomad 最大的转折点。
2023 年 8 月,HashiCorp 宣布所有核心产品(包括 Nomad、Terraform、Vault、Consul)从 MPL 2.0(真正开源)改为 BSL 1.1(Business Source License):
- BSL 1.1 限制:不能在竞争性产品中使用,不能作为托管服务提供
- 转换条款:代码将在发布后 4 年自动转为 AGPL(目前 2023 年 8 月之前的版本仍是 MPL 2.0)
- 实际影响:云厂商(AWS、GCP)不能再提供 Nomad 托管服务,但普通用户使用不受影响
- 社区反应:Terraform 社区成功 Fork 出 OpenTofu,但 Nomad 没有 OpenTofu 级别的 Fork——Nomad 太复杂,社区无力维护替代品
- 当前状态:BSL 变更后 Nomad 仍持续更新,GitHub 活跃度未明显下降
六、生态与集成
HashiCorp 全家桶:
Terraform → 基础设施创建(云资源、网络、安全组)
↓
Packer → 镜像构建(AMI、Docker Image)
↓
HCP Waypoint → 应用构建 + 部署(PaaS 抽象层)
↓
Nomad → 工作负载编排(运行应用)
↓
Consul → 服务发现 + Service Mesh
↓
Vault → 密钥管理 + 动态凭证
↓
Boundary → 零信任访问控制
Sentinel 策略即代码:
- 内置策略引擎,用 Go-like 语法写策略
- 可以限制部署条件(镜像必须来自指定 registry、必须通过安全扫描等)
- 类似 OPA/Kyverno 但深度集成
分析
优势
1. 极简运维:单二进制部署,没有 etcd 爆炸半径,运维成本比 K8s 低一个数量级
2. 真正通用:不只是容器编排,能运行任何类型的工作负载
3. 生产验证:PagerDuty、Roblox、SAP 等大厂在生产环境运行 10K+ 节点
4. 资源效率:bin packing 调度,同等负载需要的节点更少
5. 多区域成熟:联邦方案经过生产验证,比 K8s Federation 靠谱得多
6. GPU 原生:AI/ML 工作负载调度有专门支持
7. HCL 一致性:Terraform 用户零学习成本
劣势与风险
1. BSL 许可证:不再是真正的开源,云厂商和竞争产品受限
2. 社区规模:相比 K8s 生态小得多,第三方集成少
3. 没有 OpenTofu 级 Fork:如果 HashiCorp 出问题,社区无力接管
4. HashiCorp 依赖:最佳实践依赖 Consul + Vault,全部 BSL 许可
5. Windows 支持虽然原生但生态弱:文档和社区经验集中在 Linux
6. K8s 惯性:大多数企业和招聘市场已锁定 Kubernetes
7. Waypoint 发展缓慢:PaaS 抽象层进展不如预期
与 Jay 的关联
- OpenClaw 部署:如果 Jay 的 OpenClaw 需要扩展到多节点,Nomad 是比 K8s 更轻量的选择
- AI Agent 基础设施:Nomad 的 GPU 调度 + bin packing 适合跑多个 AI 推理服务
- 当前不需要:Jay 目前是单台 VPS,Nomad 的多节点编排能力暂时用不上
- 长期价值:如果项目扩展到多服务器(比如跑多个 Agent 实例 + GPU 推理),Nomad 的学习路径比 K8s 短得多
- Polymarket 项目:如果需要高可用的交易基础设施,Nomad + Consul + Vault 是成熟的组合
评分
| 维度 | 评分 (1-10) | 说明 |
|---|---|---|
| 技术质量 | 9 | Go 实现、Raft 共识、10K 节点生产验证 |
| 架构设计 | 9 | 单二进制 + Unix 哲学 + 插件化,优雅 |
| 易用性 | 8 | HCL 单文件定义,比 K8s 简单很多 |
| 生态系统 | 6 | HashiCorp 全家桶强,但外部生态弱于 K8s |
| 社区活力 | 6 | BSL 后社区有分裂风险,无 OpenTofu 级 Fork |
| 创新性 | 7 | 通用工作负载调度理念领先,但不是新项目 |
| 许可证 | 4 | BSL 1.1 不再是真正开源 |
| 与 Jay 的关联 | 5 | 当前单机不需要,多节点扩展时有价值 |
| **总分** | **6.8** | 技术上优秀但 BSL 和 K8s 惯性是最大障碍 |
附录:什么时候选 Nomad 而不是 Kubernetes?
| 场景 | 推荐 |
|---|---|
| 需要跑容器 + 虚拟机 + 传统应用 | ✅ Nomad |
| 小团队(< 5 人运维) | ✅ Nomad |
| 已用 Terraform + Consul + Vault | ✅ Nomad |
| 需要多区域联邦 | ✅ Nomad |
| 需要庞大 CNCF 生态 | ❌ Kubernetes |
| 需要 Helm Charts 生态 | ❌ Kubernetes |
| 需要 K8s 认证求职 | ❌ Kubernetes |
| 大企业 + 专职运维团队 | 两者皆可 |