首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年08月06日 12:50

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" here
  templates:
  - name: hello               # The first "template" in this Workflow, it is referenced by "entrypoint"
    steps:                    # The type of this "template" is "steps"
    - - name: hello
        template: whalesay    # We reference our second "template" here
        arguments:
          parameters: [{name: message, value: "Hello ArgoWorkflow!"}]

  - name: whalesay             # The second "template" in this Workflow, it is referenced by "hello"
    inputs:
      parameters:
      - name: message
    container:                # The type of this "template" is "container"
      image: docker/whalesay
      command: [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 系列】持续更新中,搜索公众号【探索云原生】订阅,阅读更多文章。


From:https://www.cnblogs.com/KubeExplorer/p/18344987
本文地址: http://www.shuzixingkong.net/article/838
0评论
提交 加载更多评论
其他文章 微信支付退款和退款结果查询接口简单实现(.Net 7.0)
本文介绍了如何通过C# SDK(SKIT.FlurlHttpClient.Wechat.TenpayV3)来实现微信的退款和状态查询两接口。
微信支付退款和退款结果查询接口简单实现(.Net 7.0) 微信支付退款和退款结果查询接口简单实现(.Net 7.0)
部署CPU与GPU通用的tensorflow:Anaconda环境
本文介绍在Anaconda环境中,下载并配置Python中机器学习、深度学习常用的新版tensorflow库的方法~
部署CPU与GPU通用的tensorflow:Anaconda环境 部署CPU与GPU通用的tensorflow:Anaconda环境 部署CPU与GPU通用的tensorflow:Anaconda环境
深度解读KubeEdge架构设计与边缘AI实践探索
摘要:解读业界首个云原生边缘计算框架KubeEdge的架构设计,如何实现边云协同AI,将AI能力无缝下沉至边缘,让AI赋能边侧各行各业,构建智能、高效、自治的边缘计算新时代,共同探索智能边缘的新篇章。 本文分享自华为云社区《DTSE Tech Talk | 第63期:KubeEdge架构设计与边缘A
深度解读KubeEdge架构设计与边缘AI实践探索 深度解读KubeEdge架构设计与边缘AI实践探索 深度解读KubeEdge架构设计与边缘AI实践探索
Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
JSON是我们编写API时候用于数据传递的常用格式,那么你是否知道JSON Schema呢? 在数据交换领域,JSON Schema 以其强大的标准化能力,为定义和规范 JSON 数据的结构与规则提供了有力支持。通过一系列精心设计的关键字,JSON Schema 能够详尽地描述数据的各项属性。然而,
Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
centos7系统 通过编译安装gcc7.5.0
背景: 现有的centos7 gcc的最高版本为4.8.5 项目需要升级到7.1.0以上 正常方式可以通过以下命令即可完成升级: $ sudo yum install centos-release-scl $ sudo yum install devtoolset-7-gcc* $ scl enab
洛谷P1209修理牛棚 Barn Repair
[USACO1.3] 修理牛棚 Barn Repair 题目描述 在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶、门被吹飞了 好在许多牛正在度假,所以牛棚没有住满。 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。 宽度为1 自门
探讨使用智能AI在农业养殖中的风险预警与应用
一、前言 之前写过一篇《物联网浏览器(IoTBrowser)-使用深度学习开发防浸水远程报警》文章,主要介绍了通过摄像头麦克风监测浸水报警器有无异常,当出现异常后进行紧急报警并推送微信通知,避免浸水导致房屋损失。基于深度学习和物联网技术继续探讨在农业养殖领域的应用和实践。 监测参数设置 预警微信通知
探讨使用智能AI在农业养殖中的风险预警与应用 探讨使用智能AI在农业养殖中的风险预警与应用 探讨使用智能AI在农业养殖中的风险预警与应用
Linux的netns使用总结
转载请注明出处: Linux的netns(Network Namespace)是Linux内核提供的一项强大的网络隔离功能,它能够创建多个独立的网络空间,每个空间都拥有自己独立的网络协议栈,包括网络接口(网卡)、路由表、iptables规则等。这种隔离机制使得不同的应用程序或服务可以在互不干扰的网络