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

🧹 Argo Workflows 리소스 정리 마스터: ttlStrategy vs podGC 완벽 분석

by gasbugs 2026. 1. 3.

쿠버네티스 워크플로우를 자동화하다 보면 어느새 수많은 완료된 파드(Pod)들이 클러스터에 쌓여있는 것을 보게 됩니다. "이걸 일일이 지워야 하나?"라는 고민이 들 때쯤 마주하게 되는 두 가지 핵심 설정, 바로 ttlStrategypodGC입니다.

오늘은 Argo Workflows에서 리소스를 깔끔하게 정리해주는 이 두 기능의 사용법과 결정적인 차이점을 아주 상세하게 파헤쳐 보겠습니다! 🚀

안녕하세요! 쿠버네티스 기반의 워크플로우를 운영하다 보면 리소스 관리가 얼마나 중요한지 절감하게 됩니다. 특히 수천 개의 잡(Job)이 돌아가는 환경에서는 완료된 리소스를 제때 치우지 않으면 API 서버에 부하가 걸리고 관리가 불가능해지죠.

Argo Workflows는 이를 위해 두 가지 청소 도구를 제공합니다. 지금부터 10분 동안 이 둘의 차이를 완벽히 이해해 봅시다!


1. ttlStrategy: 워크플로우 자체를 삭제하기 ⏳

ttlStrategy(Time To Live Strategy)는 워크플로우(Workflow) 리소스 자체를 언제 삭제할지 결정합니다. 워크플로우가 삭제되면 그에 딸린 파드들도 함께 삭제됩니다.

✅ 사용 방법

ttlStrategy는 워크플로우의 결과에 따라 두 가지 옵션을 제공합니다.

  • secondsAfterCompletion: 성공/실패 여부와 상관없이 종료 후 N초 뒤 삭제.
  • secondsAfterSuccess: 성공했을 때만 N초 뒤 삭제.
  • secondsAfterFailure: 실패했을 때만 N초 뒤 삭제 (디버깅을 위해 실패 시엔 길게 잡는 경우가 많습니다).

📝 코드 예시 및 설명

YAML
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: ttl-strategy-example-
spec:
  entrypoint: main
  # 워크플로우 종료 후 자동 삭제 전략 설정
  ttlStrategy:
    secondsAfterSuccess: 300 # 성공 시 5분(300초) 뒤에 워크플로우 리소스 삭제
    secondsAfterFailure: 3600 # 실패 시 디버깅을 위해 1시간(3600초) 뒤에 삭제
    
  templates:
  - name: main
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo 'Hello, Clean World!'; sleep 10"]

2. podGC: 파드만 쏙 골라서 삭제하기 🗑️

podGC(Pod Garbage Collection)는 워크플로우 리소스는 그대로 남겨두되, 워크플로우를 구성하던 **개별 파드(Pod)**들만 먼저 정리하는 기능입니다.

✅ 사용 방법

podGC는 삭제 정책(strategy)을 통해 제어합니다.

  • OnPodCompletion: 파드가 성공적으로 끝나면 즉시 삭제.
  • OnPodSuccess: 성공한 파드만 삭제.
  • OnWorkflowCompletion: 워크플로우 전체가 종료되면 모든 파드를 삭제 (가장 권장됨).
  • OnWorkflowSuccess: 워크플로우가 성공적으로 끝났을 때만 모든 파드 삭제.

📝 코드 예시 및 설명

YAML
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: pod-gc-example-
spec:
  entrypoint: main
  # 파드 가비지 컬렉션 설정
  podGC:
    strategy: OnWorkflowCompletion # 워크플로우가 끝나면 결과에 상관없이 파드들만 먼저 삭제
    
  templates:
  - name: main
    container:
      image: alpine:latest
      command: [echo, "Pods will be deleted, but Workflow CRD stays!"]

3. 핵심 차이점 비교: 무엇이 다른가요? ⚖️

가장 많이 헷갈려 하시는 부분을 테이블로 정리했습니다.

구분 ttlStrategy podGC
삭제 대상 Workflow 리소스 전체 (파드 포함) Pod 리소스만 삭제
Argo UI 확인 삭제 후에는 UI에서 기록이 사라짐 기록은 남지만 로그/결과는 볼 수 없음
주요 목적 쿠버네티스 API 서버 부하 방지 및 완전 정리 워크플로우 기록은 보존하면서 노드 자원 정리
시간 설정 초(Seconds) 단위로 상세 제어 가능 상태(State) 기반으로 즉시 작동

4. 실무 운영 꿀팁: 언제 무엇을 써야 할까? 💡

Scenario A: 기록이 중요한 빌드/배포 환경

이때는 podGC를 사용하세요. 워크플로우 기록은 Argo UI에 남겨두어 "언제 배포가 성공했는지" 확인할 수 있게 하고, 파드만 지워서 클러스터를 쾌적하게 유지합니다.

Scenario B: 수만 번 실행되는 짧은 배치 작업

이때는 ttlStrategy를 사용하세요. 기록조차 너무 많아지면 Argo CD나 쿠버네티스 대시보드가 느려집니다. 일정 시간이 지나면 기록까지 완전히 지워주는 것이 좋습니다.

Scenario C: 가장 완벽한 조합 (Hybrid)

가장 추천하는 방식은 둘 다 쓰는 것입니다!

  • podGC: OnWorkflowCompletion으로 파드는 즉시 지우고,
  • ttlStrategy: secondsAfterCompletion: 86400으로 24시간 뒤엔 기록까지 지우는 방식입니다.

5. 주의사항 및 한계 ⚠️

  1. 로그 확인의 어려움: podGC로 파드가 삭제되면 kubectl logs 명령어로 로그를 볼 수 없습니다. 반드시 아카이빙(Artifact Repository) 설정이나 외부 로그 시스템(ELK, Loki 등)을 연동하세요.
  2. 리소스 잔류: ttlStrategy를 설정하지 않으면 워크플로우 리소스는 사용자가 직접 지우기 전까지 영구히 남습니다. 이는 API 서버 메모리 사용량을 높이는 주범이 됩니다.

6. 결론 🏁

  • 기록도 지우고 싶다? → ttlStrategy
  • 기록은 남기고 파드만 치우고 싶다? → podGC

이 두 기능만 잘 조합해도 쿠버네티스 클러스터의 '쾌적도'가 완전히 달라집니다. 여러분의 워크플로우 성격에 맞춰 최적의 청소 전략을 세워보세요! 🛠️