如何使用Argo Workflow安全高效管理文件
工作流集群是一個全托管的Argo服務,專注于高效安全的文件管理,并提供了一些增強功能。它在批處理、數(shù)據(jù)處理和持續(xù)集成等場景中比標準的Argo Workflows更具優(yōu)勢。本文將介紹工作流集群如何實現(xiàn)高效安全的文件管理。
復雜工作流編排的存儲難題
Argo Workflows是一個開源的云原生工作流引擎,也是CNCF的畢業(yè)項目。Argo Workflows可以自動化管理Kubernetes上的復雜工作流程,適用于多種場景,如定時任務、機器學習、ETL和數(shù)據(jù)分析、模型訓練、數(shù)據(jù)流Pipeline以及CI/CD等。
在使用Argo Workflows進行任務編排時,尤其是在數(shù)據(jù)量大的場景下,如模型訓練、數(shù)據(jù)處理、生物信息學分析等,如何高效管理和存儲Artifacts是非常重要的一環(huán)。然而,采用開源方案可能面臨以下挑戰(zhàn)。
超大文件無法上傳:對于超過5 GiB的文件,因客戶端上傳限制而導致上傳失敗。
缺乏文件清理機制:隨著工作流執(zhí)行的推進,中間產(chǎn)生的臨時文件或已完成任務的輸出結果若未及時清理,會導致OSS存儲空間的浪費。
Argo Server磁盤占用過高:在使用Argo Server下載文件時,需要先落盤再傳輸,高磁盤占用不僅影響服務器性能,還可能導致服務中斷或數(shù)據(jù)丟失。
分布式工作流Argo集群作為一款完全遵循社區(qū)規(guī)范的全托管式Argo Workflows服務,專注于解決大規(guī)模、高安全性的文件管理工作挑戰(zhàn)。其一系列重要增強功能包括超大文件分片上傳、Artifacts垃圾回收(GC)以及Artifacts流式傳輸。這些特性旨在幫助用戶在阿里云環(huán)境下實現(xiàn)對OSS文件的高效、安全和精細管理。
分布式工作流Argo集群作為全托管的Argo工作流服務,在Artifacts文件管理上相比于開源方案具有以下優(yōu)勢:
OSS文件管理能力 | 分布式工作流Argo集群 | 開源Argo Workflows |
文件上傳 | 支持超大文件分片上傳 | 僅支持 < 5 GiB,超大文件暫不支持 |
文件回收 | 支持Artifacts垃圾回收(GC) | 不支持文件回收 |
文件下載 | 支持流式傳輸 | 需要落盤,過程繁瑣 |
方案一:支持超大文件上傳
Argo開源方案不支持超大文件上傳,限制了其在數(shù)據(jù)密集型任務中的應用。為解決這一問題,分布式工作流Argo集群優(yōu)化了超大文件上傳至OSS的邏輯,支持分片和斷點續(xù)傳,顯著提升了大文件處理效率和可靠性。優(yōu)化后的方案還能獨立校驗每個分片完整性,進一步增強數(shù)據(jù)完整性和系統(tǒng)容錯能力。
使用示例
該功能在工作流集群中默認開通,在配置Artifacts后,提交示例工作流,即可在OSS上獲得一個大小為20 GiB的文件testfile.txt,證明超大文件已上傳。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: artifact-
spec:
entrypoint: main
templates:
- name: main
metadata:
annotations:
k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi" # 自定義設置要增加的臨時存儲空間大小。
k8s.aliyun.com/eci-use-specs : "ecs.g7.xlarge"
container:
image: alpine:latest
command:
- sh
- -c
args:
- |
mkdir -p /out
dd if=/dev/random of=/out/testfile.txt bs=20M count=1024 # 生成20 GiB的文件。
echo "created files!"
outputs: # 觸發(fā)文件上傳到OSS。
artifacts:
- name: out
path: /out/testfile.txt
方案二:配置文件清理機制
開源的Argo方案無法實現(xiàn)OSS文件的自動回收,增加了用戶的使用和運維成本。Argo Workflows的Artifacts垃圾回收(GC)機制主要用于在工作流結束后清理不再需要的文件,如中間結果、日志等,從而節(jié)省存儲空間和成本,避免存儲資源的無限制地被消耗。
工作流集群優(yōu)化了OSS上的文件清理方法,用戶只需配置簡單的回收邏輯,就可以實現(xiàn)以下功能:
自動清理:在工作流完成后,或在管理員手動清理工作流相關資源一定時間后,自動回收上傳至OSS的文件。
靈活配置回收:您可以選擇只為成功的工作流任務配置回收策略,避免清理失敗日志,便于后續(xù)追蹤定位問題,或者選擇只為失敗的工作流任務配置回收策略,清除無效的中間產(chǎn)出。
生命周期管理策略:利用OSS提供的生命周期管理策略,您可以設置規(guī)則,根據(jù)時間、前綴等參數(shù),自動刪除舊的Artifacts,或將早期的Artifacts歸檔至冷存儲。這樣不僅能夠確保數(shù)據(jù)完整性,也可以有效降低存儲成本。
使用示例
通過配置Artifacts垃圾回收(GC)策略,可以啟用該功能。以下示例中,工作流整體的Artifacts垃圾回收(GC)策略為刪除后回收,其中on-completion.txt文件的回收策略為完成時回收。提交該工作流后,可以在OSS上觀察到,工作流完成時on-completion.txt文件被回收,刪除工作流后on-deletion.txt文件也會被回收。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: artifact-gc-
spec:
entrypoint: main
artifactGC:
strategy: OnWorkflowDeletion # 全局回收策略,在Workflow被刪除時回收Artifact,可被覆蓋。
templates:
- name: main
container:
image: argoproj/argosay:v2
command:
- sh
- -c
args:
- |
echo "hello world" > /tmp/on-completion.txt
echo "hello world" > /tmp/on-deletion.txt
outputs: # 上傳文件到OSS。
artifacts:
- name: on-completion
path: /tmp/on-completion.txt
artifactGC:
strategy: OnWorkflowCompletion # 覆蓋全局回收策略,在Workflow完成時回收Artifact。
- name: on-deletion
path: /tmp/on-deletion.txt
方案三:支持流式傳輸機制
使用開源方案時,Argo Server在下載文件時需要先寫入磁盤再傳輸,這可能導致較高的磁盤占用率,從而影響服務器性能,甚至可能導致服務中斷或數(shù)據(jù)丟失。
工作流集群實現(xiàn)了OSS的OpenStream接口,當您在Argo Workflows UI界面下載文件時,Argo Server可以直接將OSS服務端的文件流式傳輸給用戶,并非將文件完整下載到服務器本地再提供給用戶。這種流式傳輸機制特別適合處理大規(guī)模數(shù)據(jù)傳輸和存儲的工作流任務,具有以下優(yōu)勢。
提升下載性能:通過流式傳輸文件直接從OSS服務端傳輸,無需等待整個文件下載到Argo Server,從而減少下載開始的延遲,提升響應速度,提供更流暢的體驗。
減少資源占用以增強并發(fā)能力:流式處理降低了Argo Server對內存和磁盤的需求,使其能在相同硬件資源下處理更多的并行文件傳輸請求,提高了系統(tǒng)的并發(fā)處理能力。隨著使用者數(shù)量增加或文件大小增大,直接通過流式傳輸可以更好地擴展服務來處理這種增長,不必擔心Argo Server的磁盤空間限制。
提升安全合規(guī)性:避免了數(shù)據(jù)在Argo Server空間中的臨時存儲,減小了安全風險和數(shù)據(jù)泄露的可能性,更有效地遵循數(shù)據(jù)保護和合規(guī)性要求。
通過流式傳輸Artifacts文件,Argo Server能夠減輕單點壓力,同時提升UI文件下載的性能,從而有效轉型為輕量級的數(shù)據(jù)流轉中心,而非存儲和計算的重負載中心。
聯(lián)系我們
如果您對于ACK One有任何疑問,歡迎使用釘釘搜索釘釘群號35688562加入釘釘群。