3.7.2 · блок 3
Argo Workflows: пайплайны в Kubernetes
Argo Workflows: пайплайны в Kubernetes
Зачем это нужно
Jenkins (модуль 3.2) — CI: сборка образа, тесты, push в registry. Argo Workflows — оркестрация batch/job внутри Kubernetes: обучение, ETL фичей, batch inference, eval на holdout. Каждый шаг — Pod; DAG описывает зависимости; артефакты — в MinIO.
Если вы писали Python-скрипты последовательно (train.py → eval.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.