Argo基於Kubernetes原生工作流加入CNCF 孵化器

Argo(https://argoproj.github.io/projects/argo) 項目是一組 Kubernetes 原生工具集合,用於運行和管理 Kubernetes 上的作業和應用程序。Argo 提供了一種在 Kubernetes 上創建工作和應用程序的三種計算模式 – 服務模式、工作流模式和基於事件的模式 – 的簡單組合方式。所有的 Argo 工具都實現爲控制器和自定義資源。

Argo 項目:面向 K8s 的工作流

DAG (Directed acyclic graph,有向無環圖) 是一個典型計算機圖論問題,可以用來模擬有相互依賴關係的數據處理任務,比如音視頻轉碼,機器學習數據流,大數據分析等。

Argo 最早是通過 workflow 在社區聞名。Argo Workflow 的項目名稱就是 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 步以上的大型工作流運行。

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 產品等領域。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章