本文面向已在集群中安装 Argo Workflows 且配置好 kubectl 与 argo CLI 的场景,按「投递 → 观察 → 干预 → 排障 → 清理」组织命令。下文默认工作流类型为 Workflow(一次性运行);模板与定时任务单独说明。
API 版本说明:工作流相关 Kubernetes 对象的 apiVersion 均为 argoproj.io/v1alpha1(与当前主流 Argo Workflows 发行版一致)。它表示 CRD 在 Kubernetes API 中的版本,不等于 Argo Controller / CLI 的 semver;后者请以 argo version 为准。本文中的 YAML 头、kubectl 资源类型均按 argoproj.io/v1alpha1 书写。
全局习惯:多数子命令支持 -n <namespace> / --namespace 指定命名空间;与 kubectl 当前上下文不一致时务必显式带上。
零、与 v1alpha1 对齐的清单(提交前自检)
投递用的 YAML 顶层应类似:
1 | apiVersion: argoproj.io/v1alpha1 |
同 API 版本下常用 kind 与 kubectl 资源名(kubectl api-resources --api-group=argoproj.io 中 VERSION 列为 v1alpha1):
| kind | 常用 kubectl 全名 |
|---|---|
Workflow |
workflows.argoproj.io(简写常为 workflow / wf,视集群别名而定) |
WorkflowTemplate |
workflowtemplates.argoproj.io |
CronWorkflow |
cronworkflows.argoproj.io |
ClusterWorkflowTemplate |
clusterworkflowtemplates.argoproj.io(集群级,无 namespace) |
一、环境与前置检查
1 | # CLI 与 Controller 是否匹配(semver;与 apiVersion v1alpha1 是两套概念) |
若使用 远程 Argo Server(非 in-cluster 直连 Kubernetes API),需设置 ARGO_SERVER、ARGO_BASE_HREF 等,或使用:
1 | argo <子命令> --server argo-server.argo:2746 --secure --token "$(cat token)" |
具体以你方安装方式为准。
二、任务投递(Submit)
2.1 从 YAML 提交
1 | # 基本提交 |
常用参数:
| 参数 | 说明 |
|---|---|
-f / 文件路径 |
多个 -f 可合并多个 YAML(含 ConfigMap 式拆文件时) |
-p KEY=VALUE / --parameter |
覆盖工作流 spec.arguments.parameters |
--entrypoint |
覆盖 YAML 中的 entrypoint |
--serviceaccount |
运行工作流 Pod 使用的 SA |
--priority |
优先级(与集群是否启用 priority 相关) |
-l k=v |
给 Workflow 对象打 label,便于后续筛选 |
传参示例(对应模板里 message 参数): |
1 | argo submit -n my-ns workflow.yaml -p message=hello -p threads=8 |
2.2 从集群内模板提交(WorkflowTemplate)
避免每次带大 YAML,只维护集群中的 WorkflowTemplate:
1 | # 从 WorkflowTemplate 实例化(名称以你集群为准) |
--from 还可指向 ClusterWorkflowTemplate(API 同为 argoproj.io/v1alpha1,集群级资源),写法一般为:
1 | argo submit -n my-ns --from clusterworkflowtemplate/my-global-template -p key=value |
2.3 定时与批量习惯
- CronWorkflow(
apiVersion: argoproj.io/v1alpha1,kind: CronWorkflow):用argo cron create/update/list/get/delete管理 CRON 定义;触发产生的是普通Workflow(v1alpha1),后续仍用list/get/logs跟踪。 - 同一文件多次投递:配合
--generate-name或每次--name唯一,避免AlreadyExists。
三、任务跟踪(List / Get / Watch / UI)
3.1 列表与筛选
1 | # 最近工作流(默认按时间排序,具体列因版本略有差异) |
常用参数:--limit、--chunk-size(分页拉取大量历史时)、--no-headers(脚本解析)。
3.2 详情与节点 DAG
1 | # 人类可读详情(各节点状态、消息) |
节点处于 Pending / Running / Succeeded / Failed / Error / Skipped 等状态时,argo get 是最快的「一张表看清 DAG」方式。
3.3 实时观察
1 | # 阻塞直到工作流结束(适合 CI 或终端盯着跑) |
3.4 日志
1 | # 拉取与工作流关联的 Pod 日志(多 Pod 时会聚合或需指定) |
若 argo logs 因权限或已完成 Pod 被回收而不可用,可直接用 kubectl logs 查工作流 Pod(见下一节)。
3.5 Web UI(可选)
常见做法是对 argo-server Service 做 port-forward,在浏览器里看 DAG 与日志;CLI 与 UI 看到的是同一套 CRD 数据。
1 | kubectl -n argo port-forward svc/argo-server 2746:2746 |
四、运行中干预(Suspend / Resume / Stop / Terminate)
4.1 暂停与继续
适用于模板里有 suspend、或你希望先停住队列再放开的情况:
1 | argo suspend -n my-ns my-workflow-xxx |
4.2 停止与终止
1 | # 优雅停止(可选策略,视版本文档) |
实际语义以当前 Controller semver 为准:stop 与 terminate 在「是否允许 onExit」「子 Pod 如何收尾」上可能有差异;排障时以 argo get 与 Workflow.status(v1alpha1 对象状态) 为准。
五、失败与重试(Retry / Resubmit)
5.1 对失败工作流重试
在 不重新手写 YAML 的前提下,让控制器按策略重跑失败节点:
1 | argo retry -n my-ns my-workflow-xxx |
部分场景可结合 CLI 提供的选项(以 argo retry --help 为准),例如:
- 仅重试特定条件失败的节点(字段选择器等,视 CLI 而定)
--restart-successful:连已成功节点也重跑(慎用,适合「输出不可信需整体重算」)
5.2 整体再跑一遍(新实例)
保留旧实例审计,同时起一个新 Workflow:
1 | argo resubmit -n my-ns my-workflow-xxx |
可与 -p 覆盖参数(是否支持在 resubmit 上传参以 argo resubmit --help 为准);不支持则先 argo get -n my-ns my-workflow-xxx -o yaml 得到 v1alpha1 清单,编辑后 kubectl apply 或 argo submit。
六、失败核查(排障清单)
按「从外到内」顺序执行,一般能快速定位。
6.1 工作流级:消息与事件
1 | argo get -n my-ns my-workflow-xxx |
关注:message、conditions、是否 OOM、ImagePullBackOff、quota、RBAC 拒绝。
6.2 Pod 级:状态与日志
1 | # 列出该工作流产生的 Pod(label 以你集群为准,常见如下) |
Sidecar、wait 容器名因版本而异,kubectl describe pod 里会列出所有 container。
6.3 配置与 YAML 校验
1 | # 提交前静态检查 |
可减少「模板引用错误、变量未替换、DAG 依赖不存在」等一类低级错误。
6.4 已完成工作流被 TTL / GC 删掉
若开启了 ttlStrategy 或工作流归档,集群里可能只剩归档库或对象存储中的记录;需查你方 workflow archive 或审计日志。日常排障建议适当增大 TTL 或在失败时先 argo get -o yaml > backup.yaml 留档。
七、模板与定时任务(简要)
1 | # WorkflowTemplate |
八、清理与下线(Delete)
1 | # 删除单个工作流(通常会级联清理其管理的资源,行为与 finalizer 相关) |
生产环境删除前确认无下游依赖该 Workflow 名称或 label。
九、与 kubectl 的对照关系(心智模型,v1alpha1)
YAML 中须含 apiVersion: argoproj.io/v1alpha1 与对应 kind。
| 意图 | Argo CLI | kubectl(等价思路,资源名显式到 API 组) |
|---|---|---|
| 提交 | argo submit |
kubectl create -f workflow.yaml(文件内为 Workflow / v1alpha1) |
| 列表 | argo list |
kubectl get workflows.argoproj.io -n <ns> |
| 详情 | argo get |
kubectl get workflows.argoproj.io <name> -n <ns> -o yaml + describe |
| 模板 | argo template … |
kubectl get workflowtemplates.argoproj.io -n <ns> |
| 定时 | argo cron … |
kubectl get cronworkflows.argoproj.io -n <ns> |
| 日志 | argo logs |
kubectl logs 指向具体 Pod |
| 删除 | argo delete |
kubectl delete workflows.argoproj.io <name> -n <ns> |
| 日常开发可优先 Argo CLI;与平台同学联调或排查 CNI、存储、SA 时,kubectl describe/get events 往往不可替代。 |
十、速查:最常用命令组合
1 | # 1. 提交并立刻跟跑(先起唯一名,避免猜实例名) |
若使用 --generate-name,可从 argo submit 的标准输出里复制返回的 Workflow 名称,再执行 argo watch -n my-ns <该名称>;部分版本支持 argo submit ... -o name 仅输出资源名,便于脚本拼接。
小结:资源定义与 kubectl 侧类型以 argoproj.io/v1alpha1 为准;CLI 子命令、flag、label 键名仍可能随 Argo Workflows 发行版(semver) 微调。遇 flag 报错时用 argo <子命令> --help 核对本机 CLI;对象字段语义以集群内已安装的 Workflow CRD 为准,例如:
1 | kubectl explain workflows.argoproj.io.spec |