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

2020-05-23  本文已影响0人  生信阿拉丁

作者:不二小张
审稿:童蒙
编辑:amethyst

1 argo简介

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

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

2 argo组件

2.1 Argo Workflows

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

2.2 Argo CD

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

2.3 Argo Events

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

2.4 Argo Rollouts

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

3 workflow的实现

内部工作流实现机制

4 任务投递工具优劣比较

4.1 优势

4.2 缺点

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

5 AGS - 阿里

工具介绍

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

参数详解

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

重要参数介绍

submit

功能描述:投递一个编订好任务的yaml文件

Flags:
  file                          描述pipeline的yaml文件
  -o, --output string           日志输出|--|Output format. One of: name|json|yaml|wide
  -p, --parameter stringArray   pass an input parameter
  -f, --parameter-file string   pass a file containing all input parameters
  -w, --wait                    监控任务直到任务运行结束|--|wait for the workflow to complete
      --watch                   watch the workflow until it completes

retry

功能描述:断点重投一个已经failed的workflow

Usage:
  ags retry WORKFLOW [flags]

Flags:
  -o, --output string   Output format. One of: name|json|yaml|wide
  -w, --wait            wait for the workflow to complete
      --watch           watch the workflow until it completes

delete

功能描述:删除指定的任务工作流

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

get

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

工具下载

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

 阿里的AGS工具安装:  
 wget http://ags-hub.oss-cn-hangzhou.aliyuncs.com/ags-linux && chmod +x ags-linux && mv ags-linux  /usr/local/bin/ags  
 
 原生argo工具安装
 curl -sLO https://github.com/argoproj/argo/releases/download/v2.7.0-rc4/argo-linux-amd64
 chmod +x argo-linux-amd64
 mv ./argo-linux-amd64 /usr/local/bin/argo
 
 ##安装成功后的校验
argo 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模式每一步可能依赖之前的多步输出,但是不会循环依赖。

相关链接

该文来源于“生信阿拉丁”,第一时间查收“新款”生信学习干货。

上一篇下一篇

猜你喜欢

热点阅读