Argo项目入驻CNCF,一文解析Kubernetes原生工作流

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 近期CNCF宣布欢迎Argo项目进入 CNCF 孵化器,作为一个新加入的项目,Argo主要关注于Kubernetes原生的工作流,持续部署等方面。 Argo项目是一组Kubernetes原生工具集合,用于运行和管理Kubernetes上的作业和应用程序。

image.png
近期CNCF宣布欢迎Argo项目进入 CNCF 孵化器,作为一个新加入的项目,Argo主要关注于Kubernetes原生的工作流,持续部署等方面。

Argo项目是一组Kubernetes原生工具集合,用于运行和管理Kubernetes上的作业和应用程序。阿里云容器服务是国内早期使用argo workflow的团队之一。在落地生产过程中,解决了大量性能瓶颈,并且开发了较多功能回馈给社区,团队成员也是Argo 项目Maintainer 之一。

面向K8s的工作流, Argo 项目介绍

DAG (Directed acyclic graph,有向无环图)是一个典型计算机图论问题,可以用来模拟有相互依赖关系的数据处理任务,比如音视频转码,机器学习数据流,大数据分析等。

Argo 最早是通过workflow 在社区闻名。Argo Workflow 的项目名称就是Argo(https://github.com/argoproj/argo), 是Argo 组织最初的项目。Argo Workflow 专注于Kubernetes Native Workflow 设计,拥有声明式工作流机制,能够通过 CRD 的模式完全兼容Kubernetes 集群,每个任务通过Pod的形式运行,Workflow 提供DAG等依赖拓扑,并且能够通过Workflow Template CRD实现多个Workflow 之间的组合与拼接。
image.png
上图就是一个典型的 DAG 结构,Argo Workflow 可以根据用户提交的编排模板,很容易的构建出一个有相互依赖关系的工作流。Argo Workflow 就可以处理这些依赖关系,并且按照用户设定的顺序依次运行。

Argo CD 是另一个最近比较知名的项目。 Argo CD主要面向Gitops流程,解决了通过Git一键部署到Kubernetes的需求,并且能够根据版本标识快速跟踪,回滚。Argo CD还提供了多集群部署功能,能够打通多个集群之间同一应用部署问题。

image.png

Argo Event 提供基于事件依赖关系的声明式管理,以及基于各种事件源的Kubernetes资源触发器。 Argo Events的常见用法是触发Argo工作流并为使用Argo CD部署的长期服务生成事件。


Argo Rollout 是为了解决多种部署形式而诞生的项目。Argo Rollout 能实现多种灰度发布方式,同时结合Ingress, Service Mesh 等方式完成流量管理与灰度测试。


Argo 各个子项目既可以单独使用,也可以结合使用。一般而言,结合使用多个子项目能够发挥Argo更大的能力,并且实现更多的功能。

使用Argo中遇到的问题与解决方法

阿里云最早落地的是Argo Workflow,在使用Argo Workflow 时第一个问题就是权限管理。Argo Workflow 每一个具体的任务都是通过Pod来执行,同时有一个sidecar 容器来监听主任务的进行。这里的sidecar监听方式是通过mount docker.sock 来实现,这就绕过了Kubernetes APIServer RBAC机制,无法实现对于用户权限的精确控制。我们与社区一起合作开发,实现了Argo Kubernetes APIServer Native Executor 功能,sidecar能够通过service account 监听APIServer 来获取到主容器的动态与信息,实现了Kubernetes RBAC的支持与权限收敛。


Argo Workflow 在 DAG 解析过程中,每一步都会根据Workflow label 来扫描所有的Pod 状态,以此来决定是否需要进行下一步的动作。但是每一次扫描都是串行执行,当集群中Workflow 较多的时候,就会出现扫描速度缓慢,工作流的任务长时间等待的现象。基于此我们开发了并行扫描功能,将所有的扫描动作使用goroutine 并行化,极大的加速了工作流执行效率。将原有需要20 小时运行的任务,降低到4 小时完成。此功能已经回馈给社区,并且在Argo Workflow v2.4版本发布。


在实际生产中,Argo Workflow 执行的步数越多,占用的空间越多。所有的执行步骤均记录在CRD Status 字段里面。当任务数量超过 1000 步的时候,就会出现单个对象过大,无法存储进入ETCD,或者会因为流量过大,拖垮APIServer。我们与社区合作开发了状态压缩技术,能够将Status进行字符串压缩。压缩后的Status字段大小仅为原来大小的 20 分之一,实现了5000步以上的大型工作流运行。

阿里云在基因数据处理场景落地

AGS主要应用于基因组测序二级分析,通过AGS加速API只需要15分钟即可完成一个30X WGS的基因比对、排序、去重、变异检测全流程,相比经典流程可加速120倍,比目前全球最快的FPGA/GPU方案仍能提速2-4倍。


通过分析个体基因序列的突变机制,可为遗传病检测、肿瘤筛查等提供有力支撑,未来将在临床医学和基因诊断方面发挥巨大作用。人类全基因组有约30亿个碱基对,一个30X的WGS测序数据量大约在100GB。AGS在计算速度、精准度、成本、易用性、与上游测序仪的整合度上具有极大优势,同时适用于DNA的SNP/INDEL以及CNV结构变异检测,以及DNA/RNA病毒检测等场景。



image.png



AGS工作流是基于argo实现的,为Kubernetes提供容器化的本地工作流程。工作流程中的每个步骤都定义为容器。
工作流引擎是作为 Kubernetes CRD(自定义资源定义)实现的。 因此,可以使用kubectl管理工作流,并与其他Kubernetes 服务本地集成,例如Volumes、Secrets 和 RBAC。 工作流控制器提供完整的工作流程功能,包括参数替换,存储,循环和递归工作流程。


阿里云在基因计算场景下使用Argo Workflow 在Kubernetes集群上运行数据处理分析业务,能够支持超过 5000 步以上的大型工作流,且能够比传统数据处理方式加速百倍。通过定制化的Workflow引擎,极大的便捷了基因数据处理的效率。

作者简介

陈显鹭
阿里云技术专家
深耕Docker&Kubernetes多年 是Docker多个项目的Contributor, Kubernetes Group Member,《自己动手写Docker》作者。 专注于容器技术的编排与基础环境研究。爱好折腾源代码 热爱开源文化并积极参与社区开源项目的研发

郡宝, Kubernetes 项目贡献者,Kubernetes 和 Kubernetes-sigs 社区成员。在容器、K8S领域有多年的实践经验,目前就职于阿里巴巴云计算容器服务团队,主要研究方向有容器存储、容器编排 、 AGS产品等领域

AGS 试用连接 https://help.aliyun.com/document_detail/156348.html?spm=a2c4g.11186623.6.708.29416a0crpUHqt

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5月前
|
安全 虚拟化
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力
在数字化时代,网络项目的重要性日益凸显。本文从前期准备、方案内容和注意事项三个方面,详细解析了如何撰写一个优质高效的网络项目实施方案,帮助企业和用户实现更好的体验和竞争力。通过具体案例,展示了方案的制定和实施过程,强调了目标明确、技术先进、计划周密、风险可控和预算合理的重要性。
108 5
|
3月前
|
监控 安全 数据可视化
哪些项目适合采用BOT+EPC模式?深度解析
2分钟了解什么是BOT+EPC项目管理模式以及该模式适用于哪些类型的项目。
181 1
哪些项目适合采用BOT+EPC模式?深度解析
|
3月前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
3月前
|
数据可视化 项目管理
项目计划与进度跟踪:甘特图的强大功能解析
甘特图是现代项目管理中不可或缺的工具,通过时间线和任务条直观展示项目进度,支持任务分解、依赖关系管理和进度跟踪。结合板栗看板,可实现任务可视化与实时协作,提升团队效率。定期更新甘特图并灵活应对变化,确保项目顺利推进。
|
3月前
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
121 6
|
3月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
856 11
|
5月前
|
Kubernetes 监控 API
深入解析Kubernetes及其在生产环境中的最佳实践
深入解析Kubernetes及其在生产环境中的最佳实践
210 1
|
5月前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
5月前
|
存储 Kubernetes 调度
深度解析Kubernetes中的Pod生命周期管理
深度解析Kubernetes中的Pod生命周期管理
|
6月前
|
存储 Kubernetes 监控
深度解析Kubernetes在微服务架构中的应用与优化
【10月更文挑战第18天】深度解析Kubernetes在微服务架构中的应用与优化
238 0

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多
    下一篇
    oss创建bucket