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 之間的組合與拼接。
上圖就是一個典型的 DAG 結構,Argo Workflow 可以根據用戶提交的編排模板,很容易的構建出一個有相互依賴關係的工作流。Argo Workflow 就可以處理這些依賴關係,並且按照用戶設定的順序依次運行。
Argo CD 是另一個最近比較知名的項目。 Argo CD主要面向Gitops流程,解決了通過Git一鍵部署到Kubernetes的需求,並且能夠根據版本標識快速跟蹤,回滾。Argo CD還提供了多集群部署功能,能夠打通多個集群之間同一應用部署問題。
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病毒檢測等場景。
AGS工作流是基於argo實現的,為Kubernetes提供容器化的本地工作流程。工作流程中的每個步驟都定義為容器。
工作流引擎是作為 Kubernetes CRD(自定義資源定義)實現的。 因此,可以使用kubectl管理工作流,並與其他Kubernetes 服務本地集成,例如Volumes、Secrets 和 RBAC。 工作流控制器提供完整的工作流程功能,包括參數替換,存儲,循環和遞歸工作流程。
阿里雲在基因計算場景下使用Argo Workflow 在Kubernetes集群上運行數據處理分析業務,能夠支持超過 5000 步以上的大型工作流,且能夠比傳統數據處理方式加速百倍。通過定製化的Workflow引擎,極大的便捷了基因數據處理的效率。