Argo Workflows简介
Argo Workflows 是一个 Kubernetes 原生的工作流引擎,专为运行在 Kubernetes 集群上的容器化任务设计。它允许用户定义、调度和管理复杂的工作流,广泛应用于机器学习、数据处理、CI/CD 和其他自动化任务。
核心概念
- 工作流(Workflow):工作流是由多个步骤(Step)组成的任务序列。每个步骤通常对应一个容器化的任务,可以定义依赖关系和执行顺序。
- 模板(Template):模板是可重用的工作流步骤定义,包含容器镜像、命令、参数等信息。模板可以在多个工作流中复用。
- 节点(Node):工作流执行时,每个步骤被实例化为一个节点。节点是工作流执行的基本单元,包含执行状态、输出等信息。
- 参数化工作流:支持通过参数化方式定义工作流,使其在不同的运行时具有不同的行为和配置。
- 并行和条件执行:支持并行执行多个步骤,以及基于条件的执行逻辑,允许构建复杂的工作流逻辑。
功能特点
- Kubernetes 原生:直接运行在 Kubernetes 集群上,利用 Kubernetes 的调度和扩展能力,支持容器化任务的高效执行。
- 可视化用户界面:提供直观的 Web UI,用户可以通过界面查看工作流的执行状态、日志和依赖关系。
- 丰富的模板支持:支持多种模板类型,包括容器、脚本、数据转换等,满足不同类型任务的需求。
- 强大的调度和重试机制:支持复杂的调度策略和自动重试机制,确保任务的可靠执行。
- 事件驱动:支持基于事件的工作流触发,如基于 Git 提交、定时任务或其他外部事件。
- 集成与扩展:提供与 CI/CD 工具、机器学习平台和数据处理框架的集成能力,支持通过自定义插件和模板扩展功能。
使用案例
- 机器学习工作流:用于构建和训练机器学习模型的自动化工作流,包括数据预处理、模型训练和评估。
- 数据处理管道:用于大规模数据处理任务的编排和管理,支持数据清洗、转换和分析任务。
- CI/CD 自动化:支持持续集成和持续部署流程的自动化,包括代码构建、测试和部署。
Argo Workflows的使用
使用 Argo Workflows 来管理和编排工作流涉及几个关键步骤,从安装到定义工作流,再到运行和监控。
以下是使用 Argo Workflows 的基本指南:
安装 Argo Workflows
在 Kubernetes 集群中安装 Argo Workflows 通常需要以下步骤:
创建命名空间,为 Argo Workflows 创建一个独立的命名空间:
kubectl create namespace argo
安装 Argo Workflows,使用官方提供的安装清单进行安装:
kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflows/stable/manifests/install.yaml
安装 Argo CLI,Argo CLI 是一个命令行工具,用于与 Argo Workflows 进行交互。可以通过 Homebrew(在 macOS 上)安装:
brew install argoproj/tap/argo
定义工作流
Argo Workflows 使用 YAML 文件定义工作流。以下是一个简单的工作流示例:
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: hello-world- spec: entrypoint: whalesay templates: - name: whalesay container: image: docker/whalesay:latest command: [cowsay] args: ["hello world"]
这个工作流定义了一个单步骤的任务,使用 docker/whalesay 镜像输出 “hello world”。
提交和运行工作流
将定义好的工作流 YAML 文件提交到 Kubernetes 集群:
kubectl create -f hello-world.yaml
或者使用 Argo CLI 提交:
argo submit hello-world.yaml --watch
使用 –watch 参数可以实时查看工作流的执行进度。
查看工作流状态
你可以使用 Argo CLI 查看工作流的状态和日志:
# 列出所有工作流: argo list # 查看特定工作流的详细信息: argo get <workflow-name> # 查看工作流步骤的日志: argo logs <workflow-name>
使用参数和模板
Argo Workflows 支持参数化工作流和模板复用。以下是一个示例,展示如何使用参数:
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: parameter-example- spec: entrypoint: parameter-example arguments: parameters: - name: message value: "hello world" templates: - name: parameter-example inputs: parameters: - name: message container: image: docker/whalesay:latest command: [cowsay] args: ["{{inputs.parameters.message}}"]
提交工作流时可以覆盖参数:
argo submit parameter-example.yaml -p message="Argo Workflows!"
监控和管理
Argo 提供了一个 Web UI,用于可视化地监控和管理工作流。要访问 Web UI,可以通过以下命令启动端口转发:
kubectl -n argo port-forward deployment/argo-server 2746:2746
然后在浏览器中访问 http://localhost:2746。
参考链接: