Dagu vs Argo Workflows

Argo Workflows 运行在 Kubernetes 上,Dagu 运行在普通机器上。

两者都定义 DAG 并按顺序运行步骤。Argo Workflows 内置于 Kubernetes,把每个步骤调度为 pod。Dagu 是一个调用你现有命令的单一二进制,没有需要运维的集群。

可在单台主机上运行的工作流
name: nightly-ops
schedule: "0 2 * * *"

steps:
  - id: extract
    run: python scripts/extract.py

  - id: transform
    run: ./bin/transform
    retry_policy:
      limit: 3
    depends: [extract]

  - id: notify
    run: ./scripts/slack-success.sh
    depends: [transform]

自包含的单一二进制,无需 Kubernetes 集群

用声明式 YAML 运行现有命令

无需外部 database 或 message broker

为 shell、Docker、HTTP、SSH、SQL、子工作流和 AI Agent 提供 executor

At a glance

Argo Workflows vs. Dagu 一览

运行时
Dagu

普通机器上的单一二进制,由本地文件支撑。

Argo Workflows

带有 workflow controller 的 Kubernetes 集群。

步骤是什么
Dagu

一条命令:shell、Docker、HTTP、SSH、SQL、子工作流或 AI Agent。

Argo Workflows

在集群上作为 pod 运行的容器。

更适合谁
Dagu

在你已有主机上的运维任务、脚本和混合流水线。

Argo Workflows

Kubernetes 原生、容器密集或大规模 ML 流水线。

In depth

Where each tool fits

01

底层无需集群的编排

Argo Workflows 假定有一个运行中的 Kubernetes 集群,以及把每个步骤变成 pod 的 controller。Dagu 没有这种要求。你把一个二进制放到服务器、笔记本或 VM 上,它就能运行。

  • 在普通机器上运行,无 Kubernetes、无 controller、无 etcd。
  • 把状态保存在本地文件里,而不是单独的 database 或 broker。
  • 先本地起步,负载增长时再转到队列或分布式模式。
02

步骤是命令,不只是容器

在 Argo Workflows 里,每个步骤都是运行在 pod 中的容器。Dagu 也能运行容器,但它还能直接调用 shell 脚本、HTTP 端点、SSH 命令、SQL 查询、子工作流或 AI Agent 步骤。

  • 直接使用已有的脚本和二进制,无需把每个都打包成 image。
  • 在同一个工作流里混用 Docker 步骤与 shell、HTTP、SSH。
  • 在内置 Web UI 中查看运行、日志和历史。
03

何时应改用 Argo Workflows

如果 Kubernetes 已经是你的平台,Argo Workflows 更合适。它是 Kubernetes 原生的,把每个步骤调度为独立 pod,并面向大量容器 fan-out 而设计。Dagu 不做这些。

  • 你运行在 Kubernetes 上,希望工作流以 CRD 形式与其他清单并列定义。
  • 你需要为每个任务做 pod 调度、node selector 和集群 autoscaling。
  • 你的流水线会一次性向多个节点扇出数千个容器。

FAQ

Practical questions before adopting Dagu

Dagu 能替代 Argo Workflows 吗?

并非对所有团队都能。如果你已标准化在 Kubernetes 上,并希望每个步骤作为 pod 运行,那么 Argo Workflows 是合适的工具。如果你想在普通机器上编排命令而不运维集群,Dagu 更合适。

Dagu 能不依赖 Kubernetes 运行吗?

可以。Dagu 是一个自包含的单一二进制,可在服务器、VM 或笔记本上运行。它无需 Kubernetes 集群、外部 database 或 message broker。

Dagu 还能运行容器吗?

可以。Dagu 有一个 Docker executor,用于需要容器的步骤。区别在于,容器只是 shell、HTTP、SSH、SQL 和子工作流步骤之外的一个选项,而非唯一的执行单元。

Next step

Start with one workflow.

Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.