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