2 minute read

workflow-tool과 합칠 필요


컨테이너를 쉽게 실행하거나 관리하도록 도와주는 배치 작업(Batch Job) 오픈소스는 여러 가지가 있습니다. 이 오픈소스들은 Kubernetes 환경에서 컨테이너화된 작업을 스케줄링하거나 자동으로 실행하는 데 유용합니다.


1. 주요 배치 작업 오픈소스

1.1. Apache Airflow

  • 설명:
    • 워크플로 및 배치 작업을 정의하고 실행하는 오픈소스 플랫폼.
    • DAG(Directed Acyclic Graph)를 사용하여 작업의 종속성을 관리.
  • 특징:
    • Python 코드로 작업 정의.
    • KubernetesExecutor 또는 KubernetesPodOperator를 사용하여 컨테이너를 실행.
    • REST API를 통해 작업 트리거 가능.
  • 사용 사례:
    • 데이터 파이프라인, ETL 작업, 배치 작업 실행.
  • 설치 및 실행:

      pip install apache-airflow
    
  • 공식 사이트: Apache Airflow

1.2. Kubernetes Jobs and CronJobs

  • 설명:
    • Kubernetes 네이티브 배치 작업 리소스.
    • 반복적으로 실행되지 않는 작업(Job)이나 주기적으로 실행되는 작업(CronJob)에 적합.
  • 특징:
    • YAML 파일로 작업 정의.
    • Kubernetes 환경에서 Pod를 생성하여 작업 수행.
    • 작업 완료 상태 추적.
  • 사용 사례:
    • 간단한 배치 작업.
    • 주기적으로 실행되는 컨테이너 작업.
  • 예시:

      apiVersion: batch/v1
      kind: Job
      metadata:
        name: example-job
      spec:
        template:
          spec:
            containers:
            - name: example
              image: busybox
              command: ["echo", "Hello, Kubernetes Batch Job!"]
            restartPolicy: Never
    
      kubectl apply -f job.yaml
    

1.3. Argo Workflows

  • 설명:
    • Kubernetes 네이티브 워크플로 관리 도구.
    • DAG 또는 단계 기반 워크플로 정의.
    • 컨테이너 작업을 쉽게 정의하고 종속성을 설정 가능.
  • 특징:
    • YAML 기반 워크플로 정의.
    • Kubernetes 클러스터 내에서 실행.
    • UI, CLI, API를 통한 관리.
  • 사용 사례:
    • ML 워크플로, 데이터 처리 파이프라인, 배치 작업.
  • 설치 및 실행:

      kubectl create namespace argo
      kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflows/stable/manifests/install.yaml
    
  • 공식 사이트: Argo Workflows

1.4. Prefect

  • 설명:
    • 워크플로와 배치 작업을 정의하고 실행할 수 있는 Python 기반 오픈소스.
    • Cloud 환경에서의 배치 작업 스케줄링도 지원.
  • 특징:
    • Python으로 작업 정의.
    • DAG 없이 유연한 작업 흐름 관리.
    • KubernetesAgent를 사용하여 작업 실행.
  • 사용 사례:
    • 데이터 파이프라인, ETL 작업, 분산 작업.
  • 설치 및 실행:

      pip install prefect
      prefect server start
    
  • 공식 사이트: Prefect

1.5. Nomad

  • 설명:
    • HashiCorp에서 제공하는 컨테이너 및 배치 작업 오케스트레이션 도구.
    • 컨테이너뿐만 아니라 VM, 자바 애플리케이션 등도 지원.
  • 특징:
    • 간단한 작업 정의.
    • Kubernetes 없이도 실행 가능.
    • 고성능 배치 작업 처리.
  • 사용 사례:
    • 다양한 워크로드의 배치 작업.
    • 쿠버네티스를 사용하지 않는 환경.
  • 설치 및 실행:

      brew install nomad
      nomad agent -dev
    
  • 공식 사이트: Nomad

1.6. Flyte

  • 설명:
    • ML 워크플로 및 배치 작업을 위한 Kubernetes 기반 플랫폼.
    • Argo Workflows와 유사하지만 ML에 최적화.
  • 특징:
    • DAG 기반 작업 관리.
    • Python SDK로 작업 정의.
    • 대규모 워크플로 처리.
  • 사용 사례:
    • ML 데이터 파이프라인.
    • 고성능 배치 작업.
  • 공식 사이트: Flyte

1.7. Dask

  • 설명:
    • 병렬 작업 실행을 위한 Python 라이브러리.
    • 분산 환경에서 배치 작업 실행 가능.
  • 특징:
    • Python 작업 정의.
    • Kubernetes에서 Dask 클러스터 실행 가능.
  • 사용 사례:
    • 데이터 분석, 병렬 계산, 분산 워크플로.
  • 설치 및 실행:

      pip install dask[distributed]
      dask-scheduler
      dask-worker tcp://<scheduler-ip>:<port>
    
  • 공식 사이트: Dask

2. 선택 기준

도구 특징 추천 환경
Apache Airflow DAG 기반의 워크플로, ETL 작업에 최적화 데이터 파이프라인, 복잡한 배치 작업.
Kubernetes Jobs Kubernetes 네이티브, 간단한 배치 작업 단일 또는 반복적인 작업 실행.
Argo Workflows DAG 및 단계 기반, Kubernetes 네이티브 ML 워크플로, 복잡한 컨테이너 작업.
Prefect DAG 없이 Python 기반 워크플로 정의 유연한 Python 작업, 데이터 파이프라인.
Nomad 간단하고 고성능 배치 작업, Kubernetes 불필요 Kubernetes 없이 배치 작업 실행.
Flyte ML 워크플로 및 대규모 배치 작업 데이터 분석, ML 파이프라인.
Dask 병렬 처리 및 분산 워크로드 대규모 데이터 처리, 병렬 계산.

3. 추천

  • 간단한 작업: Kubernetes Jobs or CronJobs.
  • 복잡한 워크플로 관리: Argo Workflows or Apache Airflow.
  • 대규모 ML 워크플로: Flyte or Dask.
  • Kubernetes 없이 배치 작업: Nomad.

각 도구는 특정 작업 유형과 환경에 최적화되어 있으므로, 사용하려는 환경과 요구사항에 따라 적합한 도구를 선택하세요.

Updated: