天天看點

Argo項目入駐CNCF,一文解析Kubernetes原生工作流

Argo項目入駐CNCF,一文解析Kubernetes原生工作流

近期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 之間的組合與拼接。

Argo項目入駐CNCF,一文解析Kubernetes原生工作流

上圖就是一個典型的 DAG 結構,Argo Workflow 可以根據使用者送出的編排模闆,很容易的建構出一個有互相依賴關系的工作流。Argo Workflow 就可以處理這些依賴關系,并且按照使用者設定的順序依次運作。

Argo CD 是另一個最近比較知名的項目。 Argo CD主要面向Gitops流程,解決了通過Git一鍵部署到Kubernetes的需求,并且能夠根據版本辨別快速跟蹤,復原。Argo CD還提供了多叢集部署功能,能夠打通多個叢集之間同一應用部署問題。

Argo項目入駐CNCF,一文解析Kubernetes原生工作流

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病毒檢測等場景。

Argo項目入駐CNCF,一文解析Kubernetes原生工作流

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

繼續閱讀