본문 바로가기
클라우드/Argo

🏗️ Argo 마스터 가이드: 템플릿 4종 완벽 분석 (ClusterAnalysis부터 ContainerSet까지)

by gasbugs 2026. 1. 2.

안녕하세요! Argo Workflows와 Argo Rollouts를 활용해 고도화된 클라우드 네이티브 환경을 구축하려는 분들을 위해 준비했습니다.

Argo 생태계에는 다양한 Template(템플릿)이 존재합니다. 각 템플릿은 워크플로우의 한 단계를 정의하거나, 배포의 안전성을 검증하는 등 고유의 역할을 수행하죠. 오늘은 그중에서도 실무에서 중요하게 다뤄지는 4가지 템플릿을 아주 상세하게 파헤쳐 보겠습니다. 🚀

Argo를 단순히 "컨테이너 실행 도구"로만 알고 계셨다면, 오늘 소개할 템플릿들이 여러분의 시야를 넓혀줄 것입니다. 자동화된 분석, 데이터 처리, 그리고 복합적인 컨테이너 실행까지 하나씩 알아볼까요? 💡


1. 📊 ClusterAnalysisTemplate: 클러스터 단위의 스마트 검증기

ClusterAnalysisTemplate은 주로 Argo Rollouts에서 사용되는 강력한 템플릿입니다. 이름에서 알 수 있듯이 '클러스터 전체' 수준에서 재사용할 수 있는 분석 로직을 정의합니다.

🧐 주요 특징

  • 재사용성: 특정 네임스페이스에 종속되지 않고 클러스터 전체의 여러 Rollout 리소스에서 공유할 수 있습니다.
  • 메트릭 기반: Prometheus, Datadog, New Relic 등 외부 모니터링 시스템의 데이터를 쿼리하여 배포의 성공 여부를 판단합니다.
  • 자동 롤백: 분석 결과가 실패(Error/Failure)로 판단되면 Argo Rollouts가 자동으로 배포를 중단하고 이전 버전으로 롤백합니다.

💻 YAML 예시 및 설명

YAML
 
apiVersion: argoproj.io/v1alpha1
kind: ClusterAnalysisTemplate
metadata:
  name: global-error-rate-check  # 클러스터 어디서든 호출할 이름
spec:
  metrics:
  - name: error-rate
    interval: 1m             # 1분마다 메트릭 확인
    successCondition: result[0] < 0.01  # 에러율이 1% 미만이어야 성공
    failureLimit: 3          # 3번 이상 실패 시 최종 실패 처리
    provider:
      prometheus:
        address: http://prometheus.monitoring.svc.cluster.local
        query: |
          sum(rate(http_requests_total{status=~"5.*"}[1m])) 
          / 
          sum(rate(http_requests_total[1m]))

Tip: AnalysisTemplate과 달리 Cluster 접두사가 붙은 이 템플릿은 관리자 권한으로 공통 모니터링 규칙을 만들 때 매우 유용합니다.


2. 🔢 Data Template: 데이터 기반 의사결정의 핵심

Argo Workflows에서 Data Template은 외부 소스(S3, HTTP 아티팩트 등)로부터 데이터를 읽어와 워크플로우 내에서 변수로 활용하거나 제어 흐름을 결정할 때 사용합니다.

🧐 주요 특징

  • 동적 생성: 데이터를 읽어와서 withParam과 결합하면, 데이터의 개수만큼 동적으로 루프(Loop)를 돌릴 수 있습니다.
  • 필터링: 읽어온 JSON 데이터에서 특정 값만 추출(JSONPath 등 사용)하는 능력이 탁월합니다.

💻 YAML 예시 및 설명

YAML
- name: data-fetch-example
  data:
    source:
      artifact:
        s3:
          endpoint: s3.amazonaws.com
          bucket: my-bucket
          key: user_list.json  # 분석할 데이터가 담긴 파일
    transformation:
      # JSON 데이터에서 'active' 상태인 유저의 ID만 리스트로 추출
      jsonPath: "{$.users[?(@.status == 'active')].id}"

3. 📜 Script Template: 파이썬, Bash 무엇이든 자유롭게

Script Template은 가장 대중적이면서도 강력한 템플릿입니다. 일반적인 Container 템플릿과 비슷하지만, 소스 코드를 YAML 내부에 직접 작성(Inline)할 수 있다는 점이 다릅니다.

🧐 주요 특징

  • 간편한 로직 구현: 별도의 도커 이미지를 매번 빌드하지 않아도, 표준 이미지를 불러와 내부 스크립트만 수정하여 로직을 실행할 수 있습니다.
  • 결과 캡처: 스크립트의 표준 출력(Stdout)을 변수로 저장하여 다음 단계에 전달하기 매우 쉽습니다.

💻 YAML 예시 및 설명

YAML
 
- name: generate-report-script
  script:
    image: python:3.9-slim    # 실행 환경 이미지
    command: [python]        # 사용할 인터프리터
    source: |                # 실행할 소스 코드 (Inline)
      import json
      import sys
      
      # 복잡한 계산 로직 수행
      data = {"status": "success", "score": 95}
      
      # 결과를 Stdout으로 출력하면 Argo가 이를 결과값으로 캡처함
      print(json.dumps(data))

 

주의: 로직이 너무 길어지면 YAML 가독성이 떨어지므로, 복잡한 코드는 이미지에 포함시키는 것이 좋습니다. ⚠️


4. 📦 Container Set Template (Graph): 복합 컨테이너의 오케스트레이션

Container Set Template은 하나의 Pod 안에서 여러 개의 컨테이너를 실행하고, 그들 사이의 의존 관계를 정의할 수 있는 템플릿입니다.

🧐 주요 특징

  • Sidecar 그 이상: 단순히 같이 실행되는 것을 넘어, 컨테이너 A가 끝나야 B가 실행되는 식의 'Pod 내부 워크플로우'를 만들 수 있습니다.
  • 리소스 효율성: 여러 작업을 하나의 Pod 노드에서 처리하므로 네트워크 레이턴시가 낮고 리소스 관리가 효율적입니다.

💻 YAML 예시 및 설명

YAML
 
- name: complex-job-set
  containerSet:
    containers:
    - name: setup
      image: alpine
      command: [sh, -c, "echo 'Initializing...' > /shared/init.txt"]
      volumeMounts:
      - name: workdir
        mountPath: /shared
    
    - name: main-process
      image: my-app:latest
      dependencies: [setup]  # setup 컨테이너가 성공해야 실행됨
      volumeMounts:
      - name: workdir
        mountPath: /shared
        
    - name: reporter
      image: curlimages/curl
      dependencies: [main-process] # main-process 이후 실행
      command: [curl, -X, POST, "http://notify.me"]

💡 요약 및 선택 가이드

템플릿 종류 주요 용도 한 줄 평
ClusterAnalysis 배포 안정성 검증 (Rollouts) "전사 공통 배포 합격 기준표"
Data 동적 데이터 처리 및 루프 생성 "데이터가 시키는 대로 움직이는 브레인"
Script 간단한 로직 및 스크립트 실행 "빌드 없이 바로 쓰는 맥가이버 칼"
Container Set Pod 내부 다중 컨테이너 제어 "한 지붕 아래 여러 일꾼들의 협업"

🏁 마치며

Argo 생태계는 매우 방대하지만, 이 4가지 템플릿의 특성을 잘 이해하고 조합한다면 진정한 GitOps와 워크플로우 자동화를 구현할 수 있습니다. 처음에는 Script Template으로 시작해 보시고, 점차 데이터 기반의 Data Template이나 클러스터 공통 분석을 위한 ClusterAnalysisTemplate으로 확장해 보시길 추천드립니다! 🌟