跳至内容

核心概念

本页作为Argo核心概念的介绍。

Workflow

Workflow 是 Argo 中最重要的资源,具有两个重要功能:

  1. 它定义了要执行的工作流。
  2. 它存储工作流的状态。

由于这些双重职责,Workflow应被视为一个"活动"对象。它不仅仅是一个静态定义,同时也是该定义的"实例"。(如果不清楚这意味着什么,将在下面解释)。

工作流规范

要执行的工作流定义在Workflow.spec字段中。工作流规范的核心结构是一个templates列表和一个entrypoint

templates 可以大致理解为"函数":它们定义了要执行的指令。 entrypoint 字段定义了"主"函数是什么 - 也就是最先执行的模板。

以下是一个包含单个template的简单Workflow规范示例:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-  # Name of this Workflow
spec:
  entrypoint: hello-world     # Defines "hello-world" as the "main" template
  templates:
  - name: hello-world         # Defines the "hello-world" template
    container:
      image: busybox
      command: [echo]
      args: ["hello world"]   # This template runs "echo" in the "busybox" image with arguments "hello world"

template 类型

共有6种模板类型,分为两大类。

模板定义

这些模板定义了要完成的工作,通常是在容器中。

Container

或许是最常见的模板类型,它将调度一个容器。该模板的规范与Kubernetes容器规范相同,因此您可以像在Kubernetes其他任何地方一样在此定义容器。

示例:

  - name: hello-world
    container:
      image: busybox
      command: [echo]
      args: ["hello world"]
Script

这是一个对container的便捷封装。其规范与容器相同,但增加了source:字段,允许您直接内联定义脚本。 该脚本将被保存到文件中并自动执行。脚本的执行结果会自动导出为Argo变量,格式为{{tasks..outputs.result}}{{steps..outputs.result}},具体取决于调用方式。

示例:

  - name: gen-random-int
    script:
      image: python:alpine3.6
      command: [python]
      source: |
        import random
        i = random.randint(1, 100)
        print(i)
Resource

直接对集群资源执行操作。可用于获取、创建、应用、删除、替换或修补集群上的资源。

此示例在集群上创建一个ConfigMap资源:

  - name: k8s-owner-reference
    resource:
      action: create
      manifest: |
        apiVersion: v1
        kind: ConfigMap
        metadata:
          generateName: owned-eg-
        data:
          some: value
Suspend

暂停模板会暂停执行,可以设置暂停时长或手动恢复。暂停模板可以通过CLI(使用argo resume命令)、API端点或用户界面来恢复。

示例:

  - name: delay
    suspend:
      duration: "20s"

模板调用器

这些模板用于调用/执行其他模板并提供执行控制。

步骤

步骤模板允许您在一系列步骤中定义任务。该模板的结构是一个"列表的列表"。外部列表将按顺序运行,内部列表将并行运行。如果您想逐个运行内部列表,请使用Synchronization功能。您可以设置多种选项来控制执行,例如when:条件子句来有条件地执行步骤

在这个示例中,step1首先运行。一旦它完成,step2astep2b将并行运行:

  - name: hello-hello-hello
    steps:
    - - name: step1
        template: prepare-data
    - - name: step2a
        template: run-data-first-half
      - name: step2b
        template: run-data-second-half
DAG

DAG模板允许您将任务定义为依赖关系图。在DAG中,您可以列出所有任务,并设置特定任务开始前必须完成的其他任务。没有任何依赖关系的任务将立即运行。

在这个示例中,A首先运行。一旦它完成,BC将并行运行,当它们都完成后,D将运行:

  - name: diamond
    dag:
      tasks:
      - name: A
        template: echo
      - name: B
        dependencies: [A]
        template: echo
      - name: C
        dependencies: [A]
        template: echo
      - name: D
        dependencies: [B, C]
        template: echo

架构

如果您对Argo的底层架构感兴趣,请参阅Architecture


有问题吗?

Search on GitHub Discussions and Slack.