Argo(https://argoproj.github.io/projects/argo) 項目是一組 Kubernetes 原生工具集合,用於運行和管理 Kubernetes 上的做業和應用程序。Argo 提供了一種在 Kubernetes 上建立工做和應用程序的三種計算模式 – 服務模式、工做流模式和基於事件的模式 – 的簡單組合方式。全部的 Argo 工具都實現爲控制器和自定義資源。git
- 更多參考:
Argo 項目:面向 K8s 的工做流
DAG (Directed acyclic graph,有向無環圖) 是一個典型計算機圖論問題,能夠用來模擬有相互依賴關係的數據處理任務,好比音視頻轉碼,機器學習數據流,大數據分析等。github
Argo 最先是經過 workflow 在社區聞名。Argo Workflow 的項目名稱就是 Argo, 是 Argo 組織最初的項目。Argo Workflow 專一於 Kubernetes Native Workflow 設計,擁有聲明式工做流機制,可以經過 CRD 的模式徹底兼容 Kubernetes 集羣,每一個任務經過 Pod 的形式運行,Workflow 提供 DAG 等依賴拓撲,而且可以經過 Workflow Template CRD 實現多個 Workflow 之間的組合與拼接。docker
上圖就是一個典型的 DAG 結構,Argo Workflow 能夠根據用戶提交的編排模板,很容易的構建出一個有相互依賴關係的工做流。Argo Workflow 就能夠處理這些依賴關係,而且按照用戶設定的順序依次運行。機器學習
Argo CD 是另外一個最近比較知名的項目。Argo CD 主要面向 Gitops 流程,解決了經過 Git 一鍵部署到 Kubernetes 的需求,而且可以根據版本標識快速跟蹤,回滾。Argo CD 還提供了多集羣部署功能,可以打通多個集羣之間同一應用部署問題。ide
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 產品等領域。