ACK One Argo 工作流集群:玩转容器对象存储

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
函数计算FC,每月15万CU 3个月
简介: ACK One Argo 工作流集群:玩转容器对象存储

【阅读原文】戳:ACK One Argo 工作流集群:玩转容器对象存储


名字解释


Argo Workflows:云原生工作流引擎,专为在Kubernetes集群上协调多个任务或步骤的执行而设计。

 

Artifacts:指在工作流执行过程中产生的、具有持久性的数据对象,通常代表了某个步骤或任务的输出结果。

 

OSS:阿里云对象存储服务,通常作为存储Artifacts的介质。

 

背景

 

[1] Argo Workflows是开源的云原生工作流引擎,CNCF 的毕业项目。Argo Workflows 可以轻松自动化和管理 Kubernetes 上的复杂工作流程。适用于各种场景,包括定时任务、机器学习、ETL和数据分析、模型训练、数据流pipeline、CI/CD等。

 

 

 

在使用Argo Workflows编排任务时,特别是在涉及大数据量的场景如模型训练、数据处理、生物信息学分析等,对Artifacts(通常在阿里云环境中存储于对象存储服务OSS)的高效管理至关重要。然而,采用开源方案的用户可能会遭遇若干挑战,具体包括:

 

超大文件无法上传:对于超过5Gi的文件,由于客户端上传限制导致上传失败。

 

缺乏文件清理机制:随着工作流执行的推进,中间产生的临时文件或已完成任务的输出结果若未能得到及时清理,导致OSS存储空间的无谓消耗。

 

Argo Server磁盘占用过高:在使用Argo Server下载文件时,需要先落盘再传输,高磁盘占用不仅影响服务器性能,还可能导致服务中断或数据丢失。

 

[2] ACK One Serverless Argo工作流作为一款完全遵循社区规范的全托管式Argo Workflows服务,致力于应对并解决大规模、高安全性的文件管理工作挑战。本文将详细介绍该服务在此方面所做出的一系列重要增强功能,包括超大文件分片上传、Artifacts自动垃圾回收(GC)以及Artifacts流式传输等。这些特性旨在助力用户在阿里云环境下对OSS文件实现高效、安全的精细化管理。

 

0428-2.jpg

 

1、支持超大文件分片上传

 

出于数据持久化、共享、缓解Pod临时存储压力及容灾备份等目的,在使用Argo Workflows编排任务时,需要通过Artifacts将中间产出、运行结果及过程日志等数据上传至对象存储服务中。在模型训练、数据处理、生物学信息分析、音视频处理等场景中,常常需要上传海量大文件。

 

开源方案不支持超大文件的上传,给用户带来了显著的操作不便与使用体验不佳的问题,ACK One Serverless Argo工作流优化了超大文件上传至OSS(阿里云对象存储服务)逻辑,支持分片、断点续传,这对于提高大文件处理的效率和可靠性至关重要,尤其是在数据密集型任务和分布式计算环境中。这不仅优化了资源使用,还提高了处理大数据集的能力。每个分片支持独立的完整性校验,提高了数据完整性的保证,同时也增强了系统的容错性和数据的安全性。

 

使用示例:

 

该功能在Serverless Argo中默认开通,在配置好[3] Artifacts后,提交示例工作流,即可在OSS上获得一个大小为20Gi的文件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 # 生成20Gi的文件
            echo "created files!"
      outputs: # 触发文件上传到OSS
        artifacts:
          - name: out
            path: /out/testfile.txt

 

2、支持OSS Artifacts GC

 

Argo Workflows 的 Artifact 垃圾回收(Garbage Collection, GC)机制主要用于在工作流结束后删除不再需要的工作流产生的文件(如中间结果、日志等),可以帮助节省存储空间及存储成本,防止存储资源的无限制消耗。

 

在开源场景下,无法进行OSS上文件的自动回收,徒增了用户的使用和运维成本。ACK One Serverless Argo工作流优化了OSS上的文件清理方法,通过简单的回收逻辑配置,可以实现:

 

在工作流完成、或管理员手动在集群中清理工作流相关资源一定时间后,自动回收上传至OSS的文件;

 

只为成功的工作流任务配置回收,避免清理失败日志、方便追踪;或只为失败的工作流任务配置回收,回收无效的中间产出。

 

利用OSS提供的生命周期管理策略,可以设置规则根据时间、前缀等参数,自动删除旧的 Artifacts;或将早期的Artifacts归档至冷存储,在保证数据完整的前提下有效降低成本。

 

使用示例:

 

配置artifactGC策略即可使用该功能。如下示例所示,该工作流整体的artifactGC策略为删除后回收,其中on-completion文件的回收策略为完成时回收。提交该工作流后,可以在OSS上观察到,在workflow完成时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

 

3、 支持Artifacts流式传输

 

开源方案在使用Argo Server下载文件时,需要先落盘再传输,这会导致较高的磁盘占用率,高磁盘占用不仅影响服务器性能,还可能导致服务中断或数据丢失。

 

ACKOne Serverless Argo工作流实现了OSS的OpenStream接口,当用户在 Argo Workflows UI 界面点击下载文件时,Argo Server 通过直接将OSS服务端的文件流式传输给用户,而不是将文件完整下载到服务器本地再提供给用户,这种流式传输机制尤其适合需要处理大规模的数据传输和存储的工作流任务:

 

提升下载性能:流式从OSS服务端传输文件,而不需要等待整个文件先下载到 Argo Server,这意味着下载开始的延迟更小,实现更快的响应时间,体验更加顺畅。

 

减少资源占用以增强并发能力:流式处理减轻了 Argo Server 的内存和磁盘需求,从而能在相同硬件资源下处理更多的并行文件传输请求,提高了系统的并发处理能力。随着使用者数量增加或文件大小增长,直接通过流式传输可以更好地扩展服务来处理这种增长,不必担心Argo Server 的磁盘空间限制。

 

提升安全合规性:避免了数据在 Argo Server空间中的临时存储,减小了安全风险和数据泄露的可能性,帮助遵守数据保护和合规性要求。

 

流式传输在最小化Argo Server单点的压力的同时最大化UI文件下载的性能表现。通过流式传输 Artifact 文件,Argo Server 就能有效地成为一个轻量级的数据流转中心,而非存储和计算的重负载中心。

 

总结

 

ACK One Serverless Argo工作流作为全托管的Argo工作流服务,在Artifacts文件管理上相比于开源方案有如下的优势:

 

OSS文件管理能力 开源Argo Workflows ACK One Serverless Argo工作流
文件上传 仅支持<5Gi,超大文件暂不支持 支持超大文件分片上传
文件回收 暂不支持 支持Artifacts GC
文件下载 需要落盘 支持流式传输

 

未来Serverless Argo会将这些增强回馈到社区中,同时也会和社区一同成长,持续吸收并整合社区中的实践与经验,进一步增强Serveless Argo的稳定性,易用性,为用户提供高性能、可扩展的工作流平台。欢迎加入钉钉群号一同交流:35688562。

 

相关链接:

[1] Argo Workflows

https://github.com/argoproj/argo-workflows

 

[2] ACK One Serverless Argo工作流

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/overview-12

 

[3] Artifacts

https://www.alibabacloud.com/help/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/configure-artifacts

 


我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。

欢迎关注 “阿里云基础设施”同名微博知乎

获取关于我们的更多信息~

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
17天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
59 2
|
19天前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
【赵渝强老师】Kubernetes中Pod的基础容器
|
6天前
|
Kubernetes Cloud Native API
深入理解Kubernetes——容器编排的王者之道
深入理解Kubernetes——容器编排的王者之道
23 1
|
13天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
46 1
|
19天前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
|
19天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 &quot;busybox-container&quot; 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
|
19天前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
19天前
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
|
7天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
34 5
|
11天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。