Este artigo explica como configurar e utilizar artifacts no ArgoWorkflow para compartilhar arquivos entre etapas de um workflow, focando na integração com S3 para armazenamento persistente.
Configuração do Repositório de Artifacts
Para habilitar o armazenamento de artifacts com S3 no ArgoWorkflow, é necessário definir um repositório de artifacts. Existem três métodos de configuração, com as seguintes prioridades: Configuração no Workflow > Configuração Padrão por Namespace > Configuração Global. Importante: o Secret contendo as credenciais S3 (AKSK) deve existir no mesmo namespace onde o workflow é executado.
Configuração Global
Esta é a configuração mais ampla, aplicável a todos os workflows. Ela é definida no ConfigMap referenciado pelo controlador de workflows. Exemplo de ConfigMap global:
apiVersion: v1
kind: ConfigMap
metadata:
name: controlador-config-global
namespace: argo-sistema
data:
repositorioArtifacts: |
s3:
pontoExtremo: minio.padrao.svc:9000
bucket: artifacts-loja
inseguro: true
chaveAcessoSecreta:
name: segredo-s3-loja
key: chaveAcesso
chaveSecreta:
name: segredo-s3-loja
key: chaveSecreta
Configuração Padrão por Namespace
Cada namespace pode ter sua própria configuração padrão de repositório de artifacts. O ArgoWorkflow procura por um ConfigMap chamado repositorios-artifacts no namespace do workflow. Dentro do ConfigMap, a anotação workflows.argoproj.io/repositorio-artifacts-padrao define qual chave é a padrão.
apiVersion: v1
kind: ConfigMap
metadata:
name: repositorios-artifacts
namespace: namespace-projeto-a
annotations:
workflows.argoproj.io/repositorio-artifacts-padrao: s3-projeto-a
data:
s3-projeto-a: |
s3:
bucket: dados-projeto-a
pontoExtremo: minio.interno.svc:9000
inseguro: true
chaveAcessoSecreta:
name: segredo-s3-projeto-a
key: chaveAcesso
chaveSecreta:
name: segredo-s3-projeto-a
key: chaveSecreta
Configuração Específica no Workflow
Para maior flexibilidade, você pode referenciar um repositório de artifacts diretamente dentro da especificação do workflow.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: workflow-customizado-
spec:
repositorioArtifactsRef:
configMap: repositorios-artifacts
key: s3-projeto-a
# ... restante da definição do workflow
Alternativamente, é possível definir as credenciais S3 inline diretamente nos templates, embora não seja recomendado para manutenção.
Utilizando Artifacts em Workflows
Após configurar o repositório de artifacts, você pode usá-los para transferir dados entre etapas. Um workflow simples demonstra isso: uma etapa gera um arquivo e o armazena como artifact, e a segunda etapa o consome.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: compartilhamento-arquivo-
spec:
entrypoint: processo-principal
templates:
- name: processo-principal
steps:
- - name: gerar-dados
template: gerar-conteudo
- - name: exibir-dados
template: consumir-conteudo
argumentos:
artifacts:
- name: arquivo-dados
from: "{{steps.gerar-dados.outputs.artifacts.arquivo-txt}}"
- name: gerar-conteudo
container:
image: ferramentas/python:3.9
comando: [python, -c]
argumentos: ["with open('/tmp/dados.txt', 'w') as f: f.write('Conteúdo compartilhado')"]
outputs:
artifacts:
- name: arquivo-txt
path: /tmp/dados.txt
- name: consumir-conteudo
inputs:
artifacts:
- name: arquivo-dados
path: /tmp/entrada.txt
container:
image: ferramentas/python:3.9
comando: [python, -c]
argumentos: ["open('/tmp/entrada.txt').read()"]
Neste exemplo, o template gerar-conteudo produz um artifact chamado arquivo-txt, que é então passado para consumir-conteudo usando a sintaxe de referência.
Comportamento de Compressão
Por padrão, artifacts são compactados em formato tar.gz. Você pode controlar isso usando o campo archive no template:
outputs:
artifacts:
- name: documento-raw
path: /tmp/documento.txt
archive:
none: {} # Desativa a compactação
- name: documento-comprimido
path: /tmp/dados-grandes.dat
archive:
tar:
nivelCompressao: 9 # Nível máximo de compressão gzip
Gerenciamento de Ciclo de Vida dos Artifacts
Para evitar o acúmulo de artifacts no armazenamento, o ArgoWorkflow oferece políticas de limpeza automática. Configure no spec do workflow:
spec:
gerenciamentoCicloVidaArtifacts:
estrategia: AoExcluirWorkflow # Exclui artifacts quando o workflow é removido
templates:
- name: tarefa-efemera
outputs:
artifacts:
- name: arquivo-temporario
path: /tmp/log-temp.txt
gerenciamentoCicloVidaArtifacts:
estrategia: Nunca # Sobrescreve a política global para este artifact
As estratégias disponíveis são AoConcluirWorkflow e AoExcluirWorkflow. Para forçar a remoção do finalizer mesmo em caso de falha na limpeza, use forcarRemocaoFinalizador: true.
Extensoes de Artifacts
Além do S3, o ArgoWorkflow suporta nativamente artifacts de repositórios Git e URLs HTTP:
inputs:
artifacts:
- name: codigo-fonte
path: /src
git:
repo: https://github.com/exemplo/projeto.git
revisao: "v2.1"
- name: ferramenta
path: /usr/local/bin/tool
modo: 0755
http:
url: https://releases.exemplo.com/tool-3.0.tar.gz