- 云原生
- 容器编排
- 工作流自动化
- 任务调度
- 后端
【免费下载链接】argo-workflows
Workflow Engine for Kubernetes
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 | 仅显示创建时间晚于指定相对时长的最近工作流(如10m、3h、1d) |
--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支持四种取值:name、json、yaml、wide(默认空字符串表示标准表格)。
| 取值 | 说明 | 典型场景 |
|---|---|---|
| (默认) | 标准表格: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这些必要字段; - 默认表格模式只请求
metadata、items.metadata、items.spec、items.status.phase/message/finishedAt/startedAt/estimatedDuration/progress等展示所需字段; - 输出为
json、yaml、wide时不做裁剪,拉取完整对象。
这意味着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_SERVER、ARGO_HTTP1、ARGO_INSTANCEID、ARGO_SECURE、ARGO_BASE_HREF),适合在 CI 脚本或容器环境中通过环境变量统一注入。
源码级补充:测试用例佐证
cmd/argo/commands/list_test.go 通过 mock 的WorkflowServiceClient对listWorkflows()的每个过滤分支做了单测验证,包括:
- 空列表与正常列表;
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
相关推荐
Argo Workflows `argo template get` 命令详解:查询工作流模板详情与多格式输出
Argo Workflows argo template get 命令详解:查询工作流模板详情与多格式输出 argo template get 是 Argo W
云原生容器编排工作流自动化任务调度后端Argo Workflows `argo template list` 命令完全指南:列出与管理工作流模板
Argo Workflows argo template list 命令完全指南:列出与管理工作流模板 Argo Workflows 是 Kubernetes
云原生容器编排工作流自动化任务调度后端Argo Workflows 归档工作流查询指南:`argo archive get` 命令全解析
Argo Workflows 归档工作流查询指南: argo archive get 命令全解析 归档工作流(Archived Workflow)是 Argo
云原生容器编排工作流自动化任务调度后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考