当前位置: 首页 > news >正文

ArgoWorkflow教程(一)---DevOps 另一选择?云原生 CICD: ArgoWorkflow 初体验

来自:探索云原生 https://www.lixueduan.com

原文:https://www.lixueduan.com/posts/devops/argo-workflow/01-deploy-argo-workflows/

argo-workflow-logol

本文主要记录了如何在 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 挺像的:

dashboard

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 流水线

相关文章:

  • 音频采集的相关基础知识
  • 【数据结构初阶(4)】栈的基本操作实现
  • 【DevOps】Git 图文详解(七):标签管理
  • 基于法医调查算法优化概率神经网络PNN的分类预测 - 附代码
  • 基于Springboot+Vue选课系统
  • PTA 海盗分赃
  • Ubuntu 1.84.2Visual Studio Code 下载配置与vscode查看内存Hex Editor插件,简单易懂
  • 376.摆动序列
  • 【完美世界】叶倾仙强势登场,孔雀神主VS护道人,石昊重逢清漪
  • 【Vue】插值表达式
  • 6、信息打点——Web架构篇语言中间件数据库系统源码获取
  • 【学习篇】Linux中grep、sed、awk
  • Qt手写ListView
  • dom api
  • Unity中Shader的Standard材质解析(二)
  • Fastjson的基本使用方法大全
  • Java 网络编程(2):UDP 的使用
  • maven工程打包jar以及java jar命令的classpath使用
  • Median of Two Sorted Arrays
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • nodejs实现webservice问题总结
  • NSTimer学习笔记
  • Redis 懒删除(lazy free)简史
  • Spring Cloud中负载均衡器概览
  • Vue 动态创建 component
  • vue2.0项目引入element-ui
  • 机器学习学习笔记一
  • 微服务入门【系列视频课程】
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • ​字​节​一​面​
  • # Apache SeaTunnel 究竟是什么?
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #android不同版本废弃api,新api。
  • #stm32整理(一)flash读写
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (算法)区间调度问题
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)插入排序
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Framework杂记
  • .net 托管代码与非托管代码
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • /dev/sda2 is mounted; will not make a filesystem here!
  • ::
  • @SpringBootApplication 包含的三个注解及其含义
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择