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

中海庭罗凯:Prometheus监控Argo Workflow云原生工作流的方法

​嘉宾 | 罗凯   整理 | 李天天

出品 | CSDN云原生

业务中当前有多少个端到端工作流实例,它们的状态是什么?在过去的24小时内,有多少个工作流实例未成功完成?为什么未成功完成?完成工作流程实例或工作流程中的特定步骤平均需要多少时间?

针对以上发问,2022年8月9日,CSDN云原生系列在线峰会第15期“Prometheus峰会”上,中海庭运维开发工程师罗凯从企业业务形态及云原生工作流的使用情况入手,分享了Prometheus监控Argo Workflow云原生工作流的方法。

Argo Workflow监控实例

容器化CI + Argo Workflow实现生产的Devops

在引入K8s前,一般使用传统PC工具对数据入库、任务排产及任务派发进行处理,该过程需要人工处理、手动配置,但存在诸多弊端:

  • PC算力有限,大数据集情况下,人工处理效率低下;

  • 手动配置易出错,难以及时发现问题。

于是,我们引入了K8s,利用Argo Workflow任务编排调度实现数据的自动化处理。

引入K8s后的数据流向图

  • 从传统PC工具转型Web化工具,通过容器沙箱提供生产需要的工具并通过CI/CD集成相应的数据容器组成独立的沙箱工作环境,并在需要与人交互的环节提供Web界面和专用的Web访问地址。

  • 规范化作业信息流、数据流,自动化代替手动环境准备。

  • 操作数据集的提交、流转通过CI/CD自动完成。

Arogo Workflow实现生产数据编译的任务调度

数据编译

首先根据用户的定制化需求制定编译工具链及相应配置,随后在数据上游进行数据拉取、串联,并进行GRB、EFD处理,最终交付给客户。其中,在EFD处理完成后,NDS的配置会根据EFD的数据结果动态生成,整个工作流程十分复杂,手工处理耗时,容易出错。

使用Argo Workflow进行编排后,数据处理流程会变得清晰。通过CI/CD动态提供相应的编译工具单元形成自动化工具链,取代手工部署配置环节提高编译效率,保证数据质量。

Argo Workflow介绍

什么是Argo Workflow

Argo Workflow是一个开源项目,为Kubernetes提供Container-native工作流程,主要通过Kubernetes CRD实现。它有四大特点:

  • 容器云原生:工作流的每一步都是一个容器,可以通过环境变量注入配置;

  • 建模:将多步骤工作流建模为一系列任务,或者使用有向无环图(DAG)描述任务之间的依赖关系;

  • 易调度:可以在短时间内轻松运行用于机器学习或数据处理的计算密集型作业;

  • 配置简单:在Kubernetes上运行CI/CD Pipeline,无需复杂的软件配置。

云原生工作流种类多样,为什么要选择Argo Workflow呢?

  • Airflow虽然是老牌任务管理、调度、监控,但存在语言强绑定以及过于依赖Python的缺点。

  • K8s原生Workflow的使用简单直接,但灵活度过差。

  • Apache Dolphin Scheduler的界面十分友好,任务定制简单,但API不友好,模板编排不灵活。

  • Argo Workflow与云原生结合紧密,专注于编排并行任务,容器编排灵活,并且模板编排支持模块化,能够有效提高调度效率。

Argo Workflow简单样例

Argo Workflow简单样例——dag

在编排过程中,首先定义一个echo模板,将模板的输入参数message直接打印到控制台。

其中,dag编排任务过程中最关键的部分是通过dependencies进行依赖。上图中的依赖关系为:B依赖A、C依赖A、D依赖B与C,故任务的执行顺序十分明朗:A先执行,随后B与C同时执行,最后执行D。

命令行运行结果

UI显示结果

Argo Workflow简单样例——Steps

在Step步骤中,可以通过不同的标识来控制串行、并行。

  • “--”代表和上一步串行 ;

  • “–”代表和上一步并行。

如上图所示,我们可以看出,hello1与hello2a串行,hello2a与hello2b并行。

命令行运行结果

UI显示结果

我们的Argo Workflow编排样例

在实际过程中,由于业务形态种类多样,因此会有很多并行、串行dag等任务的编排。

其中包含根据上一步运行结果的不同来运行不同的后续步骤的编排,也有根据不同的外部业务调用不同API生成不同的步骤的编排。

监控工作流关心的指标

从监控的角度来看,主要有以下几个指标需要重点关注:

  • 每个工作流的运行耗时;

  • 工作流中失败的步骤

  • l工作流运行总数;

  • 集群资源以及工作流资源消耗情况等。

Prometheus Vs. Prometheus Operator

在Prometheus中我们需要手动维护配置文件,而在K8s集群中配置文件的维护十分不方便,因此引入Prometheus Operator ,通过K8s原生资源CRD的方式来管理监控。

在集群中,一组需要监控的export(Service)就是一个ServiceMonitor对象,Prometheus Operator会自动监控ServiceMonitor对象的改变而自动生成对应的配置,这样就不需要手动更改Prometheus的配置了。

上图是Prometheus Operator的架构图,其中Operator是最核心的部分,作为一个控制器,它会创建Prometheus、ServiceMonitor、AlertManager以及PrometheusRule 4个CRD资源对象,随后一直监控并维持这4个资源对象的状态。

其中,所创建的Prometheus资源对象作为Prometheus Server存在,而ServiceMonitor就是exporter的各种抽象,exporter用于提供Metrics数据接口。Prometheus正是通过ServiceMonitor提供的Metrics数据接口来Pull数据的。

Service和ServiceMonitor都是K8s的资源,一个 ServiceMonitor可以通过labelSelector的方式去匹配一类Service,Prometheus也可以通过labelSelector去匹配多个ServiceMonitor。

因此,当我们想要在集群中监控数据时,便可以直接操作Kubernetes集群的资源对象,操作更便捷。

Argo Workflow的ServiceMonitor

Argo Workflow作为一个云原生的编排工具,在Prometheus中,只需建立一个类型为ServiceMonitor的资源对象,并将selector指向workflow-controller,就可以实现对指标的自动拉取。

相关实例信息

总结

Argo Workflow容器编排灵活并与云原生紧密结合,能够充分利用原生态的工具,大幅提高调度效率。它目前正处于快速迭代中,值得我们共同探索,相信在将来的云原生生态系统中,Argo Workflow会不负期待。


本篇文章整理来自@ 李天天,由CSDN修订完成 。

想要参与到专家技术分享的一手整理过程中并获得相应权益吗?关注【CSDN云原生】公众号并回复关键词“志愿者”了解详情,我们期待你的加入~

ab099120656348d7afb97a685c0672d7.jpeg

相关文章:

  • JMeter进行并发测试参数化
  • lotus 1.17.1-rc3 calibnet Boost
  • priority_queue(优先级队列的模拟使用和实现)
  • git工作中常用的命令
  • mmdetection--pointpillars-demo运行
  • 使用react-amanda快速搭建管理类型的系统
  • 由于apt-get命令不知道为什么使用不了(可能是关闭了某个访问外网的东西),所以手动在ubuntu上安装mongodb
  • shell排序算法
  • Hadoop - 本地安装 完全分布式安装 集群配置 xsync分发脚本
  • 基于视觉AI的管道高后果区预警系统
  • 计算机毕业设计ssm+vue基本微信小程序的蛋糕预订平台系统
  • CSP202206-1 归一化处理 (C/C++)
  • c++ 11 多线程支持 (std::packaged_task)
  • Spring MVC注解Controller源码流程解析--定位HandlerMethod
  • 常用排序方法、sort的实现原理、快排的优化
  • ES6指北【2】—— 箭头函数
  • bootstrap创建登录注册页面
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Mybatis初体验
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL QA
  • Promise面试题2实现异步串行执行
  • Protobuf3语言指南
  • Python 反序列化安全问题(二)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • web标准化(下)
  • 动态规划入门(以爬楼梯为例)
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 如何胜任知名企业的商业数据分析师?
  • ionic入门之数据绑定显示-1
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​一些不规范的GTID使用场景
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #在 README.md 中生成项目目录结构
  • (6)设计一个TimeMap
  • (AngularJS)Angular 控制器之间通信初探
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (附源码)springboot教学评价 毕业设计 641310
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (原)本想说脏话,奈何已放下
  • ***通过什么方式***网吧
  • .NET Core引入性能分析引导优化
  • [2016.7.Test1] T1 三进制异或
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [Android Pro] AndroidX重构和映射
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [C#]winform部署PaddleOCRV3推理模型
  • [CCIE历程]CCIE # 20604
  • [C语言]——C语言常见概念(1)
  • [HOW TO]如何在iPhone应用程序中发送邮件
  • [javaSE] 看知乎学习工厂模式
  • [JavaWeb]——获取请求参数的方式(全面!!!)
  • [JavaWeb学习] Spring Ioc和DI概念思想
  • [Linux_IMX6ULL应用开发]-Makefile