본문 바로가기
IT & Tech 정보

🧠 131. Kubernetes CronJob을 Argo Events로 확장하여 이벤트 중심 스케줄링 구현하기

by 지식과 지혜의 나무 2025. 5. 30.
반응형



“시간이 아닌 이벤트로 작동하는 진짜 ‘CronJob 2.0’”



📌 개요

기존 Kubernetes CronJob은 시간 기반 스케줄링(schedule: "*/5 * * * *")에만 의존합니다.
그러나 Slack 메시지, S3 업로드, Webhook 호출, Kafka 메시지 수신과 같은 외부 이벤트를 기반으로 Job을 실행해야 하는 경우에는 적합하지 않습니다.

이럴 때 사용하는 것이 Argo Events입니다.
Argo Events는 다양한 소스로부터의 이벤트를 감지하고, 해당 이벤트에 따라 Kubernetes 내 리소스를 트리거할 수 있게 해주는 이벤트 기반 워크플로우 트리거러입니다.



💡 핵심 구성 요소

구성 요소 설명
Sensor 이벤트 수신 조건을 명세하고, Job이나 Workflow 실행을 트리거함
EventSource Slack, Kafka, MinIO, Cron 등 외부 이벤트를 감지하는 정의
Trigger 감지된 이벤트가 발생했을 때 어떤 리소스를 실행할지 정의
Gateway (옵션) 복잡한 이벤트 라우팅 처리




🧪 실전 예제: Slack 메시지 수신 → 데이터 처리 Job 실행

1. Slack Event Source 정의

apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
  name: slack-listener
spec:
  slack:
    example-slack:
      token:
        valueFromSecret:
          name: slack-token
          key: token
      channel: "#alerts"

2. Sensor 정의

apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: slack-to-job
spec:
  dependencies:
    - name: slack-dep
      eventSourceName: slack-listener
      eventName: example-slack
  triggers:
    - template:
        name: run-job
        k8s:
          group: batch
          version: v1
          resource: jobs
          operation: create
          source:
            resource:
              apiVersion: batch/v1
              kind: Job
              metadata:
                generateName: data-job-
              spec:
                template:
                  spec:
                    containers:
                      - name: job
                        image: alpine
                        command: ["sh", "-c", "echo Event Received!"]
                    restartPolicy: Never




🔍 실무 적용 시 고려사항

항목 설명
보안 Slack이나 webhook 인증 정보는 반드시 Secret으로 관리
멱등성 이벤트가 중복 수신될 수 있으므로 Job이 멱등성 보장해야 함
장애 복구 Argo Events는 상태 저장하지 않음 → 이벤트 로깅 별도 구축 필요
로깅 Sensor 및 EventSource에 별도 stdout 로깅 Sidecar 붙이기 권장




🌐 확장 아이디어
• S3 업로드 → ETL Workflow 자동 실행
• GitHub Webhook → 자동 Helm 차트 배포
• Kafka 메시지 수신 → Scikit-learn 모델 재학습
• HTTP API 호출 → AWS EKS 내 Lambda-like 실행
• Argo CD 연계 → GitOps + EventOps 통합



🔚 결론

Kubernetes의 CronJob은 이제 ‘시간’만 보는 구식 스케줄러입니다.
Argo Events를 활용하면, 실리콘밸리식 이벤트 기반 오케스트레이션을 K8s 위에서 직접 구현할 수 있습니다.

Slack, Kafka, GitHub, S3… 어디에서든 이벤트가 발생하면,
그 순간 Kubernetes가 반응하게 만드는 것 —
그것이 21세기형 DevOps입니다.

반응형