Argo(https://argoproj.github.io/projects/argo) 项目是一组 Kubernetes 原生工具集合,用于运行和管理 Kubernetes 上的做业和应用程序。Argo 提供了一种在 Kubernetes 上建立工做和应用程序的三种计算模式 – 服务模式、工做流模式和基于事件的模式 – 的简单组合方式。全部的 Argo 工具都实现为控制器和自定义资源。git
- 更多参考:
Argo 项目:面向 K8s 的工做流
DAG (Directed acyclic graph,有向无环图) 是一个典型计算机图论问题,能够用来模拟有相互依赖关系的数据处理任务,好比音视频转码,机器学习数据流,大数据分析等。github
Argo 最先是经过 workflow 在社区闻名。Argo Workflow 的项目名称就是 Argo, 是 Argo 组织最初的项目。Argo Workflow 专一于 Kubernetes Native Workflow 设计,拥有声明式工做流机制,可以经过 CRD 的模式彻底兼容 Kubernetes 集群,每一个任务经过 Pod 的形式运行,Workflow 提供 DAG 等依赖拓扑,而且可以经过 Workflow Template CRD 实现多个 Workflow 之间的组合与拼接。docker

上图就是一个典型的 DAG 结构,Argo Workflow 能够根据用户提交的编排模板,很容易的构建出一个有相互依赖关系的工做流。Argo Workflow 就能够处理这些依赖关系,而且按照用户设定的顺序依次运行。机器学习
Argo CD 是另外一个最近比较知名的项目。Argo CD 主要面向 Gitops 流程,解决了经过 Git 一键部署到 Kubernetes 的需求,而且可以根据版本标识快速跟踪,回滚。Argo CD 还提供了多集群部署功能,可以打通多个集群之间同一应用部署问题。ide

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 病毒检测等场景。

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 产品等领域。