美文网首页
ARGO-工作流部署与管理工具

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

作者: 生信阿拉丁 | 来源:发表于2020-05-23 10:00 被阅读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的实现

    内部工作流实现机制

    • 工作流是一个有向无环图(DAG)
      算法工作流也是一个DAG,里面的一个点,就是一个step,目前的工作流,有简单到一个step就可以完成的,也有n多个step组成的。每个step,都会有对应的输入,也会有对应的输出,然后构成一个完整的pipeline。
    • 基于声明式得有向无环图或者步骤工作流,可以支持工作流中各个步骤得依赖关系,目前只支持关系“与”,不支持关系“或”,所以上一步某个任务完成就触发下一步得工作流需要定制开发。

    • 开发工作流

    4 任务投递工具优劣比较

    4.1 优势

    • Argo专为容器而设计,没有传统VM和基于服务器的环境的开销和限制;
    • Argo软件基于Kubernetes,是轻量级的,安装不到一分钟,但提供了完整的工作流功能,包括参数替换、工件、装置、循环和递归工作流;
    • Argo是云不可知的,可以在任何kubernetes集群上运行;
    • 在Kubernetes上轻松地编排高度并行的作业;
    • Argo with Kubernetes让云量级的超级计算机触手可及;
    • 在工作中遇到需要串联 n 个容器任务的情况,选择了 Argo 进行工作流程的控制;
    • 新的Argo软件重量轻,安装不到一分钟,并提供完整的工作流功能,包括参数替换、工件、装置、循环和递归工作流;
    • argo 是一个基于 kubernetes CRD 实现的一个 Workflow(工作流) 工具,基于 kubernetes 的调度能力实现了工作流的控制和任务的运行;
    • 应用模板的概念,使得项目尽可能快的效率开发,并保持项目的可扩展性。

    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模式每一步可能依赖之前的多步输出,但是不会循环依赖。

    相关链接

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

    相关文章

      网友评论

          本文标题:ARGO-工作流部署与管理工具

          本文链接:https://www.haomeiwen.com/subject/rrkkahtx.html