先给判断:Nomad 是眼下少数几个用一个二进制,就把容器、可执行文件、Java 程序和虚拟机放在一起编排的项目。README 里那句自包含不是营销话——它确实不需要任何外部服务来做存储或协调。项目活着,最新的 2.0.6 就在本轮抓取前一周发出。但有两个坑必须提前看清:许可从 1.7.0 起换成了 BUSL-1.1,授权方一栏写的是 IBM,附加授权给的生产使用权带竞品排除条件;企业版集群不能降级回开源版,官方原文说,开源服务端一旦加入企业集群会直接 panic。
痛点很具体:为了跑三五个容器、几个定时批处理和两个要吃 GPU 的小服务,先得把整套控制面搭起来——键值存储、接口服务、控制器、网络插件、入口网关、证书轮换,一样都不能少。很多人缺的不是编排能力,而是一个不需要专职运维团队的编排器。

一、它到底是什么:一个二进制,三类负载

README 的第一句话就把范围划完了,原文是:

Nomad is a simple and flexible workload orchestrator to deploy and manage
containers (docker, podman), non-containerized applications (executable,
Java), and virtual machines (qemu) across on-prem and clouds at scale.

翻成人话:能跑容器,也能直接跑可执行文件和 Java 程序,还能拉起虚拟机。支持 Linux、Windows 和 macOS。同时存在一个商业版本,README 里就一句:

A commercial version of Nomad, Nomad Enterprise, is also available.

三类负载对应三组驱动,边界很清楚:

负载驱动说明
容器docker / podman最常用的一层;Docker 必须装在同一台宿主上并与 Nomad 并存
非容器应用exec / java老程序不用先容器化就能纳管,这是它和 Kubernetes 最实在的差别
虚拟机qemu把虚拟机当成一种可调度的作业

README 自列的五个特性里,最该认真读的是第二条。原文说它单二进制、完全自包含,把资源管理与调度合在一个系统里,不需要任何外部服务做存储或协调,并且用领导者选举加状态复制来保证高可用。这句话的实际含义是:部署清单上没有别人,没有数据库、没有消息队列、没有额外的控制面组件。

其余几条分别是:设备插件与 GPU,靠设备插件自动识别并调度 GPU、FPGA、TPU,对在本地跑模型或推理服务的机器是刚需;联邦,README 的原话是开箱即用,可以跨多个区域和多个云部署;以及规模,官方自述在生产环境里跑到过万级节点。最后这条是项目方自己的说法,没有第三方验证,当作方向看就好。

这里有一处把两份文档对着读才会发现的口径错位。联邦这个词在两处指的不是一件事:README 说集群之间的联邦开箱即用,而企业功能页里单列了一条跨区域部署,指的是把一个作业部署到多个已联邦的区域,并控制发布顺序和失败行为。前者在开源版,后者在企业版。做多区域选型时,按后者预留预算。

版本线要交代清楚:2.0.0 发布于 2026-04-21,本轮抓到的最新正式版是 2.0.6(2026-09-09),发版节奏基本是每月一个补丁。从 2.0.0 起版本号从常见的三段式改成 IBM 的版本模型:四月开一个新的支持周期,十月加功能但不另开周期,月度为修缺陷。这个改动本身是个信号——项目的产品节奏已经并入 IBM 的自管理软件体系。

二、怎么用:从安装到跑起第一个作业

README 里没有安装命令,快速上手只有两行,而且把测试与生产分得很开。原文是:

#### Testing
Refer to the Getting Started tutorials for instructions on setting up a local
Nomad cluster for non-production use.

#### Production
Refer to Production reference architecture for recommended practices and a
reference architecture for production deployments.

安装照官方安装页来,macOS 是两条命令:

brew tap hashicorp/tap
brew install hashicorp/tap/nomad

Ubuntu 与 Debian 上走官方软件源,三条命令:

wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o \
  /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
  https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release \
  || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install nomad

官方入门教程给了一个完整可跑的小应用,四个作业文件分别演示服务型、参数化批处理和定时批处理三种形态。最基础的那个是一个 Redis 服务,完整作业文件长这样,可以直接照着改:

job "pytechco-redis" {
  type = "service"

  group "ptc-redis" {
    count = 1
    network {
      port "redis" {
        to = 6379
      }
    }

    service {
      name     = "redis-svc"
      port     = "redis"
      provider = "nomad"
    }

    task "redis-task" {
      driver = "docker"

      config {
        image = "redis:7.0.7-alpine"
        ports = ["redis"]
      }
    }
  }
}

提交与派发就三条命令,注意第三条是参数化批处理的用法,作业里用 meta_required 声明了必须传入的参数:

nomad job run pytechco-redis.nomad.hcl
nomad job run pytechco-setup.nomad.hcl
nomad job dispatch -meta budget="200" pytechco-setup

这套例子里有两点值得单独看。第一是服务发现与配置注入是内建的:作业里的 template 块用 nomadService 函数取到 Redis 的地址和端口,渲染成环境变量文件后直接注入任务,不需要另外部署一套服务注册中心,也不用写胶水脚本。第二是批处理的几种形态齐了:服务型常驻、参数化按次派发、定时型按 cron 触发,另有系统与系统批处理两类,共用同一套调度器。

装完之后的第一个坑不在 Nomad 身上,在 Docker 驱动的权限。官方文档原文写得很直白:Nomad 需要 Docker 装在宿主上并与 agent 并存;如果不用 root 跑,必须把 nomad 用户加进 docker 组:

sudo usermod -G docker -a nomad

紧接着的一句更要紧,很多人是在性能不符合预期时才回头看到它:Nomad 会为每个任务管理一个 cpuset cgroup,要写进 Docker 拥有的 cgroup 就需要 root 权限。不是 root 跑的时候,声明了 CPU 核数的任务,它的 CPU 隔离与 NUMA 感知调度都不会正常工作,而且同一台宿主上其他驱动的任务也会被牵连。

三、优点和缺点,摊开说

先说值得用的地方:

再说必须提前知道的缺点——这部分才是本期重点:

风险点具体情况
许可从 1.7.0 起换了,授权方也换了仓库 LICENSE 的许可参数逐字如下,这几行决定了你能怎么用:
Licensor:             International Business Machines Corporation (IBM)
Licensed Work:        Nomad Version 1.7.0 or later.
Additional Use Grant: You may make production use of the Licensed Work,
                      provided Your use does not include offering the
                      Licensed Work to third parties on a hosted or
                      embedded basis in order to compete with IBM Corp's
                      paid version(s) of the Licensed Work.
Change Date:          Four years from the date the Licensed Work is published.
Change License:       MPL 2.0
翻成人话:自己做生产使用是明确允许的;内部自用不算竞品;不收费的产品不算竞品;红线只有一条——把 Nomad 托管出去或内嵌进自己的产品,拿去和 IBM 的付费版抢生意。另外许可文件里写着每个版本的许可分别计算,所以 1.6.x 及更早的版本仍按老许可走。
企业版装了降不回来官方文档里这段警告位置很靠前:企业版集群无法降级到开源版本,原因是企业功能相关的 raft 日志条目开源版解析不了,开源服务端一旦被加进企业集群就会 panic。这不是性能问题,是集群会挂。许可到期后想退回开源版,只能另建集群再迁。
最需要的那几项功能都在企业版企业功能页列的清单是:资源配额、策略引擎、审计日志、自动升级、自动备份、读扩展、冗余区、多 Vault 命名空间、多 Vault 与 Consul 集群、跨区域部署、动态应用容量建议。其中配额、审计日志、跨区域部署、自动备份这四项,恰好是上规模之后最先需要的东西。注意这里的自动备份指的是常驻快照代理那种形态,开源侧对应的是一次性快照命令。
支持周期被换过一轮从 2026 年 4 月起,自管理产品改用 IBM 的版本与支持模型:v1.10.x 是最后一个长期支持版本;1.8.x 的基础支持、扩展支持、持续扩展支持三个截止日全都停在 2026-04-30,已经过期;2.0.x 的三个截止日分别是 2028、2029、2032,但扩展支持属于付费包。停在 1.8.x 或 1.9.x 的部署需要排期了。
跨版本升级的破坏面很大几个逐字核对过的硬变更:1.9.0 起不再支持旧版作业文件格式,命令上的 -hcl1 开关彻底失效;1.10.0 移除了基于令牌的 Vault 与 Consul 认证流程,必须先给所有工作负载切到工作负载身份再升级,官方把这两步写在升级前置条件里;1.9.0 起不再支持 1.6.0 以下的客户端,老节点会心跳失败;1.10.1 起重载配置时出错会让 agent 直接退出,此前只打一条日志;1.11.1 起可调度磁盘量改为只用总量减去保留量计算,并删掉了 unique.storage.bytesfree 属性;2.0.0 改了许可相关的日志与报错文本,脚本化升级如果依赖这些输出会断;2.0.4 起未认证的服务端 join 以及一组重试参数被标记弃用,下一个特性版本移除,改用新的 server_join 写法。结论:一次跨三个小版本的升级,等于同时改认证模型、作业语法和配置校验。
老需求沉积得很久高关注列表里躺着一批跨年份的请求:2015 年底提的作业之间声明依赖,2016 年提的按资源重新均衡已放置的分配,2020 年提的卷权限托管,至今都是打开状态且没有结论。作业级别的依赖编排这种事,官方十年没做。如果你打算用它替掉一套本来就带依赖关系的调度,先确认这一点。
生态落差是真的Kubernetes 那边有包管理、Operator、自定义资源一整套,这边没有对应物。README 提到的生态只有三件套:Terraform、Consul、Vault。作业文件是自有语法,还带模板函数,迁移成本不小,官方示例里一个最小应用就是四个文件。

还有一点需要说清楚,避免误伤:Nomad 本身没有被标记废弃,作者也没有禁止转载宣传,2.0.6 就在本轮抓取前一周发布,仓库是活跃的。上面这些风险点里,真正需要你当场决策的只有两条——许可的竞品条款,和企业版的不可逆。其余的属于升级与运维成本,排期可以解决。

把话说明白:Nomad 适合在一台到几十台机器上,同时跑容器、定时批处理和几个吃 GPU 的小服务,而且团队里没有人愿意专职伺候一套控制面的场景;也适合把一堆老的、不能容器化的程序纳进统一调度。不适合的同样清楚:要给客户做托管式编排服务的,直接踩在许可的竞品条款上;需要资源配额、审计日志、跨区域单作业部署却不打算买企业版的,以及已经在 Kubernetes 上跑了 Operator 那套生态的团队。

四、最终能达到什么效果

落地之后,日常是这样:一台机器上装好二进制,把 Docker 与要跑的东西装齐,集群就起来了,没有数据库、没有额外的控制面。写一个作业文件描述要跑什么,一条命令提交,调度、重试、失败检测、服务注册全部由它接管;容器、老程序、虚拟机用的是同一套作业语法和同一套调度器。定时批处理直接写 cron 表达式,参数化批处理按次派发,需要的时候用内建模板把上游服务的地址注入到下游的环境变量里,不必为此再部署一个服务注册中心。

规模化之后会遇到的第一个门槛是治理:配额、审计日志、跨区域部署这三样落在企业版。在此之前,它换来的是一套几乎不需要运维投入的编排面。

场景结论
几台到几十台机器,混跑容器、批处理与几个 GPU 小服务推荐,这是它最舒服的区间
有一批不能容器化的老程序要统一纳管推荐,非容器驱动是它的独门
要给客户提供托管式编排服务不推荐,直接触碰许可的竞品条款
需要配额、审计日志与跨区域部署要么买企业版,要么换方案;注意企业版降不回来
团队已经在 Kubernetes 生态里不推荐,生态落差与迁移成本会吃掉收益
停在 1.8.x 或 1.9.x 等长期支持需要排期,最后一个长期支持版本是 1.10.x,扩展支持要付费

动手前先做三件事:


下期预告:上一期文末预告的 Agent 沙箱横向对比继续欠着——本轮日报与周报再次被写过的面孔占满,干净的新面孔是从语言周报里捞出来的,所以先把它写掉。下期做自建编排路线的横向对比:Nomad、轻量 Kubernetes、以及定时任务加脚本这三条路,在资源开销、许可条款和支持周期上分别怎么选。

#GitHub趋势#工作负载编排#自建服务#开源许可

数据来源:GitHub 官方页面与 REST API · 抓取时间:2026-09-16 18:44。文中安装命令、作业文件与驱动要求均取自仓库 README 所链接的官方文档原文(安装页、入门教程、Docker 驱动页);许可条款取自仓库 LICENSE 全文;企业功能清单、降级警告与支持周期取自官方企业功能页;升级破坏性变更取自官方升级指南;命令行为与沉积需求来自仓库公开问题单(#545 / #1635 / #8892)。本轮未在本机安装运行该项目,所有结论均为文档、发版说明与问题单层面的核实结果。项目地址:https://github.com/hashicorp/nomad