ArgoWorkflow教程(六)---无缝实现步骤间参数传递

简介: 本文为ArangoWorkflow系列教程第六篇,详细介绍了在同一Workflow中不同步骤间如何实现参数传递,避免了通过文件传递的不便。文章重点讲解了导出结果和导入参数的方法,并演示了如何将上一步骤的输出参数作为下一步骤的输入参数。此外,还介绍了ArgoWorkflow内置的`result`参数,可用于捕获容器的标准输出。通过具体示例和代码片段,读者可轻松掌握这一重要功能。

集 - ArgoWorkflow(6)
1.
ArgoWorkflow
教程(二)---快速构建流水线:Workflow & Template 概念
08-20
2.
ArgoWorkflow
教程(一)--DevOps 另一选择?云原生 CICD 初体验
08-06
3.
ArgoWorkflow
教程(三)---使用 Artifacts 实现步骤间文件共享
08-29
4.
ArgoWorkflow
教程(四)---Workflow & 日志归档
09-13
5.
ArgoWorkflow
教程(五)---Workflow 的多种触发模式:手动、定时任务与事件触发
09-25
6.
ArgoWorkflow
教程(六)---无缝实现步骤间参数传递
10-10
收起
argoworkflow-6-parameter-passing-between-steps.png

之前我们分析了,Workflow、WorkflowTemplate 、template 3 者之间如何传递参数。

本文主要分析同一个 Workflow 中的不同 step 之间实现参数传递,比如将上一个步骤的输出作为下一个步骤的结果进行使用(而非以文件方式传递)。

概述
然后就是之前只分析了 Workflow、WorkflowTemplate 、template 3 者之间如何传递参数,今天继续分析一下步骤之间如何传递参数。
要实现步骤间参数传递,需要实现两个功能:

1)导出结果

2)导入参数

基于之前的知识,要实现这两个功能,可以想到的一种方式就是使用 artifact:

导出结果:将参数写入文件,然后以 artifact 保存到 s3
导入参数:下一个 step 下载 artifact 并从中获取参数。
确实可以实现功能,但是有点蹩脚,毕竟 artifact 主要是用于保存文件的。argoworkflow 中也直接提供了对应的 feature 来供大家使用。

步骤间参数传递
将结果导出为 Output Parameter
将上一步的 Output Parameter 导入为当前步骤的 Input Parameter
完整 Demo 如下:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: output-parameter-
spec:
entrypoint: output-parameter
templates:

name: output-parameter
steps:

name: generate-parameter
template: whalesay
name: consume-parameter
template: print-message
arguments:
parameters:
Pass the hello-param output from the generate-parameter step as the message input to print-message
name: message
value: "{ {steps.generate-parameter.outputs.parameters.hello-param}}"
name: whalesay
container:
image: docker/whalesay:latest
command: [sh, -c]
args: ["echo -n hello world > /tmp/hello_world.txt"] # generate the content of hello_world.txt
outputs:
parameters:

name: hello-param # name of output parameter
valueFrom:
path: /tmp/hello_world.txt # set the value of hello-param to the contents of this hello-world.txt
name: print-message
inputs:
parameters:

name: message
container:
image: docker/whalesay:latest
command: [cowsay]
args: ["{ {inputs.parameters.message}}"]
导出结果
name: whalesay
container:
image: docker/whalesay:latest
command: [sh, -c]
args: ["echo -n hello world > /tmp/hello_world.txt"] # generate the content of hello_world.txt
outputs:
parameters:
name: hello-param # name of output parameter
valueFrom:
path: /tmp/hello_world.txt # set the value of hello-param to the contents of this hello-world.txt
首先是 step 的内容,这里为了简单,就只有一个 echo 命令,将结果(hello world)写入到文件
/tmp/hello_world.txt 中。

然后就是到处结果了:

outputs:
parameters:

  • name: hello-param # name of output parameter
    valueFrom:
    path: /tmp/hello_world.txt # set the value of hello-param to the contents of this hello-world.txt
    定义了一个 output 参数,名为 hello-param,该参数的 value 从 /tmp/hello_world.txt 文件中获取,最终得到的 value 就是之前写入的 hello world。

至此,我们就讲当前步骤的结果导出成了一个 Output Parameter,可以在后续步骤使用了。

导入参数
后续步骤,其实很简单,和普通步骤一样的,通过 Input Parameter 定义参数,然后在使用的使用通过语法{ {inputs.parameters.name}} 引用即可。

name: print-message
inputs:
parameters:
name: message
container:
image: docker/whalesay:latest
command: [cowsay]
args: ["{ {inputs.parameters.message}}"]
唯一区别在于,这个参数的来源,之前我们都是直接讲参数定义在 Workflow 中的,这里需要改成引用之前步骤导出的 Output Parameter,就像这样:
spec:
entrypoint: output-parameter
templates:

name: output-parameter
steps:
name: generate-parameter
template: whalesay
name: consume-parameter
template: print-message
arguments:
parameters:
Pass the hello-param output from the generate-parameter step as the message input to print-message
name: message
value: "{ {steps.generate-parameter.outputs.parameters.hello-param}}"
在 arguments.parameters 中直接引用了之前步骤的 Output Parameter,语法为 { {steps.
parameterName}}。
之前我们导出结果的步骤名为 generate-parameter,然后导出的参数名为 hello-param,因此这里就使用{ {steps.generate-parameter.outputs.parameters.hello-param}} 来引用该参数。

内置的 result 参数
除了我们手动导出的参数之外,ArgoWorkflow 还会默认生成一个 Output Parameter,他就是 result。

和其他 Output Parameter 一样,可以通过 { {steps.
parameterName}} 语法进行引用。

这个 result 参数会捕获最大 256KB 的标准输出作为 value,因此他可以包含以下内容:

1)script 的运行结果
2)容器的标准输出
3)...
只要是在容器中输出到标准输出的,内容都可以被 result 捕获。

【ArgoWorkflow 系列】持续更新中,搜索公众号【探索云原生】订阅,阅读更多文章。

小结
本文主要分析了 Argo 中的 Workflow 中怎么传递参数还是比较简单的:
1)通过 Output Parameter 导出参数
2)在 arguments.parameters 中引用上一步导出的参数
最后介绍了一下内置的 result Output Parameter ,可以用于获取容器中的标准输出。

相关文章
|
Kubernetes API 调度
k8s 到底是什么,架构是怎么样的?
Kubernetes(k8s)是Google开源的容器集群管理系统,它通过YAML文件自动化应用部署、扩展和管理。k8s架构包含控制平面(API Server、Scheduler、Controller Manager和etcd)和工作节点(Node,含kubelet、Container runtime、Kube Proxy等)。控制平面负责调度和管理,Node执行任务。kubectl是命令行工具,用于与k8s交互。k8s通过Ingress暴露服务,并通过Pod作为最小调度单位管理容器。Docker通常与k8s结合使用,提供容器化应用,但二者并非同一概念。
2215 4
k8s 到底是什么,架构是怎么样的?
|
开发工具 git Perl
Argo CD 入门扫盲使用(二)
Argo CD 入门扫盲使用
711 0
|
存储 负载均衡 Kubernetes
Openresty动态更新(无reload)TCP Upstream的原理和实现
本文介绍了对Openresty或Nginx的TCP Upstream的动态更新(无需Reload)的一种实现方式,这种实现对于正在尝试做Nginx扩展的开发者是一种参考。文中我们对nginx结合lua对一次请求的处理流程和可扩展方式也进行了说明,重要的是给出了实际代码帮助开发者理解。目前社区中比如Kong、nginx-ingress-controller等基于Nginx扩展的项目都是类似的思路。
12618 1
Openresty动态更新(无reload)TCP Upstream的原理和实现
|
存储 自然语言处理 前端开发
领域驱动设计(DDD)-基础思想
一、序言     领域驱动设计是一种解决业务复杂性的设计思想,不是一种标准规则的解决方法。在领域驱动设计理念上,各路大侠的观点也是各有不同,能力有限、欢迎留言讨论。 二、领域驱动设计 DDD是什么 wiki释义:     领域驱动设计(英语:Domain-driven design,缩写 DDD)是一种通过将实现连接到持续进化的模型[1]来满足复杂
8970 0
|
机器学习/深度学习 人工智能 Kubernetes
Argo Workflows 加速在 Kubernetes 上构建机器学习 Pipelines
Argo Workflows 是 Kubernetes 上的工作流引擎,支持机器学习、数据处理、基础设施自动化及 CI/CD 等场景。作为 CNCF 毕业项目,其扩展性强、云原生轻量化,受到广泛采用。近期更新包括性能优化、调度策略增强、Python SDK 支持及 AI/大数据任务集成,助力企业高效构建 AI、ML、Data Pipelines。
1447 0
|
12月前
|
安全 Linux 网络安全
Linux下搭建L2TP/IPsec VPN服务(手把手教你配置安全远程连接)
本教程详细介绍如何在Ubuntu 22.04上搭建L2TP/IPsec VPN服务器,涵盖软件安装、IPsec与xl2tpd配置、用户添加、防火墙设置及连接测试,适合初学者快速掌握Linux下安全的VPN搭建方法。
|
Kubernetes PyTorch 算法框架/工具
2026年4月实测:我把公司K8s集群的Docker镜像拉取速度提升了20倍
上周公司AI训练节点扩容,PyTorch镜像直连拉取32分钟/个,8台集群部署几近瘫痪。实测5种加速方案后,发现小众但稳定的「docker.1ms.run」服务——3.8GB镜像仅需1分48秒,提速18倍!一键配置Docker/Containerd,CI/CD构建从20分钟回归3分半。2026年境内镜像拉取困局,务实解法在此。(239字)
|
消息中间件 存储 RocketMQ
Rocketmq如何保证消息不丢失
文章分析了RocketMQ如何通过生产者端的同步发送与重试机制、Broker端的持久化存储与消息重试投递策略、以及消费者端的手动提交ack与幂等性处理,来确保消息在整个传输和消费过程中的不丢失。
|
存储 弹性计算 数据管理
阿里云对象存储OSS收费标准:存储费、流量价格及不同计费模式全解析
阿里云OSS收费标准涵盖存储、流量等费用,支持按量付费与资源包两种模式。标准存储按量0.09元/GB/月,包年500GB仅需118.99元,流量费按公网出方向计费,闲时0.25元/GB,忙时0.5元/GB,可购流量包更优惠。
3452 7
|
运维 Kubernetes 监控
什么是Kubeasz
Kubeasz(Kubernetes Easy Setup with Ansible)是一个开源项目,旨在简化Kubernetes集群的部署过程。它使用Ansible作为基础设施管理工具,通过预定义的剧本和配置模板,自动化整个K8s集群的搭建流程。以下是对Kubeasz的详细介绍: ### 一、Kubeasz的特点 1. **快速部署**:Kubeasz支持一键部署Kubernetes集群,大大节省了运维成本和时间。 2. **高可用性**:可以部署高可用的Kubernetes集群,确保系统的稳定性和可靠性。 3. **可扩展性**:支持容器化部署,可以方便地扩展集群规模,满足不同的业务需
2476 3

热门文章

最新文章