美文网首页
【Argo Workflow】四、Templates中的两个重要

【Argo Workflow】四、Templates中的两个重要

作者: 别点了填写不了昵称 | 来源:发表于2022-07-26 00:41 被阅读0次

    1. Step

    Step 是Template对象中的一个字段,steps字段是一个由WorkflowStep构成的二维数组。

    WorkflowStep对象中包含的比较重要的字段:

    • arguments 当前步骤的一些输入参数。
    • name 当前步骤的名称。
    • template 当前步骤执行的节点模板名称(也就是yaml文件下方声明的template)。
    • when 当前节点是否执行的判断表达式。
      ···

    -- 表示当前节点的前一个节点执行完毕之后才会执行当前节点。
    - 表示当前节点和上一个节点并行执行。

    实际上我们看到,我们每个step最低的声明要求就是有name和template两个字段就可以了。

    下面是官方给出的案例,我这里已经将apiGroup和kind去除了。

    metadata:
      generateName: steps-
    spec:
      entrypoint: hello-hello-hello
    
      # This spec contains two templates: hello-hello-hello and whalesay
      templates:
      - name: hello-hello-hello
        # Instead of just running a container
        # This template has a sequence of steps
        steps:
        - - name: hello1            # hello1 is run before the following steps
            template: whalesay
            arguments:
              parameters:
              - name: message
                value: "hello1"
        - - name: hello2a           # double dash => run after previous step
            template: whalesay
            arguments:
              parameters:
              - name: message
                value: "hello2a"
          - name: hello2b           # single dash => run in parallel with previous step
            template: whalesay
            arguments:
              parameters:
              - name: message
                value: "hello2b"
    
      # This is the same template as from the previous example
      - name: whalesay
        inputs:
          parameters:
          - name: message
        container:
          image: docker/whalesay
          command: [cowsay]
          args: ["{{inputs.parameters.message}}"]
    

    执行完毕之后可以看到如图所示:


    image.png

    2. DAG

    DAG是有向无环图的英文缩写,DAG和Step模式的最大的区别可以理解为,Step只支持并发,但是不支持同步阻塞。但是DAG使用了dependencies这个字段很好的弥补了这个缺陷。

    dag也是Template的字段,他是一个DAGTemplate对象,DAGTemplate其中一些比较重要的字段说明如下:

    • failFast 快速失败,默认为true,意味着如果有节点发生失败整个workflow会直接失败,如果设置为false,workflow将会运行所有的分支之后失败或者成功。
    • tasks DAGTask 对象数组,DAGTask和WorkflowStep类似,但前者增加了dependencies数组字段,用于判断当前节点是否可以执行。

    下面是官方给出的案例:

    metadata:
      generateName: dag-diamond-
    spec:
      entrypoint: diamond
      templates:
      - name: echo
        inputs:
          parameters:
          - name: message
        container:
          image: alpine:3.7
          command: [echo, "{{inputs.parameters.message}}"]
      - name: diamond
        dag:
          tasks:
          - name: A
            template: echo
            arguments:
              parameters: [{name: message, value: A}]
          - name: B
            dependencies: [A]
            template: echo
            arguments:
              parameters: [{name: message, value: B}]
          - name: C
            dependencies: [A]
            template: echo
            arguments:
              parameters: [{name: message, value: C}]
          - name: D
            dependencies: [B, C]
            template: echo
            arguments:
              parameters: [{name: message, value: D}]
    

    这里的参数声明方式是使用的另外一种方式,具体可以参考Jinja库的模板语法。

    dependencies 声明了运行当前节点所需要完成的节点列表数组,其中每个元素是依赖节点的名称。

    执行完毕后的结果图如下:


    image.png

    相关文章

      网友评论

          本文标题:【Argo Workflow】四、Templates中的两个重要

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