美文网首页
【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