En el mundo real, los proyectos de datos rara vez se componen de una única ejecución lineal de código. En cambio, suelen implicar múltiples pasos interdependientes: descarga de datos, preprocesamiento, validaciones, entrenamiento de modelos, pruebas, despliegues, generación de informes… Todo esto en diferentes entornos, con distintas configuraciones, y muchas veces ejecutado de forma periódica o en respuesta a eventos.

Cuando los flujos se vuelven complejos, es tentador orquestarlos con scripts de shell, cron jobs, o incluso combinaciones esotéricas de herramientas caseras. Pero pronto empiezan los problemas: errores silenciosos, logs dispersos, tareas que fallan a la mitad sin dejar rastro, y una infraestructura que parece más una trampa explosiva que una base fiable de producción.

Ahí es donde entran los orquestadores de flujos de trabajo. Y si estás trabajando en un entorno Kubernetes —o planeas hacerlo—, Argo Workflows es una de las opciones más robustas, flexibles y escalables que puedes implementar.

¿Qué es Argo Workflows?

Argo Workflows es un motor de ejecución de flujos de trabajo basado en Kubernetes. Lo que lo hace especial no es solo que corre sobre Kubernetes, sino que está construido para Kubernetes. Cada paso de un flujo es un pod, cada variable un resource, cada entrada y salida un artifact. Argo no intenta esconder la complejidad de la infraestructura: la abraza, la modela, y te da el control completo.

Los flujos se describen en YAML, usando la metáfora del DAG (Directed Acyclic Graph), una estructura que permite modelar la lógica de ejecución con claridad: cada nodo representa una tarea, y las aristas indican dependencias. A diferencia de otras herramientas más orientadas al código, en Argo no se decoran funciones ni se programan pasos como llamadas a funciones: se declaran.

¿Por qué usar Argo?

Aquí algunas razones clave por las que Argo destaca:

  • Escalabilidad real: cada paso del flujo es un pod, lo que te permite escalar cada parte del pipeline de forma independiente. ¿Necesitas entrenar diez modelos a la vez? Puedes lanzar diez pods sin tocar una línea de lógica adicional.
  • Declarativo y reproducible: tu flujo es un recurso más dentro de Kubernetes, versionable con Git, desplegable con Helm, y controlable con las mismas herramientas que ya usas en tu infraestructura.
  • Fuerte aislamiento: cada tarea vive en su propio contenedor. Esto implica que puedes tener distintos entornos, librerías y configuraciones en cada paso, sin preocuparte por conflictos entre ellos.
  • Observabilidad incorporada: Argo viene con una UI que te muestra en tiempo real qué tareas se están ejecutando, qué falló, y cuánto tiempo tomó cada parte. También puedes integrar con Prometheus, Grafana, y sistemas de alertas externos.
  • Tolerancia a fallos y reintentos: puedes definir cuántas veces reintentar una tarea, con qué políticas de backoff, y qué hacer si falla de forma irrecuperable.

¿Cómo se ve un workflow en Argo?

A continuación, un ejemplo sencillo de flujo que ejecuta tres tareas secuenciales: preprocesamiento, entrenamiento y evaluación. Cada paso es un contenedor diferente.

yamlCopiarEditarapiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: ejemplo-ml-pipeline-
spec:
  entrypoint: flujo-ml
  templates:
  - name: flujo-ml
    dag:
      tasks:
      - name: preprocess
        template: preprocess-data
      - name: train
        dependencies: [preprocess]
        template: train-model
      - name: evaluate
        dependencies: [train]
        template: evaluate-model

  - name: preprocess-data
    container:
      image: mi-registro/preprocess:latest
      command: ["python"]
      args: ["preprocess.py"]

  - name: train-model
    container:
      image: mi-registro/train:latest
      command: ["python"]
      args: ["train.py"]

  - name: evaluate-model
    container:
      image: mi-registro/eval:latest
      command: ["python"]
      args: ["evaluate.py"]

Todo esto es 100% ejecutable sobre Kubernetes. Puedes lanzarlo con kubectl, desde la CLI de Argo, o desde su interfaz gráfica. También puedes parametrizar entradas, definir políticas de retención de logs, y almacenar resultados en buckets S3 o volúmenes persistentes.

Funcionalidades destacadas

Argo es mucho más que ejecutar scripts en orden. Entre sus capacidades más avanzadas, destacan:

  • Loops paralelos: puedes generar tareas dinámicamente a partir de una lista y ejecutarlas en paralelo.
  • Tareas condicionales: puedes definir condiciones lógicas para ejecutar o no ciertas tareas.
  • Artifacts: entrada y salida de ficheros entre tareas usando almacenamiento compartido o buckets (S3, GCS, MinIO…).
  • Plantillas reusables y anidadas: puedes definir subflujos y plantillas para componer pipelines complejos de forma modular.
  • Integración con sensores y eventos: junto a herramientas como Argo Events, puedes lanzar flujos en respuesta a cambios en buckets, commits de Git, colas de mensajes, etc.

Conclusión

Argo Workflows no es solo una herramienta más para ejecutar pipelines. Es una forma distinta de pensar tu arquitectura: declarativa, contenida, escalable, y profundamente integrada con el ecosistema de Kubernetes.

En una era donde los procesos de datos, ML y CI/CD requieren trazabilidad, modularidad y resiliencia, Argo ofrece un nivel de control que otros orquestadores simplemente no alcanzan sin una capa adicional de ingeniería.

Como siempre, no hay una solución única para todos los casos, pero si estás construyendo sistemas distribuidos en Kubernetes, Argo probablemente será una de las herramientas más importantes de tu stack.