Argo Workflows `argo list` 命令完全指南:工作流查询、过滤与多格式输出
2026/9/21 16:31:09 网站建设 项目流程
  • 云原生
  • 容器编排
  • 工作流自动化
  • 任务调度
  • 后端

【免费下载链接】argo-workflows

Workflow Engine for Kubernetes

项目地址:https://gitcode.com/gh_mirrors/ar/argo-workflows
点击查看免费下载

argo list是 Argo Workflows 命令行工具(CLI)中最常用的查询命令之一,用于列出当前命名空间(或全命名空间)下的 Workflow 资源。本文以 docs/cli/argo_list.md 为骨架,结合 cmd/argo/commands/list.go、cmd/argo/commands/list_test.go、util/printer/workflow-printer.go 等源码,系统讲解该命令的全部选项、底层实现原理与实战组合用法,帮助你快速定位运行中、已完成、异常退出的工作流,并输出适合脚本解析的表格、JSON 或 YAML 结果。

命令语法与基本用法

argo list的基本语法非常简单,不需要任何位置参数:

argo list [flags]

其底层由 Cobra 命令NewListCommand()定义(见 cmd/argo/commands/list.go),执行流程为:建立 API 客户端 → 调用listWorkflows()组装过滤条件并请求 Workflow Service → 通过printer.PrintWorkflows()渲染输出。

在不带任何参数时,命令列出当前命名空间下的所有工作流,默认输出为带表头的表格:

NAME STATUS AGE DURATION PRIORITY MESSAGE

表格各列由 util/printer/workflow-printer.go 中的printTable()生成,依次为工作流名称、状态(含智能推断,如Running (Suspended)Failed (Terminated))、创建时长(AGE)、运行时长(DURATION)、优先级(PRIORITY,取spec.priority,未设置时为 0)以及状态消息(MESSAGE)。

核心过滤选项逐一详解

按命名空间与运行状态过滤

选项缩写说明
--all-namespaces-A列出所有命名空间下的工作流(表格会额外显示 NAMESPACE 列)
--running仅显示运行中的工作流,与--completed互斥
--completed仅显示已完成的工作流,与--running互斥
--status strings按状态过滤,支持逗号分隔多个值,如--status Running,Pending
--resubmitted仅显示由其他工作流重新提交(resubmit)产生的工作流
--prefix string按工作流名称前缀过滤

实现原理:这些选项并不是在客户端拿到全量列表后做内存过滤,而是在底层转换成 Kubernetes 标签选择器(Label Selector)下发给服务端,见 cmd/argo/commands/list.go:

  • --status转换为workflows.argoproj.io/phase in (Pending,Running)形式的In条件;
  • --completed追加workflows.argoproj.io/completed=true
  • --running追加workflows.argoproj.io/completed!=true
  • --resubmitted追加标签workflows.argoproj.io/resubmitted-from-workflow存在性条件。

上述标签常量定义于 workflow/common/common.go,由 workflow-controller 在创建工作流时自动打标。--completed--running同时使用时,源码会直接返回错误--completed and --running cannot be used together(见 list.go)。

按标签与字段过滤

选项缩写说明
--selector string-l标签查询(Label query),支持===!=,多个条件用逗号分隔
--field-selector string字段查询(Field query),支持===!=,服务端仅支持有限字段

典型用法:

# 列出同时带有 label1=value1 和 label2=value2 两个标签的工作流 argo list -l label1=value1,label2=value2 # 按字段过滤(例如按工作流名称) argo list --field-selector metadata.name=my-wf

--selector会被labels.Parse()解析后并入最终的LabelSelector--field-selector则直接透传给服务端ListOptions.FieldSelector(见 list.go)。

按时间窗口过滤

选项说明
--since string仅显示创建时间晚于指定相对时长的最近工作流(如10m3h1d
--older string仅显示完成时间早于指定相对时长的已完成工作流

与标签过滤不同,这两个时间选项是在客户端拉取列表后进行内存过滤的。源码(list.go)使用argotime.ParseSince()解析相对时长,并调用定义于 pkg/apis/workflow/v1alpha1/workflow_types.go 的三个谓词函数:

  • WorkflowCreatedAfter(t)metadata.creationTimestamp晚于t
  • WorkflowFinishedBefore(t)status.finishedAt早于t
  • WorkflowRanBetween(start, end):创建与完成时间均落在区间内。

--since--older同时指定时,等价于“在这段时间窗口内运行过”的区间查询;只指定其一则分别应用对应谓词。相关边界行为(如未完成工作流的WorkflowFinishedBefore恒为 false)可在 pkg/apis/workflow/v1alpha1/workflow_types_test.go 的单元测试中验证。

分页与头部控制

选项说明
--chunk-size int以分块方式获取大列表,而非一次性返回全部;传 0 表示禁用分页
--no-headers不打印表头(默认打印表头)

--chunk-size对应 KubernetesListOptions.Limit。源码在循环中逐页调用ListWorkflows(),并通过wfList.Continue令牌继续拉取,直到服务端返回空的 continue 字段为止(见 list.go)。这对于大规模集群中避免单次响应过载非常有用。

输出格式:-o / --output

-o, --output支持四种取值:namejsonyamlwide(默认空字符串表示标准表格)。

取值说明典型场景
(默认)标准表格:NAME、STATUS、AGE、DURATION、PRIORITY、MESSAGE日常巡检
wide在标准表格基础上追加P/R/C(Pending/Running/Completed 节点数)与PARAMETERS(工作流入参)两列需要观察参数与节点状态的排障场景
name每行仅输出一个工作流名称脚本循环处理(如for wf in $(argo list -o name)
json输出完整工作流列表的 JSON程序化消费、对接自动化平台
yaml输出完整工作流列表的 YAML人工审阅、与 kubectl 风格对齐

对应实现位于 util/printer/workflow-printer.go:json使用json.MarshalIndent缩进输出,yaml通过sigs.k8s.io/yaml序列化。列表为空时,json/yaml输出[],表格模式输出No workflows found

此外,源码通过displayFields()(见 list.go)做了字段投影优化

  • 输出为name时,仅请求metadata,items.metadata.name,items.metadata.creationTimestamp,items.status.finishedAt这些必要字段;
  • 默认表格模式只请求metadataitems.metadataitems.specitems.status.phase/message/finishedAt/startedAt/estimatedDuration/progress等展示所需字段;
  • 输出为jsonyamlwide时不做裁剪,拉取完整对象。

这意味着argo list默认情况下传输数据量很小,适合在拥有大量工作流的集群中频繁使用。

官方示例全集

以下是 docs/cli/argo_list.md 中给出的全部官方示例,逐条可直接复制运行:

# 列出当前命名空间的所有工作流: argo list # 列出所有命名空间的工作流: argo list -A # 列出所有运行中的工作流: argo list --running # 列出所有已完成的工作流: argo list --completed # 列出最近 10 分钟内创建的工作流: argo list --since 10m # 列出 2 小时之前就已完成的工作流: argo list --older 2h # 以更详细的形式列出(展示参数等信息): argo list -o wide # 以 YAML 格式列出: argo list -o yaml # 列出同时带有两个标签的工作流: argo list -l label1=value1,label2=value2

组合用法示例

单个选项之外,各过滤条件可以自由组合,例如:

# 查看最近 1 小时创建、仍处于运行状态的工作流 argo list --running --since 1h # 按状态过滤多个取值(逗号分隔) argo list --status Running,Pending # 按名称前缀筛选,并以 name 格式输出便于脚本处理 argo list --prefix myapp- -o name # 全命名空间、宽表输出,观察每个工作流的节点与入参 argo list -A -o wide

排序与输出顺序

listWorkflows()在返回前会对结果调用sort.Sort(workflows)(见 list.go),保证输出顺序稳定。从 cmd/argo/commands/list_test.go 的Names测试用例可以看到,工作流按创建时间倒序排列——最近创建的工作流显示在最前面,便于快速定位最新提交的任务。

与父命令选项的配合

argo list继承自argo根命令的大量连接与认证选项,常用组合包括:

# 指定 API Server 地址(等价于设置 ARGO_SERVER 环境变量) argo list -s localhost:2746 # 指定命名空间(等价于 -n) argo list -n my-namespace # 使用 Argo Server 的 TLS 连接(默认开启,可用 -e 控制) argo list -e # 通过 HTTP/1 而非 gRPC 客户端访问 argo list --argo-http1 # 为所有请求附加自定义 Header(仅在 HTTP/1 模式下生效) argo list -H "Authorization: Bearer xxx" # 仅匹配特定 controller 实例(instanceid 标签),多租户场景下隔离查询 argo list --instanceid my-instance

这些选项的完整列表见 docs/cli/argo.md,实际解析逻辑位于 cmd/argo/commands/root.go。多数连接参数都支持对应的环境变量(如ARGO_SERVERARGO_HTTP1ARGO_INSTANCEIDARGO_SECUREARGO_BASE_HREF),适合在 CI 脚本或容器环境中通过环境变量统一注入。

源码级补充:测试用例佐证

cmd/argo/commands/list_test.go 通过 mock 的WorkflowServiceClientlistWorkflows()的每个过滤分支做了单测验证,包括:

  • 空列表与正常列表;
  • status生成workflows.argoproj.io/phase in (Pending,Running)选择器;
  • completed/running/resubmitted各自的标签选择器;
  • prefix前缀过滤(mock 返回 3 个工作流,仅 1 个名称以foo-开头);
  • since/older时间过滤;
  • name输出模式下字段投影与排序顺序。

这些测试用例本身就是理解该命令过滤逻辑的最佳参考。

小结

argo list通过“服务端标签/字段过滤 + 客户端时间与前缀过滤 + 字段投影 + 多格式输出”的组合设计,兼顾了大规模集群下的查询效率与脚本化使用的灵活性。日常巡检用默认表格或-o wide,脚本自动化用-o name/-o json/-o yaml,排障定位用--running/--status/--since/--older组合,即可覆盖绝大多数工作流查询场景。

  • 云原生
  • 容器编排
  • 工作流自动化
  • 任务调度
  • 后端

【免费下载链接】argo-workflows

Workflow Engine for Kubernetes

项目地址:https://gitcode.com/gh_mirrors/ar/argo-workflows
点击查看免费下载

相关推荐

上一篇:【亲测免费】 部署 Dify 到 Kubernetes
下一篇:Jasmine用户登录与注册:解锁完整功能权限的终极指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询