O ArgoWorkflow trabalha com três conceitos principais:
- Workflow: Instância real de um pipeline em execução, semelhante ao PipelineRun no Tekton
- WorkflowTemplate: Modelo de pipeline que pode ser usado para criar Workflows, análogo ao Pipeline no Tekton
- ClusterWorkflowTemplate: Modelo de pipeline com escopo de cluster, similar à relação entre Role e ClusterRole no Kubernetes
- templates: Unidade mínima de um Workflow ou WorkflowTemplate, representando uma etapa específica do pipeline
A relação entre esses elementos pode ser compreendida da seguinte forma:
- template: Unidade básica que compõe um Template, representando uma etapa específica
- Template: Pipeline completo geralmente composto por múltiplos templates
- Workflow: Instância em execução de um pipeline, geralmente criado a partir de um Template
- Workflow
O Workflow é o recurso mais importante no ArgoWorkflow, responsável por:
- Definir a estrutura do fluxo de trabalho
- Armazenar o estado da execução
Estrutura Básica
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: fluxo-
spec:
entrypoint: principal
templates:
- name: principal
steps:
- - name: passo-inicial
template: saudacao
arguments:
parameters: [{name: mensagem, value: "olá mundo"}]
- name: saudacao
inputs:
parameters:
- name: mensagem
container:
image: docker/whalesay
command: [cowsay]
args: ["{{inputs.parameters.mensagem}}"]
Componentes Principais
- entrypoint: Ponto de entrada do fluxo, similar ao método main em programas
- templates: Lista de templates que compõem o pipeline
Tipos de Templates
O ArgoWorkflow suporta seis tipos de templates:
Container
- name: executar-tarefa
container:
image: nginx:latest
command: [nginx, -g, "daemon off;"]
ports:
- containerPort: 80
Script
- name: gerar-numero
script:
image: python:3.8
command: [python]
source: |
import random
numero = random.randint(1, 1000)
print(f"Número gerado: {numero}")
Resource
- name: criar-recursos
resource:
action: create
manifest: |
apiVersion: v1
kind: ConfigMap
metadata:
generateName: config-
data:
chave: valor
Suspend
- name: pausar-execucao
suspend:
duration: "30s"
Steps
- name: etapas-paralelas
steps:
- - name: passo1
template: prepara-dados
- - name: passo2a
template: processa-primeira-parte
- name: passo2b
template: processa-segunda-parte
DAG (Directed Acyclic Graph)
- name: fluxo-dependencias
dag:
tasks:
- name: tarefaA
template: processa-inicial
- name: tarefaB
dependencies: [tarefaA]
template: processa-intermediario
- name: tarefaC
dependencies: [tarefaA]
template: processa-alternativo
- name: tarefaD
dependencies: [tarefaB, tarefaC]
template: processa-final
Classificação de Templates
Os templates podem ser diivdidos em duas categorias:
- Template Definitions: Definem o conteúdo de cada etapa (container, script, resource, suspend)
- Template Invocators: Combinam outros templates controlando a ordem de execução (steps, dag)
Parâmetros
Os parâmetros no Workflow podem ser:
- Parâmetros formais: Definidos através do campo
inputsem templates - Parâmetros reais: Definidos através do campo
argumentsem templates invocadores
Exemplo com Parâmetros
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: exemplo-parametros-
spec:
entrypoint: principal
arguments:
parameters:
- name: mensagem-global
value: "mensagem padrão"
templates:
- name: principal
steps:
- - name: passo1
template: processa-mensagem
arguments:
parameters:
- name: texto
value: "{{workflow.parameters.mensagem-global}}"
- name: processa-mensagem
inputs:
parameters:
- name: texto
value: "valor padrão"
container:
image: alpine
command: [/bin/sh, -c]
args: ["echo {{inputs.parameters.texto}}"]
- WorkflowTemplate
O WorkflowTemplate é uma definição de Workflow que reside no cluster, permitindo:
- Reutilização de templates entre diferentes Workflows
- Manutenção centralizada das definições
- Separação entre lógica de negócio e configuração
Exemplo de WorkflowTemplate
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: modelo-processamento
namespace: default
spec:
workflowMetadata:
labels:
app: processamento-dados
entrypoint: fluxo-principal
arguments:
parameters:
- name: entrada
value: "padrao"
templates:
- name: fluxo-principal
steps:
- - name: iniciar
template: prepara-ambiente
- - name: processar
template: executa-processamento
arguments:
parameters:
- name: arquivo
value: "{{workflow.parameters.entrada}}"
- name: prepara-ambiente
container:
image: busybox
command: [sh, -c]
args: ["echo 'Preparando ambiente...'"]
- name: executa-processamento
inputs:
parameters:
- name: arquivo
container:
image: python:3.9
command: [python, -c]
args: ["print(f'Processando: {{inputs.parameters.arquivo}}')"]
- Referenciando Templates
workflowTemplateRef
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: usando-modelo-
spec:
arguments:
parameters:
- name: entrada
value: "dados-especificos"
workflowTemplateRef:
name: modelo-processamento
clusterWorkflowTemplateRef
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: usando-modelo-cluster-
spec:
arguments:
parameters:
- name: configuracao
value: "producao"
workflowTemplateRef:
name: modelo-global
clusterScope: true
templateRef
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: usando-template-
spec:
entrypoint: fluxo-completo
templates:
- name: fluxo-completo
steps:
- - name: etapa1
template: pre-processamento
- - name: etapa2
templateRef:
name: modelo-utilities
template: limpeza-dados
arguments:
parameters:
- name: nivel
value: "alto"
- name: pre-processamento
container:
image: busybox
command: [sh, -c]
args: ["echo 'Pre-processando dados...'"]
- Práticas Recomendadas
- WorkflowTemplates como modelos completos: Defina todos os templates e entrypoints no WorkflowTemplate, e use workflowTemplateRef no Workflow
- WorkflowTemplates como biblioteca de templates: Defina templates comuns reutilizáveis e use templateRef nos Workflows quando necessário
- Escolha entre Steps e DAG:
- Use Steps quando a sequência de execução é clara e linear
- Use DAG quando há dependências complexas entre as tarefas
- Gerenciamento de parâmetros:
- Defina valores padrão nos templates
- Use parâmetros globais quando necessário em múltiplos templates
- Priorize: Workflow arguments > WorkflowTemplate arguments > Template inputs