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

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 近期,CNCF 技术监督委员会(Technical Oversight Committee,TOC)投票决定接受 Argo 作为孵化级别的托管项目。作为一个新加入的项目,Argo 主要关注于 Kubernetes 原生的工作流,持续部署等方面。

1

作者 | 遥鹭、郡宝

导读:近期,CNCF 技术监督委员会(Technical Oversight Committee,TOC)投票决定接受 Argo 作为孵化级别的托管项目。作为一个新加入的项目,Argo 主要关注于 Kubernetes 原生的工作流,持续部署等方面。

Argo 项目是一组 Kubernetes 原生工具集合,用于运行和管理 Kubernetes 上的作业和应用程序。它提供了一种在 Kubernetes 上创建工作和应用程序的三种计算模式 – 服务模式、工作流模式和基于事件的模式 – 的简单组合方式。所有的 Argo 工具都实现为控制器和自定义资源。

2

阿里云容器服务是国内早期使用 argo workflow 的团队之一。在落地生产过程中,解决了大量性能瓶颈,并且开发了较多功能回馈给社区,团队成员也是 Argo 项目 Maintainer 之一。

Argo 项目:面向 K8s 的工作流

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

Argo 最早是通过 workflow 在社区闻名。Argo Workflow 的项目名称就是 Argo, 是 Argo 组织最初的项目。Argo Workflow 专注于 Kubernetes Native Workflow 设计,拥有声明式工作流机制,能够通过 CRD 的模式完全兼容 Kubernetes 集群,每个任务通过 Pod 的形式运行,Workflow 提供 DAG 等依赖拓扑,并且能够通过 Workflow Template CRD 实现多个 Workflow 之间的组合与拼接。

3

上图就是一个典型的 DAG 结构,Argo Workflow 可以根据用户提交的编排模板,很容易的构建出一个有相互依赖关系的工作流。Argo Workflow 就可以处理这些依赖关系,并且按照用户设定的顺序依次运行。

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

4

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 步以上的大型工作流运行。

Argo 在基因数据处理场景的落地实践

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

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

5

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

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
8月前
|
存储 边缘计算 Kubernetes
边缘计算问题之YurtControllerManager 接管原生 Kubernetes 的调度如何解决
边缘计算问题之YurtControllerManager 接管原生 Kubernetes 的调度如何解决
65 1
|
3月前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
8月前
|
Kubernetes API 调度
Kubernetes 架构解析:理解其核心组件
【8月更文第29天】Kubernetes(简称 K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它提供了一个可移植、可扩展的环境来运行分布式系统。本文将深入探讨 Kubernetes 的架构设计,包括其核心组件如何协同工作以实现这些功能。
638 0
|
5月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
1009 8
|
5月前
|
Kubernetes 监控 API
深入解析Kubernetes及其在生产环境中的最佳实践
深入解析Kubernetes及其在生产环境中的最佳实践
214 1
|
5月前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
5月前
|
Kubernetes Cloud Native 调度
云原生批量任务编排引擎Argo Workflows发布3.6,一文解析关键新特性
Argo Workflows是CNCF毕业项目,最受欢迎的云原生工作流引擎,专为Kubernetes上编排批量任务而设计,本文主要对最新发布的Argo Workflows 3.6版本的关键新特性做一个深入的解析。
|
5月前
|
安全 测试技术 数据安全/隐私保护
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验
|
5月前
|
存储 Kubernetes 调度
深度解析Kubernetes中的Pod生命周期管理
深度解析Kubernetes中的Pod生命周期管理
|
6月前
|
运维 Cloud Native 持续交付
云原生技术解析:从IO出发,以阿里云原生为例
【10月更文挑战第24天】随着互联网技术的不断发展,传统的单体应用架构逐渐暴露出扩展性差、迭代速度慢等问题。为了应对这些挑战,云原生技术应运而生。云原生是一种利用云计算的优势,以更灵活、可扩展和可靠的方式构建和部署应用程序的方法。它强调以容器、微服务、自动化和持续交付为核心,旨在提高开发效率、增强系统的灵活性和可维护性。阿里云作为国内领先的云服务商,在云原生领域有着深厚的积累和实践。
146 0

相关产品

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

    更多
    下一篇
    oss创建bucket