Argo Workflows Reference
Argo Workflows CRD, 템플릿, DAG 패턴 레퍼런스
Argo Workflows Reference 소개
Argo Workflows 레퍼런스는 Argo Workflows Kubernetes 네이티브 워크플로우 엔진의 핵심 문법을 5개 카테고리로 정리한 검색 가능한 치트 시트입니다. 워크플로우(Workflow CRD와 진입점/템플릿 구조), 템플릿(Container, 인라인 소스가 있는 Script, DAG 의존성 그래프, Steps 순차/병렬 단계, Kubernetes 오브젝트 생성용 Resource), 아티팩트(S3 아티팩트 출력, {{inputs.parameters.name}} 파라미터 전달, PVC 볼륨 마운트), 실행 제어(재시도 backoff, 태스크 타임아웃, onExit 핸들러, 승인 대기를 위한 suspend/resume), 스케줄(cron 스케줄의 CronWorkflow, 재사용 가능한 WorkflowTemplate)을 모두 다룹니다.
이 레퍼런스는 Argo Workflows로 Kubernetes 위에서 복잡한 다단계 워크플로우를 오케스트레이션하는 MLOps 엔지니어, 데이터 엔지니어, 플랫폼 팀, CI/CD 파이프라인 개발자를 위해 설계되었습니다. 전처리 단계 완료 후 병렬 학습을 실행하는 DAG 기반 ML 파이프라인이든, 야간 배치 작업을 위한 CronWorkflow든, 전체 문서를 참조하지 않고도 필요한 YAML 스펙을 바로 찾을 수 있습니다.
Argo Workflows의 템플릿 기반 모델은 각 태스크에 적절한 템플릿 유형을 선택하도록 요구합니다: Docker 이미지 실행에는 Container, 인라인 코드에는 Script, 복잡한 의존성 그래프에는 DAG, 순서가 있는 단계에는 Steps, Kubernetes 오브젝트 관리에는 Resource를 사용합니다. 5개 카테고리는 이러한 결정 사항을 반영합니다. 브라우저에서 실행되며 회원가입 없이 무료로 사용할 수 있고 다크 모드를 지원합니다.
주요 기능
- Workflow CRD: 완전한 파이프라인 정의를 위한 entrypoint, generateName, 최상위 템플릿 구조
- Container 템플릿: 빌드/테스트/배포 단계에서 커스텀 명령으로 Docker 이미지 실행
- Script 템플릿: 경량 데이터 처리 태스크를 위한 이미지 선택이 가능한 인라인 Python/셸 스크립트
- DAG 템플릿: 복잡한 병렬/순차 파이프라인을 위한 "dependencies" 배열로 태스크 의존성 정의
- Steps 템플릿: 이중 괄호 문법으로 각 단계 내 병렬 태스크가 가능한 순차 단계 정의
- 아티팩트 전달: {{workflow.name}} 키 템플릿과 아티팩트 입력 참조를 이용한 S3/GCS 아티팩트 출력
- 파라미터 전달: 동적 워크플로우 구성을 위한 {{inputs.parameters.name}} 참조로 태스크 인수 전달
- 실행 제어: limit/backoff 재시도, timeout/activeDeadlineSeconds, onExit 핸들러, 승인 대기 suspend
자주 묻는 질문
DAG 템플릿과 Steps 템플릿의 차이는 무엇인가요?
DAG 템플릿은 "dependencies: [A, B]" 배열로 명시적 의존성을 정의하여 유향 비순환 그래프를 만듭니다. Argo는 의존성이 충족된 태스크를 자동으로 병렬 실행합니다. Steps 템플릿은 목록의 목록으로 순차 단계를 정의하며, 내부 목록은 병렬, 외부 목록은 순차 실행됩니다. 복잡한 의존성 그래프에는 DAG, 단계별 파이프라인에는 Steps를 사용하세요.
Argo Workflows에서 태스크 간 데이터를 어떻게 전달하나요?
두 가지 방법이 있습니다. 파라미터(문자열, 숫자 등 소용량 값)는 {{inputs.parameters.name}}과 {{outputs.parameters.name}} 문법을 사용합니다. 아티팩트(파일, 대용량 데이터)는 outputs 섹션에 컨테이너 파일시스템 경로와 S3 같은 스토리지 백엔드를 정의하고, 다음 태스크의 inputs.artifacts에서 참조합니다.
WorkflowTemplate은 Workflow와 어떻게 다른가요?
WorkflowTemplate은 클러스터에 Kubernetes CRD로 저장된 재사용 가능한 템플릿 라이브러리입니다. Workflow는 실제 실행 인스턴스입니다. "templateRef: {name: my-tmpl, template: common-build}"를 사용해 다른 Workflow나 WorkflowTemplate에서 참조할 수 있어 DRY(중복 제거) 워크플로우 설계가 가능합니다.
Argo Workflows의 재시도 정책은 어떻게 동작하나요?
템플릿에 "retryStrategy" 블록을 추가하고 "limit"(최대 재시도 횟수), "retryPolicy"(OnFailure, Always, OnError), 선택적으로 "backoff"(duration, factor, maxDuration 지수 백오프)를 설정합니다. 태스크 실패 시 재시도가 남아 있으면 Argo가 새 파드를 생성하여 재시도합니다. 외부 API 호출이나 네트워크 의존 작업에 유용합니다.
CronWorkflow란 무엇이며 언제 사용하나요?
CronWorkflow는 표준 cron 표현식(예: "0 */6 * * *"은 6시간마다)으로 Argo Workflows를 예약하는 Kubernetes CRD입니다. 배치 처리, 데이터 파이프라인, 야간 리포트 생성, 주기적 자동화 작업에 적합합니다. 내부의 workflowSpec은 일반 Workflow 스펙과 동일합니다.
수동 승인을 위해 실행 중인 워크플로우를 일시 중지하는 방법은?
"suspend: {}" 가 있는 템플릿을 워크플로우의 단계로 추가합니다. 실행이 이 단계에 도달하면 워크플로우가 일시 중지됩니다. 담당자가 상태를 검토한 후 "argo resume WORKFLOW_NAME"으로 재개할 수 있습니다. 이를 통해 수동 승인 게이트를 구현할 수 있습니다.
Argo Workflows에서 Exit Handler란 무엇인가요?
Exit Handler는 "spec.onExit"에 지정된 템플릿으로, 성공/실패 여부와 관계없이 워크플로우 완료 후 실행됩니다. 임시 리소스 삭제 같은 정리 작업, Slack 알림, 최종 결과 업로드 등에 사용됩니다. 워크플로우 상태를 받아 성공/실패에 따라 분기할 수 있습니다.
Argo Workflow에서 PersistentVolumeClaim을 마운트하는 방법은?
"spec.volumes"에 볼륨 이름과 claimName으로 PVC를 정의하고, 템플릿 컨테이너의 "volumeMounts"에서 볼륨 이름과 mountPath를 참조합니다. 이를 통해 동일 워크플로우의 여러 단계에서 파일시스템을 공유할 수 있어 빌드 아티팩트, 데이터셋, 체크포인트 공유에 유용합니다.