ArgoWorkflow教程(一)---DevOps 另一选择?云原生 CICD: ArgoWorkflow 初体验
来自:探索云原生 https://www.lixueduan.com
原文:https://www.lixueduan.com/posts/devops/argo-workflow/01-deploy-argo-workflows/

本文主要记录了如何在 k8s 上快速部署云原生的工作流引擎 ArgoWorkflow。
ArgoWorkflow 是什么
Argo Workflows 是一个开源的云原生工作流引擎,用于在 Kubernetes 上编排并行作业。Argo 工作流作为Kubernetes CRD 实现。
- 定义工作流,其中工作流中的每个步骤都是一个容器。
- 将多步骤工作流建模为一系列任务,或使用 DAG 来捕获任务之间的依赖关系图。
- 使用 Argo 可以在很短的时间内在 Kubernetes 上轻松运行机器学习或数据处理的计算密集型作业
一句话描述:ArgoWorkflow 是一个用于在 Kubernetes 上编排并行作业的开源云原生工作流引擎。
组件
相对于 Tekton 来说,ArgoWorkflow 组件比较少,整体架构比较简单。
核心组件:
- argo-server:为工作流提供 API 和 UI 界面。
- workflow-controller:真正干活的组件,解析用户创建的 CR 对象并启动 Pod 来真正运行流水线
部署
官方提供 helm chart 可以一键部署,完整命令如下:
# 添加参考并更新
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update# 部署
# -set server.authMode=server 配置切换认证模式,便于免token 登录 UI 界面
helm install argo-workflows argo/argo-workflows -n argo --create-namespace --set server.authMode=server
部署完成后会启动两个 Pod
[root@argo ~]# kubectl -n argo get po
NAME READY STATUS RESTARTS AGE
argo-server-84fd55bfc-hd6qp 1/1 Running 0 2m16s
workflow-controller-557756b7c8-blmp7 1/1 Running 0 2m16s
然后将 Service 切换为 NodePort 便于访问
kubectl patch svc argo-workflows-server -n argo -p '{"spec": {"type": "NodePort"}}'
最后通过 NodePort 访问即可,就像这样:http://172.20.148.126:31691
[root@argo ~]# kubectl -n argo get svc argo-workflows-server
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argo-workflows-server NodePort 10.108.150.173 <none> 2746:31691/TCP 2m3s
UI 界面如下,整体和 ArgoCD 挺像的:

Demo
简单启动一个 Workflow 测试一下 ArgoWorkflow 能否正常运行。
使用以下命令创建一个 Workflow 对象:
kubectl create -f - << EOF
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:generateName: steps-
spec:entrypoint: hello # We reference our first "template" heretemplates:- name: hello # The first "template" in this Workflow, it is referenced by "entrypoint"steps: # The type of this "template" is "steps"- - name: hellotemplate: whalesay # We reference our second "template" herearguments:parameters: [{name: message, value: "Hello ArgoWorkflow!"}]- name: whalesay # The second "template" in this Workflow, it is referenced by "hello"inputs:parameters:- name: messagecontainer: # The type of this "template" is "container"image: docker/whalesaycommand: [cowsay]args: ["{{inputs.parameters.message}}"]
EOF
功能也很简单,就是打印 Hello ArgoWorkflow! 这句话。
查看状态
[root@argo ~]# kubectl get workflow
NAME STATUS AGE MESSAGE
steps-75xmq Running 6s
可以看到,当前处于 Running 状态,不过这是一个非常简单的任务,因此很快就会结束,时间应该是耗费在拉取镜像上。
查看 Pod 运行情况
[root@argo ~]# kubectl get po -w
NAME READY STATUS RESTARTS AGE
steps-75xmq-whalesay-1542601109 0/2 PodInitializing 0 96s
看起来正在拉取镜像,等一下
[root@argo ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
steps-75xmq-whalesay-1542601109 0/2 Completed 0 2m58s
[root@argo ~]# kubectl get workflow
NAME STATUS AGE MESSAGE
steps-75xmq Succeeded 3m6s
Pod 已经运行完成了,Workflow 也进行 Successed 状态,查看 Pod 日志,确认是否真的执行了
[root@argo ~]# kubectl logs -f steps-75xmq-whalesay-1542601109_____________________
< Hello ArgoWorkflow! >---------------------\\\## .## ## ## ==## ## ## ## ===/""""""""""""""""___/ ===~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~\______ o __/\ \ __/\____\______/
time="2023-10-20T08:48:32.163Z" level=info msg="sub-process exited" argo=true error="<nil>"
可以看到,确实打印出了 “Hello ArgoWorkflow” 这句话,至此说明我们部署的 ArgoWorkflow 是能够正常运行的。
到这里 ArgoWorkflow 的部署就完成了,如果理解不了这个 demo 中做的事情也没关系,后续会有 ArgoWorkflow 的使用教程,敬请期待~
下期预告:Workflow & Template 概念模型, 构建 ArgoWorkflow 流水线。
相关文章:
ArgoWorkflow教程(一)---DevOps 另一选择?云原生 CICD: ArgoWorkflow 初体验
来自:探索云原生 https://www.lixueduan.com 原文:https://www.lixueduan.com/posts/devops/argo-workflow/01-deploy-argo-workflows/ 本文主要记录了如何在 k8s 上快速部署云原生的工作流引擎 ArgoWorkflow。 ArgoWorkflow 是什么 Argo Workflows 是…...
数据结构与算法编程题24
中序遍历非递归算法 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 #define Maxsize 100 #define STR_SIZE 1024typedef struct BiTNode {ElemType data;BiTNode* lchild, * rchild; }B…...
springsecurity6配置四
一、springsecurity自定义过滤url配置 package com.school.information.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;import java.util.List;/*** 需要放行的…...
OpenCV简介及安装
前言 因为最近想做图像处理、人脸检测/识别之类的相关开发,所以就开始补OpenCV的相关知识,便开个专栏用于记录学习历程和在学习过程中遇到的一些值得注意的重点和坑。 学习过程基本上也是面向官方文档和Google。 简介 OpenCV(开源的计算机视觉库)是基于…...
Unity调用dll踩坑记
请用写一段代码,让unity无声无息的崩溃。 你说这怕是有点难哦,谁会这么不幸呢?不幸的是,我幸运的成为了那个不幸的人。 unity里面调用dll的方式是使用 DllImport ,比如有一个 Hello.dll,里面有一个 char* …...
Oracle 数据库基线安全加固操作
目录 账号管理、认证授权 ELK-Oracle-01-01-01 ELK-Oracle-01-01-02 ELK-Oracle-01-01-03 ELK-Oracle-01-01-04 ELK-Oracle-01-01-05 ELK-Oracle-01-01-06 ELK-Oracle-01-01-07 …...
安装最新版WebStorm来开发JavaScript应用程序
安装最新版WebStorm来开发JavaScript应用程序 Install the Latest Version of JetBrains WebStorm to Develop JavaScript Applications By JacksonML 2023-11-25 1. 系统要求 WebStorm是个跨平台集成开发环境(IDE)。按照JetBrains官网对WebStorm软件…...
python opencv 放射变换和图像缩放-实现图像平移旋转缩放
python opencv 放射变换和图像缩放-实现图像平移旋转缩放 我们实现这次实验主要用到cv2.resize和cv2.warpAffine cv2.warpAffine主要是传入一个图像矩阵,一个M矩阵,输出一个dst结果矩阵,计算公式如下: cv2.resize则主要使用fx&…...
安装Anaconda、PyTorch(GPU版)库与PyCharm】
【Python深度学习:安装Anaconda、PyTorch(GPU版)库与PyCharm】https://www.bilibili.com/video/BV1cD4y1H7Tk?vd_source0aeb782d0b9c2e6b0e0cdea3e2121ebadownload.pytorch.org/whl/torchaudio/更改Jupyter Notebook的默认路径,亲…...
关于pytorch以及相关包的安装教程
一.查看自己电脑的配置 首先查看自己电脑的cuda的版本,WinR,敲入cmd打开终端 输入nvidia-smi,查看自己电脑的显卡等配置 这里要说明一下关于这个CUDA,它具有向后兼容性,这意味着支持较低版本的 CUDA 的应用程序通常也可以在较高版本的 CUD…...
AnalyticDB for PostgreSQL 实时数据仓库上手指南
AnalyticDB for PostgreSQL 实时数据仓库上手指南 2019-04-016601 版权 本文涉及的产品 云原生数据仓库 ADB PostgreSQL,4核16G 50GB 1个月 推荐场景: 构建的企业专属Chatbot 立即试用 简介: AnalyticDB for PostgreSQL 提供企业级数…...
【数据结构】堆(C语言)
今天我们来学习堆,它也是二叉树的一种(我滴神树!) 目录 堆的介绍:堆的代码实现:堆的结构体创建:堆的初始化:堆的销毁:堆的push:堆的pop:判空 &am…...
使用 Raspberry Pi、Golang 和 HERE XYZ 制作实时地图
到目前为止,您可能已经看过我的一些与 Raspberry Pi 和位置数据相关的教程。我是这些小型物联网 (IoT) 设备的忠实粉丝,并编写了有关使用 Golang 进行 WLAN 定位 和 使用 Node.js 进行 GPS 定位的教程。 我想继续沿着 Golang 路线,做一个关于…...
贪吃蛇(c实现)(真的超级超级简单)
1.代码请看贪吃蛇c实现 王赫辰/c语言 - 码云 - 开源中国 (gitee.com) 2.本项目宗旨: 1.不引入复杂的库函数(其他博主的全是陌生库函数看不懂?看我就对了!◕‿◕) 2.不使用c语法 (都说了c实现,…...
linux 内存回收mglru算法代码注释2
mglru与原lru算法的兼容 旧的lru算法有active与inactive两代lru,可参考linux 内存回收代码注释(未实现多代lru版本)-CSDN博客 新的算法在引入4代lru的同时,还引入了tier的概念。 新旧算法的切换的实现在lru_gen_change_state&a…...
Exchange意外登录日志
最近在审计Exchange邮件系统的时候,发现大量用户半夜登录的日志。而且都是成功的,几乎没有失败的情况。其中Logon Type 8表示用户从网络登录。 Logon type 8: NetworkCleartext. A user logged on to this computer from the network. The user’s pas…...
NX二次开发UF_CURVE_ask_curve_turn_angle 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_curve_turn_angle Defined in: uf_curve.h int UF_CURVE_ask_curve_turn_angle(tag_t curve, double orientation [ 3 ] , double * angle ) overview 概述 Returns …...
UE 进阶篇一:动画系统
导语: 下面的动画部分功能比较全,可以参考这种实现方式,根据自己项目的颗粒度选择部分功能参考,我们商业项目动画部分也是这么实现的。 最后实现的效果如下: 最终效果 目录: ------------------------------------------- 文末有视频教程/工程地址链接 -------------…...
超文本传输协议
超文本传输协议(HypertextTransfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容…...
『heqingchun-Ubuntu系统+x86架构+编译安装ffmpeg+带有nvidia硬件加速』
Ubuntu系统x86架构编译安装ffmpeg带有nvidia硬件加速 一、准备文件 注:可直接下载我上传的CSDN资源,然后直接跳到"一"中的第"3"项"将文件按以下顺序存放"。 ffmpeg源码:音视频开发ffmpeg编译所需资源文件 其…...
Windows 11右键菜单革命:如何用ContextMenuForWindows11打造你的专属工作流
Windows 11右键菜单革命:如何用ContextMenuForWindows11打造你的专属工作流 【免费下载链接】ContextMenuForWindows11 Add Custom Context Menu For Windows11 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuForWindows11 还在为Windows 11右键菜…...
Chrome和chromedriver版本不匹配?5分钟搞定最新版自动下载与替换
Chrome与chromedriver版本冲突?Python全自动解决方案 每次Chrome浏览器更新后,Selenium脚本突然报错停止工作——这可能是大多数自动化测试工程师都经历过的噩梦。控制台里刺眼的版本不匹配提示,不仅打断了工作流程,还迫使开发者停…...
别再折腾WSL2了!Windows 10/11一键搞定Docker Desktop安装(附保姆级排错指南)
Windows开发者必备:Docker Desktop极简安装与高效排错全攻略 每次打开Docker Desktop时那个转个不停的鲸鱼图标,是不是让你血压飙升?作为常年与Windows系统打交道的开发者,我完全理解那种看着教程一步步操作却卡在WSL2配置环节的崩…...
告别Techpoint和Nextchip!实测国产XS9922A/B芯片在车载DVR上的完整替换流程
国产XS9922A/B芯片在车载DVR中的实战替换指南 最近两年,车载电子行业面临着一个共同的挑战:进口芯片供应不稳定导致项目延期风险陡增。作为一名长期从事车载DVR设计的硬件工程师,我亲历了从Techpoint TP9930到国产XS9922B的完整替换过程。这…...
Python的__getattribute__中间件
Python的__getattribute__中间件:深入探索属性访问的魔法 在Python中,对象的属性访问看似简单,实则隐藏着强大的控制机制。__getattribute__作为属性访问的核心钩子,允许开发者拦截所有属性调用,甚至实现动态计算、权…...
别再死记硬背了!用生活中的例子帮你彻底搞懂HFSS边界条件(理想E/H、阻抗、集总RLC)
用厨房电器和家具秒懂HFSS边界条件:硬件工程师的生存指南 刚接触HFSS时,那些边界条件总让我想起第一次进高端厨房的体验——面对各种看不懂的按钮和术语,连最简单的煮鸡蛋都可能搞砸。就像电磁仿真中,选错一个边界条件,…...
离散选择模型中的‘极值’秘密:为什么Gumbel分布是Logit模型的基石?
离散选择模型中的‘极值’秘密:为什么Gumbel分布是Logit模型的基石? 在交通规划中选择公交还是地铁?在市场营销中预测消费者会购买A品牌还是B品牌?这些看似简单的二选一问题背后,都隐藏着一个强大的统计学工具——离散…...
OpCore Simplify:黑苹果EFI一键生成的终极指南
OpCore Simplify:黑苹果EFI一键生成的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置而烦恼吗…...
OpenClaw与系统环境冲突:Windows/Mac系统兼容问题解决指南
OpenClaw 与系统环境冲突:Windows/Mac 系统兼容问题解决指南引言在当今多平台协作的时代,软件能否在不同操作系统上顺畅运行变得至关重要。OpenClaw,作为一款功能强大的专业工具(例如:数据处理、设计、开发环境等&…...
Entity Framework Core 10向量搜索落地全链路(含PostgreSQL/pgvector与Azure AI Embeddings双路径验证)
第一章:Entity Framework Core 10 向量搜索扩展的演进与定位Entity Framework Core 10 首次原生集成向量搜索能力,标志着 ORM 框架正式迈入 AI 增强数据访问的新阶段。这一扩展并非简单封装相似度函数,而是深度协同数据库底层向量索引&#x…...
