查看原文
其他

ARGO-工作流部署与管理工具

生信阿拉丁 生信阿拉丁 2022-05-16

点击上方关注我们!

01

argo简介


  • 基于Kubernetes,是用于调控容器本地工作流运行的引擎,支持DAG和基于步骤的工作流。

Argo 是 Applatix 推出的一个开源项目,为 Kubernetes 提供 container-native(工作流中的每个步骤是通过容器实现)工作流程,它为Kubernetes提供本地容器运行的工作流,并将工作流中的每个步骤作为容器实现。Argo允许用户使用类似于传统YAML的自定义DSL启动多步骤管道。该框架提供了复杂的循环、条件、与DAG的依赖关系管理等,这有助于提高部署应用程序堆栈的灵活性以及配置和依赖关系的灵活性。使用Argo,用户可以定义依赖关系、以编程方式构建复杂的工作流、用于将任何步骤的输出作为输入链接到后续步骤的工件管理,以及在易于阅读的UI中监视计划的作业。

02

argo组件


01

Argo Workflows


Argo Workflows(https://github.com/argoproj/argo


02

Argo CD


Argo CD(https://github.com/argoproj/argo-cd):持续集成开发工具,与自动化工具和改进的工作流程集成的部署管道,可以最大程度地减少人为错误,并增强整个SDLC的反馈循环,使团队可以在更短的时间内交付较小的发行版;工厂里的装配线以快速、自动化、可重复的方式从原材料生产出消费品。同样,软件交付管道以快速、自动化和可重复的方式从源代码生成发布版本。如何完成这项工作的总体设计称为“持续交付”(CD)。启动装配线的过程称为“持续集成”(CI)。确保质量的过程称为“持续测试”,将最终产品提供给用户的过程称为“持续部署。


03

Argo Events


Argo Events(https://github.com/argoproj/argo-events):事件管理,是用于Kubernetes的基于事件的依赖管理器,它帮助您定义来自各种事件源(如webhook、s3、计划、工作流等)的多个依赖,并在成功解决事件依赖关系后触发Kubernetes对象。


04

Argo Rollouts


Argo Rollouts(https://github.com/argoproj/argo-rollouts):引入了一个称为卷展栏的新自定义资源,用于向Kubernetes提供额外的部署策略,如Blue Green and Canary。卷展栏自定义资源提供了与具有附加部署策略的部署资源对等的功能。(https://argoproj.github.io/argo-rollouts/


03

workflow的实现


内部工作流实现机制


  • 工作流是一个有向无环图(DAG)
    算法工作流也是一个DAG,里面的一个点,就是一个step,目前的工作流,有简单到一个step就可以完成的,也有n多个step组成的。每个step,都会有对应的输入,也会有对应的输出,然后构成一个完整的pipeline。




  • 基于声明式得有向无环图或者步骤工作流,可以支持工作流中各个步骤得依赖关系,目前只支持关系“与”,不支持关系“或”,所以上一步某个任务完成就触发下一步得工作流需要定制开发。

  • 开发工作流



04

任务投递工具优劣比较


优势

  • Argo专为容器而设计,没有传统VM和基于服务器的环境的开销和限制;

  • Argo软件基于Kubernetes,是轻量级的,安装不到一分钟,但提供了完整的工作流功能,包括参数替换、工件、装置、循环和递归工作流;

  • Argo是云不可知的,可以在任何kubernetes集群上运行;

  • 在Kubernetes上轻松地编排高度并行的作业;

  • Argo with Kubernetes让云量级的超级计算机触手可及;

  • 在工作中遇到需要串联 n 个容器任务的情况,选择了 Argo 进行工作流程的控制;

  • 新的Argo软件重量轻,安装不到一分钟,并提供完整的工作流功能,包括参数替换、工件、装置、循环和递归工作流;

  • argo 是一个基于 kubernetes CRD 实现的一个 Workflow(工作流) 工具,基于 kubernetes 的调度能力实现了工作流的控制和任务的运行;

  • 应用模板的概念,使得项目尽可能快的效率开发,并保持项目的可扩展性。

缺点

  • pipeline不支持关系“或”,详情查看扩展链接(https://blog.csdn.net/oqqYuan1234567890/article/details/104271124#j1




AGS - 阿里




  • 工具介绍

AGS 是阿里云基因服务的通用命令行工具, 目前主要集成 argo 功能并且适配阿里云各个产品的 addon功能命令,实现了对argo绝大部分功能的兼容。


  • 参数详解

1ags is the command line interface to Alibaba Cloud Genomics Compute Service
2
3Usage:
4  ags [flags]
5  ags [command]
6
7Available Commands:
8  add         增加node|-|ags add node
9  completion  为指定的shell输出shell完成代码|-|output shell completion code for the specified shell (bash or zsh)
10  config      设置ags客户端必需信息|-|setup ags client necessary info
11  delete      删除工作流及其关联的pod|-|delete a workflow and its associated pods
12  get         显示有关工作流的详细信息|-|display details about a workflow
13  help        弹出帮助文档|-|Help about any command
14  install     安装ags或者其他相关包|-|install ags
15  kubectl     使用kubectl命令|-|kubectl command
16  lint        验证工作流清单的文件或目录|-|validate a file or directory of workflow manifests
17  list        列出工作流|-|list workflows
18  logs        查看工作流日志|-|view logs of a workflow
19  remote      异地阿里云定制流程|-|remote aliyun custom process
20  resubmit    重新提交工作流|-|resubmit a workflow
21  resume      恢复工作流|-|resume a workflow
22  retry       重试工作流|-|retry a workflow
23  submit      提交工作流|-|submit a workflow
24  suspend     挂起工作流|-|suspend a workflow
25  terminate   终止工作流|-|terminate a workflow
26  uninstall   卸载ags|-|uninstall ags
27  version     打印版本信息|-|Print version information
28  wait        等待工作流完成|-|waits for a workflow to complete
29  watch       监视工作流直到它完成|-|watch a workflow until it completes

  • 重要参数介绍

submit

1功能描述:投递一个编订好任务的yaml文件
2
3Flags:
4  file                          描述pipeline的yaml文件
5  -o, --output string           日志输出|--|Output format. One of: name|json|yaml|wide
6  -p, --parameter stringArray   pass an input parameter
7  -f, --parameter-file string   pass a file containing all input parameters
8  -w, --wait                    监控任务直到任务运行结束|--|wait for the workflow to complete
9      --watch                   watch the workflow until it completes

retry

1功能描述:断点重投一个已经failed的workflow
2
3Usage:
4  ags retry WORKFLOW [flags]
5
6Flags:
7  -o, --output string   Output format. One of: name|json|yaml|wide
8  -w, --wait            wait for the workflow to complete
9      --watch           watch the workflow until it completes

delete

1功能描述:删除指定的任务工作流
2
3Flags:
4      --all            删除所有在线工作流|-|Delete all workflows
5      --completed      删除完成运行的工作流|-|Delete completed workflows
6      --older string   删除一定时间前完成运行的工作流|-|Delete completed workflows older than the specified duration (e.g. 10m, 3h, 1d)
7      workflow_id      删除指定workflow_id

get

1功能描述:描述指定的workflow任务每一步运行的状态
2
3Flags:
4    workflow_id         获得指定workflow_id的运行状态与细节
5      --metrics         矩阵显示child_task and pods and CPU and memory 消耗|--|Show workflow metrics usage
6      --no-color        输出字符没有颜色标识|--|Disable colorized output
7  -o, --output string   get到的信息输出格式类型|--|Output format. One of: json|yaml|wide
8      --show            展现出资源消耗的情况|--|Show workflow resource usage
9      --status string   Filter by status (Pending, Running, Succeeded, Skipped, Failed, Error)
10      --sum-info        Show workflow sum info
  • 工具下载

  • 由于大部分的生信软件具有Linux版本,所以以下仅介绍Linux环境下argo的安装

1阿里的AGS工具安装:  
2wget http://ags-hub.oss-cn-hangzhou.aliyuncs.com/ags-linux && chmod +x ags-linux && mv ags-linux  /usr/local/bin/ags  
3
4原生argo工具安装
5curl -sLO https://github.com/argoproj/argo/releases/download/v2.7.0-rc4/argo-linux-amd64
6chmod +x argo-linux-amd64
7mv ./argo-linux-amd64 /usr/local/bin/argo
8
9##安装成功后的校验
10argo version




argo的模板

yaml文件格式定义




template 在 argo 中代表可运行的节点,一共有 6 种分类,分别是 Container,Script,Resource,Suspend,Steps,DAG。

Argo 中的工作流自动化是通过使用 ADSL(Argo 领域特定语言)设计的 YAML 模板(因为 Kubernetes 主要也使用相同的 DSL 方式,所以非常容易使用)进行驱动的。ADSL 中提供的每条指令都被看作一段代码,并与代码仓库中的源码一起托管。Argo 支持6中不同的 YAML 结构

  • Container Type(容器申明)

1简单示例
2- name: whalesay
3    container:
4      image: docker/whalesay:latest
5      command: [sh, -c]
6      args: ["echo -n hello world > /tmp/test.txt"] 
  • Script Type(脚本执行内容申明)

1在 Container 的类型上面添加了一个 Source 字段来表示,且需要加入相应的执行环境
2name: print_number
3script:
4    image: python:alpine3.6
5    command: [python]
6    source: |
7        import random
8        [i*random.randont(1,10) for i in range(20, 31)]
  • Resource Type(资源申明

1- container:
2    args:
3    - sh {{inputs.parameters.shell}} 1>{{inputs.parameters.shell}}.o.${MY_POD_NAME}
4      2>{{inputs.parameters.shell}}.e.${MY_POD_NAME}
5    command:
6    - sh
7    - -c
8    imagePullPolicy: IfNotPresent
9    resources:
10      limits:
11        cpu: 1.5
12        memory: 1.5Gi
13      requests:
14        cpu: 1.0
15        memory: 1Gi
  • Suspend Type(挂起申明

1name: wait-end
2suspend: {}
  • Steps Type(步骤申明

1描述一个当变量等于'tails'是执行函数名tails的段落,为'heads'执行heads的函数段落
2apiVersion: argoproj.io/v1alpha1
3kind: Workflow
4metadata:
5  generateName: coinflip-
6spec:
7  entrypoint: coinflip
8  templates:
9  - name: coinflip
10    steps:
11    - - name: flip-coin
12        template: flip-coin
13    - - name: heads
14        template: heads
15        when: "{{steps.flip-coin.outputs.result}} == heads"
16      - name: tails
17        template: tails
18        when: "{{steps.flip-coin.outputs.result}} == tails"
19
20  - name: flip-coin
21    script:
22      image: python:alpine3.6
23      command: [python]
24      source: |
25        import random
26        result = "heads" if random.randint(0,1) == 0 else "tails"
27        print(result)
28  - name: heads
29    container:
30      image: alpine:3.6
31      command: [sh, -c]
32      args: ["echo \"it was heads\""]
33
34  - name: tails
35    container:
36      image: alpine:3.6
37      command: [sh, -c]
38      args: ["echo \"it was tails\""]
  • DAG type(DAG 类型 workflow

1#描述一个以下DAG依赖关系的workflow及其实现方法
2
3#   A
4#  / \
5# B   C
6#  \ /
7#   D
8apiVersion: argoproj.io/v1alpha1
9kind: Workflow
10metadata:
11  generateName: dag-diamond-
12spec:
13  entrypoint: diamond
14  templates:
15  - name: diamond
16    dag:
17      tasks:
18      - name: A
19        template: echo
20        arguments:
21          parameters: [{name: message, value: A}]
22      - name: B
23        dependencies: [A]#注释,模块B依赖A
24        template: echo
25        arguments:
26          parameters: [{name: message, value: B}]
27      - name: C
28        dependencies: [A]#注释,模块C依赖A
29        template: echo
30        arguments:
31          parameters: [{name: message, value: C}]
32      - name: D
33        dependencies: [B, C]#注释,模块D依赖B和C
34        template: echo
35        arguments:
36          parameters: [{name: message, value: D}]
37
38  - name: echo
39    inputs:
40      parameters:
41      - name: message
42    container:
43      image: alpine:3.7
44      command: [echo, "{{inputs.parameters.message}}"]


  • 基于步骤依赖和基于DAG依赖的区别(https://blog.csdn.net/zzq900503/article/details/83589464

  • 参数传递区别
    steps模式的使用传参方式是
    {{steps.generate-parameter.outputs.parameters.hello-param}}
    DAG templates模式 则使用 tasks 作为前缀与其他步骤关联
    {{tasks.generate-artifact.outputs.artifacts.hello-art}}

  • 任务运行流向区别

    • steps模式是按照步骤,从前往后的工作流调度方案。工作流中的每一步都只依赖上一步的结果

    • DAG templates模式每一步可能依赖之前的多步输出,但是不会循环依赖

相关链接

  • github开源地址

    https://github.com/argopro

  • github官网

    https://argoproj.github.io

  • 下载和安装

    https://argoproj.github.io/docs/argo/docs/getting-started.html

  • 算法工作流-调度服务argo源码入门

    https://blog.csdn.net/oqqYuan1234567890/article/details/104271124

  • AGS-阿里云

    https://help.aliyun.com/document_detail/156348.html?spm=a2c4g.11186623.6.684.3b30688erUTNYV

  • Kubernetes 工作流引擎:Argo

    https://www.qikqiak.com/post/argo-workflow-engine-for-k8s

  • argo模板

    https://github.com/argoproj/argo/blob/master/examples


  • 算法工作流(https://blog.csdn.net/oqqYuan1234567890/article/details/104271124#j1




扫码关注


作者:不二小张

审稿:童蒙

编辑:amethyst



全长转录本的鉴定

 DNA-RNA互作检测技术

 ORF的前世今生

植物泛基因组的染色体重排的量化研究

利用三代测序来研究宏基因组的初认知




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存