본문 바로가기
클라우드/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으로 확장해 보시길 추천드립니다! 🌟 

반응형