03 · Платформа: DevOps, k8s, сеть, хранилище3.7 · Argo CD и Argo Workflows3.7.2средний

Argo Workflows: пайплайны в Kubernetes

Зачем это нужно

Jenkins (модуль 3.2) — CI: сборка образа, тесты, push в registry. Argo Workflowsоркестрация batch/job внутри Kubernetes: обучение, ETL фичей, batch inference, eval на holdout. Каждый шаг — Pod; DAG описывает зависимости; артефакты — в MinIO.

Если вы писали Python-скрипты последовательно (train.pyeval.py) — Argo Workflows превращает это в воспроизводимый граф с retry, параллелизмом и UI истории запусков.

Основные идеи

Workflow. CRD Workflow — один запуск пайплайна (как один Jenkins build).

WorkflowTemplate. Переиспользуемый шаблон DAG — как Jenkinsfile, но YAML.

Steps и DAG.

  • Steps — последовательные группы (step1 → step2).

  • DAG — явные зависимости: eval после train, notify после обоих.

Container template. Каждый шаг = контейнер с command, image, resources:

apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: train-scorer- spec: entrypoint: pipeline templates: - name: pipeline dag: tasks: - name: train template: train-step - name: eval dependencies: [train] template: eval-step - name: train-step container: image: registry/ml/trainer:12 command: [python, train.py] env: - name: OUTPUT_URI value: s3://ml-models/scorer/v45/ resources: limits: nvidia.com/gpu: 1 - name: eval-step container: image: registry/ml/trainer:12 command: [python, eval.py]

Артефакты и parameters. Input/output файлы через S3 (MinIO); parameters передают гиперпараметры между шагами без копирования больших blob в etcd.

Retry и timeout. retryStrategy на flaky шагах (spot GPU node). activeDeadlineSeconds — kill зависшего обучения.

CronWorkflow. Расписание: nightly retrain, weekly data validation — как cron в Linux, но Workflow в K8s.

Отличие от Argo CD. Имена похожи, проекты разные:

Argo CD Argo Workflows
Задача Sync Git → cluster state Run batch DAG
Единица Application Workflow
Типичный ML Deploy inference Train / ETL / batch predict

Resource awareness. Workflow scheduler учитывает GPU requests — не запустит 10 train Pod'ов на 2 GPU node без очереди (зависит от кластера и quotas).

Как это выглядит на практике

Запуск из CLI:

argo submit -n ml-train workflows/train-scorer.yaml argo list -n ml-train argo logs -n ml-train @latest

UI. Граф шагов: зелёный/красный, логи каждого Pod, duration — удобнее grep по Jenkins console для 20 шагов.

Интеграция с GitOps. WorkflowTemplate в Git; запуск через CI webhook после merge dataset или по CronWorkflow. Образ trainer тот же, что собрал Jenkins.

PVC и Workflows. Шаг train монтирует Longhorn PVC для checkpoint; финальный шаг upload в MinIO и освобождает том.

Типичные ошибки.

  • OOM на eval — не те limits memory.

  • S3 credentials не в ServiceAccount / Secret — шаг upload падает.

  • DAG cycle или typo в dependencies — workflow не стартует.

Когда НЕ нужен Argo Workflows. Простой одноразовый Job (kubectl create job) — достаточно. Workflows окупаются при DAG ≥ 3 шагов, retry, cron, shared templates.

Что сделать после занятия

  • Прочитайте пример WorkflowTemplate на MDP (или минимальный YAML из docs) и выпишите entrypoint и зависимости DAG.

  • Запустите учебный workflow с двумя шагами (echo → echo) и посмотрите логи в UI.

  • Сравните: один Kubernetes Job vs Workflow с retry на шаге train.

Официальные материалы