本文整理自2024云栖大会田双坤演讲
云原生操作系统
Kubernetes与Argo Workflows
Kubernetes已经成为事实的云原生操作系统,成为业务上云、容器化的标准。
从过去无状态应用、企业核心应用,到现在AI时代的数据处理、AI训练、科学仿真等,越来越多的离线任务跑在K8s上。
如何管理好这些离线任务是新的课题,对于离线任务来说往往不是单个存在,之间往往有着许多的依赖关系,比如上图是一个典型的汽车仿真场景,其中包括了数据收集、数据清洗、算法设计、模拟仿真等。
那么如何把这些流程串联起来,提高整体的任务管理和执行效率呢?
答案是Argo Workflows,Argo workflow是一款专为Kubernetes上编排并行Job设计的一款工作流引擎,能够通过简单的Step或者复杂的DAG将任务编排起来。主要的使用场景有数据处理、科学/自动驾驶仿真、机器学习pipeline、基础设施自动化以及CI/CD等。
Argo workflow拥有良好的UI控制台、提交任务后能够在UI上观测到Workflow的运行状况。
Argo拥有非常活跃的社区、在过去一年中,超过900名贡献者活跃在Argo社区,在整个CNCF项目中排名第三,阿里云也作为核心贡献者来参与了很多的贡献。它在Git上有超过14k的star、在CNCF处于毕业状态,在全球有超过200+的大型公司来使用。
可以看到这个项目已经非常稳定、成熟,可以说引领了云原生离线任务编排,成为了在Kubernetes编排任务的标准。
无论您是企业的开发人员、运维人员、数据科学家。您都可以使用Argo workflow编排,来提高生产效率。
这是Argo workflows在kubernetes上的一个架构。其核心组件controller、UI等部署在K8s集群中。
用户可以通过UI、Python SDK、Cli等向集群中提交任务。工作流引擎会根据任务的逻辑来动态创建Pod完成任务。
有些用户使用开源自建的方式构建自己的工作流引擎,那随着业务增、复杂性提升,研发流程自动化水平的进一步提升,编排的任务越来越多,在使用过程中,也难免会遇到一些问题,尤其是大规模、深水区使用的情况。我们收集了一些用户的反馈,总结出来有以下挑战。
开源自建Argo Workflows挑战
第一个就是稳定性:
runC的方式让多个任务集中在一个机器上,导致资源争抢、出现节点OOM、频繁宕机。大规模工作流调度导致集群控制面异常,集群不可用。工作流Result资源泄露、controlller异常重启。
第二是成本和规模:
开源Argo workflow对超大工作流支持不完善。如何支持科学计算等复杂的场景。大规模任务运行速度如何保障。业务潮汐效应明显,固定资源池成本高,如何分摊成本。
第三是安全运维:
如何实现用户认证、鉴权和单点登录。解决CVE安全问题。如何持续升级迭代。减少自建场景下大量的日常问题排查、运维工作。
这些问题困扰着用户,往往一个问题需要排查很久,这对人力成本是得不偿失的。为了解决用户遇到的这些问题,聚焦精力在业务创新上,我们结合在过去工作流场景的沉淀,支持自动驾驶、科学计算等场景的客户的经验。推出了全托管的Serverless Argo工作流。
全托管Serverless Argo工作流
它主要有以下几个特点:
全托管:托管了Argo workflows的核心组件。让用户无需运维控制面。
免运维:使用Serverless Pod运行任务,按需付费,无需运维节点。
可观测:集成了Prommethous、Sls等可观测产品,方便观察工作流的运行情况。
易集成:可以便捷的和git、fc、eventbridge等产品进行集成、提高业务的自动化能。
这些特点可以让用户得到好的使用体验,方便快捷的上手使用工作流。除此之外,对于系统的核心引擎也针对开源做了针对性增强。来提升整体的性能和稳定性。
主要有以下几个方面:
1)支持超大工作流,单个工作流可达2w,支持数千Pod同时快速启动,以及超大工作流的快速retry,保障Workflow执行成功率。
2)超长命令行参数支持,方便科研人员。自动地磁扩缩容。大文件分片上传、垃圾回收,提升整体易用性。
3)修复开源版本多个稳定性问题,避免控制面Crash,OOM等,增强引擎稳定性。
4)任务运行过程并行优化,并行更新Pod,解析Artifacts等。管控面参数全面调优,有效提升性能。
通过这些在核心引擎上的提高。有效地保障了集群的稳定和性能。
总结一下全托管工作流的优势:
简单易用的工作流引擎:五分钟即可开启并提交工作流,并且完全兼容开源,方便将原生工作流迁移过来。
稳定高性能:经过控制面调优,修复社区版本稳定性问题,整体提升工作流引擎稳定性可靠性,比如深势科技使用全托管的工作流、大规模编排科学计算任务、使用数万核的算力运行任务,系统稳定性大幅提高。
专业支持,兼顾效率与成本:我们沉淀出众多领域的最佳实践,可以帮助您构建高效工作流。拥有专业的团队支持,有社区的Maintainer帮助处理工作流引擎优化问题,只需专注于业务创新。通过Serverless方式运行任务,按需使用,无需预留资源,支持高并发,有效节省成本。
下面我再分享一些领域的经典实践。
Serverless Argo应用广泛,在各个领域都有最佳实践,包括不限于:汽车行业大规模的自动驾驶仿真、科学计算行业的复杂的工作流模拟、金融行业的自动化分析预测、数字媒体行业的视频数据处理等。
并行数据处理
下面我们演示一个并行数据处理的demo,主要流程是合并oss上的500多个文件,每个文件有一个字符,他的整个主流程是串行的,但是每一个主流程中间会启动多个pod进行并行加速数据处理,比如这里第一步启动256个pod来加速512个文件的处理,第二步启动128个pod加速处理上一步的输出结果。依次类推,最终做一个Merge操作。
可以看到使用Serverless Argo编排任务非常流畅、简洁、并且支持规模化并行。如果大家感兴趣,欢迎来进行试用。