你不能不知道的Argo

Apr 14, 2022 Yee

Photo by Alvaro Reyes on Unsplash

Photo by Alvaro Reyes on Unsplash

近些年內伴隨著 GitOps 與 Cloud Native 的潮流湧至,乘在浪頂的你可能對於 Argo 這個項目並不陌生,因大多數的 GitOps 是採用 Argo CD 來實作的,而我們今天要介紹的主角是 Argo Workflow。

不同於 Argo CD 許多人都有一些部署管理上的優化需求,Argo Workflow 所面向的使用群眾則相較沒那麼地廣泛,或者說不乏有相似功能的產品已能符合部分使用情境,另外值得一提的是知名的 Kubeflow 底層就是採用 Argo workflow 來實作的,那麽它還有哪些特別的優勢,又能為我們解決什麼樣的問題呢,接下來跟著本文一起深入探索吧!

先瞭解 Argo 吧

雲原生基金會(CNCF)下孵化器所託管的一個專案,致力於 Kubernetes 上各種流程優化工具開發,旗下包含了4個專案,分別是用於平行調度的工作流程引擎 Argo Workflow、GitOps 部署管理的 Argo CD、更高階的發佈策略控制工具 Argo Rollouts、以及事件相依管理器 Argo Events。

目前有許多知名企業採用 Argo 作為產品開發生產中不可或缺的工具之一,其中就包含了Adobe、Nvidia、Tesla、Google、RedHat 等公司。

Argo Workflow
Argo Workflow

開始之前先稍微看看 Argo Workflow 官方所宣稱的優勢:

Script

正式進入主題了,以下是我們常見在定義工作流時,單一任務的描述內容,以 gitlab-ci 及 drone-ci為例:

gitlab-ci
gitlab-ci

drone-ci
drone-ci

接著看看 Argo Workflow的定義方式:

Argo workflow script
Argo workflow script

以差不多任務腳本定義的範例比較,可以看出推出多時且成熟的 gitlab-ci 與 drone-ci 在單純支援腳本語法的限制下已可以完成多數人的使用情境,而 Argo workflow 在腳本定義上可以直接支援不同語言撰寫,相比之下則更為彈性,另外 Argo 也有提供 Library 可以完全使用 Golang、Java 或 Python 來描述工作流程而非原本的 YAML 方式。

雖說前者也可以將提前撰寫好的程式檔案利用掛載方式透過腳本來執行,但從維護及維運的角度會發現兩個痛點,第一點是維護時無法直觀地在定義工作流的內容上看清整體運作邏輯;第二點是維運時以 gitlab-ci 為例,在 gitlab portal 上觀看任務執行過程紀錄時僅會顯示執行了某某檔案,如果在執行過程中失敗更是難以追朔除錯。

看完上述的範例我們可以發現,在差不多的任務定義下 Argo workflow 更為靈活彈性可以應付不同的場景需求,然而光這樣可能還不足夠吸引人,它被設計所要應付的情境遠遠不止這些,接下來我們繼續挖掘它令人無法忽視的強大!

Template

Argo workflow 支援模板的定義功能,增加了相似任務的重用性,引用模板時給予不同的參數便可以達成不一樣的任務執行,下面我們來看看範例:

Argo Workflow Templates
Argo Workflow Templates

範例中我們定義了兩個模板 hello-templatehello-exec ,並設置執行的進入點為 hello-exec ,而 hello-exec 模板內則描述了兩個任務步驟且分別調用了 hello-template 模板,執行後便可以得到 hello Tomhello Amy 兩個結果。在日趨增長的需求下我們的工作流程也可能伴隨著需求不斷地調整,有了模板的定義功能後便能應付更多複雜的場景,同時也能大大減少相似任務的冗余描述。

DAG (Directed Acyclic Graph)

有向無環圖,讓我們定義類似樹狀結構的工作流,可以應付一些有依賴關係的複雜任務,範例:

Argo 搭配 Kaniko 範例
Argo 搭配 Kaniko 範例

範例是一個典型的CI/CD描述,分別定義了兩個任務,一個是 build image,一個是部署到 staging 環境,而部署的任務內又給定了依賴關係,需要在 image build 完後才會執行。有了這層設置便可以描述較為複雜的樹狀工作流程,同時因為有明確的依賴關係定義,不管是從開發維護還是維運都更容易掌握每一個任務的執行時機與排錯,相較其它只用階段(Stage)來定義 Pipeline 的產品來看又增添了不少彈性跟穩定性。

迴圈、條件控制、重試、遞迴…等

我們已經透過上面幾個範例看到 Argo workflow 的各種彈性設計,很難想像地它竟如同寫程式一般也可以直接把迴圈、條件控制、重試及遞迴這些透過描述方式來定義工作流的每一項任務,正所謂族繁不及備載,本文也就不一一列舉了,官方的文件也足夠詳盡,有興趣朋友可以直接拜讀。


站在巨人的肩膀

Argo workflow 除了本身設計優秀之外,也因為兼容建置在強大的 Kubernetes 這套與原生雲密不可分的容器管理平台之上,使得它可以發揮更多的價值!

怎麼說呢?它支援在定義工作任務時直接調用 Kubernetes 上的資源,不管是 Volume、Secret、Job…等,甚至是系統本身的計算資源,允許任務可定義為系統後台運作達到跨工作流使用的效果,也可以定義 Sidecar 來輔助主要任務運行的容器。這些種種的功能設計也都印證了官方所宣稱的優勢,沒有公私有雲限制,基於 Kubernetes 平台就能擁有強大的容器生態工作流編排利器!

結語

由於 Argo workflow 功能過於強大,本文無法將其全部列舉,僅分享筆者本身覺得較泛用且吸引人的特點。誠如文章一開始提及的,不乏有相似可編排工作流的服務引擎,但 Argo 在各方面可以看得出設計上的彈性,即是為了推向更多的使用情境,不管是 Machine Learning、Data Processing、Stream Processing、CI/CD 或是 Infrastructure Automation 都可以透過它進行工作編排。

對筆者來說最吸引人的是與 Argo CD 一樣,有一個可以完整 monitor 的 UI Portal,將定義好的工作流程視覺化方便管理監看!雖然 Argo workflow 不是近期才推出的,但功能也是逐年演進優化,在這邊還是非常推薦大家深入去看看,說不定能帶來不同的啟發,甚至大大改善既有的工作流程。


雙子星雲端為 CNCF 會員,是 CNCF 所認證的 Kubernetes 服務提供商,在雲端技術擁有十多年以上的經驗,為台灣雲端技術早期領先者。目前為國家級 AI 雲的軟體及 Kubernetes 技術與服務提供商,更是諸多企業與單位導入容器與管理平台的最佳夥伴。

雙子星雲端除了既有的產品 AI Console 與 Gemini API Gateway 之外,也提供企業諮詢與導入雲原生與 Kubernetes 相關技術服務,協助企業擁抱 Cloud Natvive,達到數位轉型的目標。


相關文章

回雙子星技術部落格列表

Gemini AI Console

熱門文章


kubernetes professional service

關於我們

雙子星雲端是混合多雲技術的領導者,是國際認證之 KCSP - Kubernetes 服務提供商,同時也為 CNCF 雲原生計算基金會會員。

雙子星的雲端專家擁有 Kubernetes、OpenStack 與 Google Cloud Platform 等多項證照,我們的軟體至今已為上百家機構和數千台的 CPU/GPU 伺服器提供雲端服務。