云原生批量任务编排引擎Argo Workflows发布3.6,一文解析关键新特性

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
全局流量管理 GTM,标准版 1个月
简介: Argo Workflows是CNCF毕业项目,最受欢迎的云原生工作流引擎,专为Kubernetes上编排批量任务而设计,本文主要对最新发布的Argo Workflows 3.6版本的关键新特性做一个深入的解析。

【阅读原文】戳:云原生批量任务编排引擎Argo Workflows发布3.6,一文解析关键新特性

Argo Workflows是CNCF毕业项目,专为Kubernetes上编排并行Job而设计,本文主要对最新发布的Argo Workflows 3.6版本的关键新特性做一个深入的解析。

 

 

 

 

一、Argo Workflows 简介

 

 

 

Argo Workflows是CNCF毕业项目,专为Kubernetes上编排并行Job而设计,将工作流中的每一个任务实现为一个单独的容器实例单独运行,具有轻量级、易扩展、并行性高等特点。

 

Argo Workflows主要被应用在以下的场景:

 

批处理系统:对于需要定期或按需执行的大规模数据处理任务,如ETL作业、数据分析报告生成等,Argo Workflows 提供了一种声明式的方式来定义和执行这些批处理作业。

 

机器学习工作流:在机器学习项目中,Argo Workflows 可以协调数据预处理、模型训练、验证、调参和部署等步骤,同时利用 Kubernetes 的资源调度能力,高效地分配GPU等资源,支持大规模并行计算需求。

 

基础设施自动化:在管理云原生基础设施时,可用于执行一系列自动化任务,比如创建和配置Kubernetes资源、执行备份恢复操作、监控系统的健康状态等。

 

CI/CD:持续集成和持续部署流程通常包含代码构建、测试、部署等多个阶段。Argo Workflows 能够很好地整合这些步骤,实现自动化流水线,提高软件交付的速度和质量。

 

Argo Workflows Use Cases

 

阿里云容器服务是国内早期使用Argo Workflow 的团队之一。在落地生产过程中,解决了大量性能瓶颈,并且开发了较多功能回馈给社区。在v3.6版本中贡献了多项特性,尤其是在核心控制器的易用性和稳定性上,贡献了超大参数自动Offload、模板调度约束、超大扁平工作流并行解析、OSS文件流式传输、OSS Artifacts垃圾回收、Pod并行清理Retry、动态模板引用等众多特性,提升了工作流引擎的稳定性、易用性和性能。

 

本文将会对Argo Workflows 3.6版本的关键新特性做一个深入的解析。

 

 

 

 

二、新特性解析

 

 

 

1)CronWorkflows:调度策略增强

 

CronWorkflows是Argo Workflows最常用的功能之一,您可以使用该功能在自定义时间节点触发任务调度,在v3.6中,有以下几个增强:

 

多个cron scheduler调度:可以在单个CronWorkflow中集成多个定时调度策略来进行工作流调度。

 

增加停止策略:可以设定策略在特定情况下停止调度,可以避免定时工作流持续失败,导致集群中失败工作流积压。

 

When表达式:在每次调度之前检查表达式是否为true,提供了和cron scheduler更灵活的组合机制。

 

该增强方便了用户对调度策略进行组合,实现各种不同的定时调度策略。

 

使用示例:

 

apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
  name: cron-workflow-example
spec:
  schedules: # 多个调度策略,每3分钟和5分钟执行一次,在第15分钟只执行一次。
  - "*/3 * * * *"
  - "*/5 * * * *"
  concurrencyPolicy: "Allow"
  stopStrategy: # 在Faild的工作流超过10个之后停止该Cron Workflow
    condition: "failed >= 10"
  # 通过表达式限制在两次执行间隔超过3600s
  when: "{{= cronworkflow.lastScheduledTime == nil || (now() - cronworkflow.lastScheduledTime).Seconds() > 3600 }}"
  startingDeadlineSeconds: 0
  workflowSpec:
    entrypoint: whalesay
    templates:
    - name: whalesay
      container:
        image: alpine:3.6
        command: [sh, -c]
        args: ["date; sleep 1"]

 

2)用户界面优化

 

Argo UI是工作流重要的组成部分,用户提交工作流之后,可以通过该界面便捷的观测到工作流的运行状况。在3.6中,增加了工作流详细信息、时间显示、输出Artifacts目录、Markdown语法等,于此同时还可以访问Cron Workflow、Workflow Template的执行历史、实时日志等。

 

The UI shows the directory used for input artifacts

 

这些增强完善了用户界面的可用性、可观测性,方便用户能够更好的观测自己的工作流状况。

 

3)Argo Workflows 控制器:大规模、稳定性、安全性、功能增强

 

控制器是Argo Workflows最核心的组件,其稳定性和高性能至关重要。在v3.6中主要有以下的一些增强:

 

大规模、稳定性、安全性增强:

 

归档工作流使用队列,改善了同时归档大量工作流时的内存管理。

 

并行清理Pod,在Retry超大工作流时非常有用,可以在容忍时间内完成Retry。

 

Pod增加Pod Kubernetes finalizer,避免过早删除导致出现"Pod Delete" Error,便于控制器Reconceil。

 

超大扁平工作流并行解析,可以让大型工作流的解析更快。

 

超大参数自动Offload,可以支持更长的启动参数,这对于大型的科学模拟场景很有帮助。

 

自动设置seccomp profile为RuntimeDefault,提高容器安全性,降低被攻击的风险。

 

这些功能会在控制器启动时默认开启,除此之外,还有一些功能上的增强:

 

a. OSS Artifacts 自动回收

 

可以通过配置artifactGC策略使得工作流在完成或者删除的时候回收工作流在阿里云OSS上中间文件结果,从而节省存储成本。使用示例如下:

 

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: artifact-gc-
spec:
  entrypoint: main
  artifactGC:
    strategy: OnWorkflowDeletion # the overall strategy, which can be overridden
    podMetadata:
      annotations:
         kubernetes.io/resource-type: eci
  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:
        artifacts:
          - name: on-completion # 该Artifact会在工作流完成时回收
            path: /tmp/on-completion.txt
            oss:
              endpoint: http://oss-cn-zhangjiakou-internal.aliyuncs.com
              bucket: my-argo-workflow
              key: on-completion.txt
              accessKeySecret:
                name: my-argo-workflow-credentials
                key: accessKey
              secretKeySecret:
                name: my-argo-workflow-credentials
                key: secretKey
            artifactGC:
              strategy: OnWorkflowCompletion # overriding the default strategy for this artifact
          - name: on-deletion # 该Artifact会在工作流被删除时回收
            path: /tmp/on-deletion.txt
            oss:
              endpoint: http://oss-cn-zhangjiakou-internal.aliyuncs.com
              bucket: my-argo-workflow
              key: on-deletion.txt
              accessKeySecret:
                name: my-argo-workflow-credentials
                key: accessKey
              secretKeySecret:
                name: my-argo-workflow-credentials
                key: secretKey

 

b. 模板支持调度约束

 

可以在定义模板时增加NodeSelectors和Tolerations,使用示例如下:

 

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: benchmarks
spec:
  entrypoint: main
  serviceAccountName: workflow
  templates:
  - dag:
      tasks:
      - arguments:
          parameters:
          - name: msg
            value: 'hello'
        name: benchmark
        template: benchmark
    name: main
    nodeSelector: # 模版上定义节点选择器,该选择器会传递到Pod上
      pool: workflows
    tolerations:  # 模版上定义容忍,该容忍会传递到Pod上
    - key: pool
      operator: Equal
      value: workflows
  - inputs:
      parameters:
      - name: msg
    name: benchmark
    script:
      command:
      - python
      image: python:latest
      source: |
        print("{{inputs.parameters.msg}}")

 

c. 支持动态模板引用

 

在定义模板引用时,可以直接使用参数,从而极大的优化Yaml编排文件的结构和大小。使用示例如下:

 

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-wf-global-arg-
  namespace: default
spec:
  entrypoint: whalesay
  arguments:
    parameters:
      - name: global-parameter
        value: hello
  templates:
    - name: whalesay
      steps:
        - - name: hello-world
            templateRef: #  Step 中动态模板引用
              name: '{{item.workflow-template}}' # 从循环中读取需要调用的模板工作流
              template: '{{item.template-name}}' # 从循环中读取template名称
            withItems: # 定义循环参数
                - { workflow-template: 'hello-world-template-global-arg', template-name: 'hello-world'}
          - name: hello-world-dag
            template: diamond
    - name: diamond
      dag:
        tasks:
        - name: A
          templateRef: # DAG 中动态模板引用
            name: '{{item.workflow-template}}' # 从循环中读取需要调用的模板工作流
            template: '{{item.template-name}}' # 从循环中读取template名称
          withItems:
              - { workflow-template: 'hello-world-template-global-arg', template-name: 'hello-world'}

 

d. 更新expr库,支持多种函数。

 

可以使用更多的表达式函数,比如列表拼接和字符串合并。使用示例如下:

 

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: test-expression-
  namespace: argo
spec:
  entrypoint: main
  arguments:
    parameters:
      - name: expr 
        value: "{{= concat(['a', 'b'], ['c', 'd']) | join('\\n') }}" # 使用列表拼接和字符串合并函数
  templates:
    - name: main
      inputs:
        parameters:
          - name: expr
      script:
        image: alpine:3.6
        command: ["sh"]
        source: |
          echo result: '{{ inputs.parameters.expr }}'

 

4)Argo CLI:模板易用性

 

Argo CLI是提交工作流最常用的方式,而模板是我们定义标准流程的方法,方便我们定义各种各样不同的模板,在v3.6对模板的易用性做了以下的一些增强:

 

通过Argo CLI可以直接更新工作流模板,这让我们在模板在更新时更加容易,避免使用Kubectl方法,下边是使用方法:

 

argo cron update FILE1 # 更新定时工作流
argo template update FILE1  # 更新 workflow-template
argo cluster-template update FILE1 # 更新 cluster-workflow-template

 

通过label过滤模板,有助于对模板进行分类管理:

 

argo template list -l app=test # 通过label进行过滤

 

 

 

 

 

三、快速使用Argo Workflows

 

 

 

Argo Workflows作为一款云原生的批量任务编排引擎,是在Kubernetes上编排各类型任务、提高业务自动化水平的必备利器,无论您是企业的架构师、数据科学家、还是Devops工程师,都能使用Argo Workflows提高您的工作效率。

 

阿里云容器服务也提供了全托管的Serverless Argo Workflows:

 

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

 

 

具有以下几个特点:

 

简单易用:托管核心组件,完全免运维,提供RestAPI和 Python SDK, 集成简单。

 

稳定高性能:控制面优化,支持大规模工作流编排,整体规模可达到4w。

 

产品化支持:众多领域最佳实践,构建高效工作流,用户只需关注业务创新。

 

可以帮助您快速体验提交工作流,欢迎加入钉钉交流群35688562一同交流。

 

 

参考文档:

 

[1]《Argo Workflows 3.6 发布候选者版本》

 

[2] Argo Workflows:

 

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

 

[3] Serverless Argo Workflows:

 

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

 

[4] 最佳实践:

 

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



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

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

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

相关文章
|
6天前
|
弹性计算 双11 开发者
阿里云ECS“99套餐”再升级!双11一站式满足全年算力需求
11月1日,阿里云弹性计算ECS双11活动全面开启,在延续火爆的云服务器“99套餐”外,CPU、GPU及容器等算力产品均迎来了全年最低价。同时,阿里云全新推出简捷版控制台ECS Lite及专属宝塔面板,大幅降低企业和开发者使用ECS云服务器门槛。
|
23天前
|
存储 弹性计算 人工智能
阿里云弹性计算_通用计算专场精华概览 | 2024云栖大会回顾
阿里云弹性计算产品线、存储产品线产品负责人Alex Chen(陈起鲲)及团队内多位专家,和中国电子技术标准化研究院云计算标准负责人陈行、北京望石智慧科技有限公司首席架构师王晓满两位嘉宾,一同带来了题为《通用计算新品发布与行业实践》的专场Session。本次专场内容包括阿里云弹性计算全新发布的产品家族、阿里云第 9 代 ECS 企业级实例、CIPU 2.0技术解读、E-HPC+超算融合、倚天云原生算力解析等内容,并发布了国内首个云超算国家标准。
阿里云弹性计算_通用计算专场精华概览 | 2024云栖大会回顾
|
5天前
|
人工智能 弹性计算 文字识别
基于阿里云文档智能和RAG快速构建企业"第二大脑"
在数字化转型的背景下,企业面临海量文档管理的挑战。传统的文档管理方式效率低下,难以满足业务需求。阿里云推出的文档智能(Document Mind)与检索增强生成(RAG)技术,通过自动化解析和智能检索,极大地提升了文档管理的效率和信息利用的价值。本文介绍了如何利用阿里云的解决方案,快速构建企业专属的“第二大脑”,助力企业在竞争中占据优势。
|
4天前
|
人工智能 自然语言处理 安全
创新不设限,灵码赋新能:通义灵码新功能深度评测
自从2023年通义灵码发布以来,这款基于阿里云通义大模型的AI编码助手迅速成为开发者心中的“明星产品”。它不仅为个人开发者提供强大支持,还帮助企业团队提升研发效率,推动软件开发行业的创新发展。本文将深入探讨通义灵码最新版本的三大新功能:@workspace、@terminal 和 #team docs,分享这些功能如何在实际工作中提高效率的具体案例。
|
7天前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
3911 2
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
10天前
|
负载均衡 算法 网络安全
阿里云WoSign SSL证书申请指南_沃通SSL技术文档
阿里云平台WoSign品牌SSL证书是由阿里云合作伙伴沃通CA提供,上线阿里云平台以来,成为阿里云平台热销的国产品牌证书产品,用户在阿里云平台https://www.aliyun.com/product/cas 可直接下单购买WoSign SSL证书,快捷部署到阿里云产品中。
2177 6
阿里云WoSign SSL证书申请指南_沃通SSL技术文档
|
3天前
|
安全 数据建模 网络安全
2024阿里云双11,WoSign SSL证书优惠券使用攻略
2024阿里云“11.11金秋云创季”活动主会场,阿里云用户通过完成个人或企业实名认证,可以领取不同额度的满减优惠券,叠加折扣优惠。用户购买WoSign SSL证书,如何叠加才能更加优惠呢?
831 1
|
22天前
|
编解码 Java 程序员
写代码还有专业的编程显示器?
写代码已经十个年头了, 一直都是习惯直接用一台Mac电脑写代码 偶尔接一个显示器, 但是可能因为公司配的显示器不怎么样, 还要接转接头 搞得桌面杂乱无章,分辨率也低,感觉屏幕还是Mac自带的看着舒服
|
1天前
|
存储 分布式计算 流计算
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
本文介绍了阿里云开源大数据团队在实时计算领域的最新成果——向量化流计算引擎Flash。文章主要内容包括:Apache Flink 成为业界流计算标准、Flash 核心技术解读、性能测试数据以及在阿里巴巴集团的落地效果。Flash 是一款完全兼容 Apache Flink 的新一代流计算引擎,通过向量化技术和 C++ 实现,大幅提升了性能和成本效益。
392 7
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
|
29天前
|
存储 人工智能 缓存
AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片
本案例介绍如何利用AI助理快速实现OSS存储的图片接入CDN,以加速图片访问。通过AI助理提炼关键操作步骤,避免在复杂文档中寻找解决方案。主要步骤包括开通CDN、添加加速域名、配置CNAME等。实测显示,接入CDN后图片加载时间显著缩短,验证了加速效果。此方法大幅提高了操作效率,降低了学习成本。
5408 15