Argo 项目入驻 CNCF,一文解析 Kubernetes 原生工作流
作者 |?遙鷺、郡寶
**導(dǎo)讀:**近期,CNCF 技術(shù)監(jiān)督委員會(huì)(Technical Oversight Committee,TOC)投票決定接受 Argo 作為孵化級(jí)別的托管項(xiàng)目。作為一個(gè)新加入的項(xiàng)目,Argo 主要關(guān)注于 Kubernetes 原生的工作流,持續(xù)部署等方面。
Argo 項(xiàng)目是一組 Kubernetes 原生工具集合,用于運(yùn)行和管理 Kubernetes 上的作業(yè)和應(yīng)用程序。它提供了一種在 Kubernetes 上創(chuàng)建工作和應(yīng)用程序的三種計(jì)算模式 – 服務(wù)模式、工作流模式和基于事件的模式 – 的簡(jiǎn)單組合方式。所有的 Argo 工具都實(shí)現(xiàn)為控制器和自定義資源。
阿里云容器服務(wù)是國(guó)內(nèi)早期使用 argo workflow 的團(tuán)隊(duì)之一。在落地生產(chǎn)過(guò)程中,解決了大量性能瓶頸,并且開(kāi)發(fā)了較多功能回饋給社區(qū),團(tuán)隊(duì)成員也是 Argo 項(xiàng)目 Maintainer 之一。
Argo 項(xiàng)目:面向 K8s 的工作流
DAG (Directed acyclic graph,有向無(wú)環(huán)圖)是一個(gè)典型計(jì)算機(jī)圖論問(wèn)題,可以用來(lái)模擬有相互依賴(lài)關(guān)系的數(shù)據(jù)處理任務(wù),比如音視頻轉(zhuǎn)碼,機(jī)器學(xué)習(xí)數(shù)據(jù)流,大數(shù)據(jù)分析等。
Argo 最早是通過(guò) workflow 在社區(qū)聞名。Argo Workflow 的項(xiàng)目名稱(chēng)就是 Argo, 是 Argo 組織最初的項(xiàng)目。Argo Workflow 專(zhuān)注于 Kubernetes Native Workflow 設(shè)計(jì),擁有聲明式工作流機(jī)制,能夠通過(guò) CRD 的模式完全兼容 Kubernetes 集群,每個(gè)任務(wù)通過(guò) Pod 的形式運(yùn)行,Workflow 提供 DAG 等依賴(lài)拓?fù)?#xff0c;并且能夠通過(guò) Workflow Template CRD 實(shí)現(xiàn)多個(gè) Workflow 之間的組合與拼接。
上圖就是一個(gè)典型的 DAG 結(jié)構(gòu),Argo Workflow 可以根據(jù)用戶(hù)提交的編排模板,很容易的構(gòu)建出一個(gè)有相互依賴(lài)關(guān)系的工作流。Argo Workflow 就可以處理這些依賴(lài)關(guān)系,并且按照用戶(hù)設(shè)定的順序依次運(yùn)行。
Argo CD 是另一個(gè)最近比較知名的項(xiàng)目。 Argo CD 主要面向 Gitops 流程,解決了通過(guò) Git 一鍵部署到 Kubernetes 的需求,并且能夠根據(jù)版本標(biāo)識(shí)快速跟蹤,回滾。Argo CD 還提供了多集群部署功能,能夠打通多個(gè)集群之間同一應(yīng)用部署問(wèn)題。
Argo Event?提供基于事件依賴(lài)關(guān)系的聲明式管理,以及基于各種事件源的 Kubernetes 資源觸發(fā)器。 Argo Events 的常見(jiàn)用法是觸發(fā) Argo 工作流并為使用 Argo CD 部署的長(zhǎng)期服務(wù)生成事件。
Argo Rollout 是為了解決多種部署形式而誕生的項(xiàng)目。Argo Rollout 能實(shí)現(xiàn)多種灰度發(fā)布方式,同時(shí)結(jié)合 Ingress, Service Mesh 等方式完成流量管理與灰度測(cè)試。
Argo 各個(gè)子項(xiàng)目既可以單獨(dú)使用,也可以結(jié)合使用。一般而言,結(jié)合使用多個(gè)子項(xiàng)目能夠發(fā)揮 Argo 更大的能力,并且實(shí)現(xiàn)更多的功能。
使用 Argo 中遇到的問(wèn)題與解決方法
阿里云最早落地的是 Argo Workflow,在使用 Argo Workflow 時(shí)第一個(gè)問(wèn)題就是權(quán)限管理。Argo Workflow 每一個(gè)具體的任務(wù)都是通過(guò) Pod 來(lái)執(zhí)行,同時(shí)有一個(gè) sidecar 容器來(lái)監(jiān)聽(tīng)主任務(wù)的進(jìn)行。這里的 sidecar 監(jiān)聽(tīng)方式是通過(guò) mount docker.sock 來(lái)實(shí)現(xiàn),這就繞過(guò)了 Kubernetes APIServer RBAC 機(jī)制,無(wú)法實(shí)現(xiàn)對(duì)于用戶(hù)權(quán)限的精確控制。我們與社區(qū)一起合作開(kāi)發(fā),實(shí)現(xiàn)了 Argo Kubernetes APIServer Native Executor 功能,sidecar 能夠通過(guò) service account 監(jiān)聽(tīng) APIServer 來(lái)獲取到主容器的動(dòng)態(tài)與信息,實(shí)現(xiàn)了 Kubernetes RBAC 的支持與權(quán)限收斂。
Argo Workflow 在 DAG 解析過(guò)程中,每一步都會(huì)根據(jù) Workflow label 來(lái)掃描所有的 Pod 狀態(tài),以此來(lái)決定是否需要進(jìn)行下一步的動(dòng)作。但是每一次掃描都是串行執(zhí)行,當(dāng)集群中 Workflow 較多的時(shí)候,就會(huì)出現(xiàn)掃描速度緩慢,工作流的任務(wù)長(zhǎng)時(shí)間等待的現(xiàn)象?;诖宋覀冮_(kāi)發(fā)了并行掃描功能,將所有的掃描動(dòng)作使用 goroutine 并行化,極大的加速了工作流執(zhí)行效率。將原有需要 20 小時(shí)運(yùn)行的任務(wù),降低到 4 小時(shí)完成。此功能已經(jīng)回饋給社區(qū),并且在 Argo Workflow v2.4 版本發(fā)布。
在實(shí)際生產(chǎn)中,Argo Workflow 執(zhí)行的步數(shù)越多,占用的空間越多。所有的執(zhí)行步驟均記錄在 CRD Status 字段里面。當(dāng)任務(wù)數(shù)量超過(guò) 1000 步的時(shí)候,就會(huì)出現(xiàn)單個(gè)對(duì)象過(guò)大,無(wú)法存儲(chǔ)進(jìn)入 ETCD,或者會(huì)因?yàn)榱髁窟^(guò)大,拖垮 APIServer。我們與社區(qū)合作開(kāi)發(fā)了狀態(tài)壓縮技術(shù),能夠?qū)?Status 進(jìn)行字符串壓縮。壓縮后的 Status 字段大小僅為原來(lái)大小的 20 分之一,實(shí)現(xiàn)了 5000 步以上的大型工作流運(yùn)行。
Argo 在基因數(shù)據(jù)處理場(chǎng)景的落地實(shí)踐
AGS(阿里云基因計(jì)算服務(wù))主要應(yīng)用于基因組測(cè)序二級(jí)分析,通過(guò) AGS 加速 API 只需要 15 分鐘即可完成一個(gè) 30X WGS 的基因比對(duì)、排序、去重、變異檢測(cè)全流程,相比經(jīng)典流程可加速 120 倍,比目前全球最快的 FPGA/GPU? 方案仍能提速 2-4 倍。
通過(guò)分析個(gè)體基因序列的突變機(jī)制,可為遺傳病檢測(cè)、腫瘤篩查等提供有力支撐,未來(lái)將在臨床醫(yī)學(xué)和基因診斷方面發(fā)揮巨大作用。人類(lèi)全基因組有約 30 億個(gè)堿基對(duì),一個(gè) 30X 的 WGS 測(cè)序數(shù)據(jù)量大約在 100GB。AGS 在計(jì)算速度、精準(zhǔn)度、成本、易用性、與上游測(cè)序儀的整合度上具有極大優(yōu)勢(shì),同時(shí)適用于 DNA 的 SNP/INDEL 以及 CNV 結(jié)構(gòu)變異檢測(cè),以及 DNA/RNA 病毒檢測(cè)等場(chǎng)景。
AGS 工作流是基于 argo 實(shí)現(xiàn)的,為 Kubernetes 提供容器化的本地工作流程。工作流程中的每個(gè)步驟都定義為容器。
工作流引擎是作為 Kubernetes CRD(自定義資源定義)實(shí)現(xiàn)的。 因此,可以使用 kubectl 管理工作流,并與其它 Kubernetes 服務(wù)本地集成,例如 Volumes、Secrets 和 RBAC。 工作流控制器提供完整的工作流程功能,包括參數(shù)替換,存儲(chǔ),循環(huán)和遞歸工作流程。
阿里云在基因計(jì)算場(chǎng)景下使用 Argo Workflow 在 Kubernetes 集群上運(yùn)行數(shù)據(jù)處理分析業(yè)務(wù),能夠支持超過(guò) 5000 步以上的大型工作流,且能夠比傳統(tǒng)數(shù)據(jù)處理方式加速百倍。通過(guò)定制化的 Workflow 引擎,極大的便捷了基因數(shù)據(jù)處理的效率。
作者簡(jiǎn)介
陳顯鷺,阿里云技術(shù)專(zhuān)家,深耕 Docker&Kubernetes 多年,是 Docker 多個(gè)項(xiàng)目的 Contributor, Kubernetes Group Member,《自己動(dòng)手寫(xiě) Docker》作者。 專(zhuān)注于容器技術(shù)的編排與基礎(chǔ)環(huán)境研究。愛(ài)好折騰源代碼、熱愛(ài)開(kāi)源文化并積極參與社區(qū)開(kāi)源項(xiàng)目的研發(fā)。
郡寶,Kubernetes 項(xiàng)目貢獻(xiàn)者,Kubernetes 和 Kubernetes-sigs 社區(qū)成員。在容器、K8s 領(lǐng)域有多年的實(shí)踐經(jīng)驗(yàn),目前就職于阿里巴巴云計(jì)算容器服務(wù)團(tuán)隊(duì),主要研究方向有容器存儲(chǔ)、容器編排 、 AGS 產(chǎn)品等領(lǐng)域.
AGS 試用鏈接:https://help.aliyun.com/document_detail/156348.html
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開(kāi)發(fā)者的技術(shù)圈。”
總結(jié)
以上是生活随笔為你收集整理的Argo 项目入驻 CNCF,一文解析 Kubernetes 原生工作流的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 回顾 | Alibaba Cloud N
- 下一篇: Serverless 风起云涌,为什么阿