Kubernetes에서 분석 작업을 워크플로우로 연결할 수 있나요?

Kubernetes의 “완료까지 실행” 문서를 읽어보니 작업을 병렬로 실행할 수 있다고 되어 있습니다. 그러나 일련의 작업을 순차적으로 (병렬 및/또는 비병렬로) 연결하여 실행할 수 있는지 궁금합니다.​

또는 사용자가 각 작업의 완료를 추적하고 PubSub 메시징 서비스를 사용하여 다음 작업을 트리거해야 하는지요?

과거에 PodSpec 내에서 initContainers를 사용하여 다음과 같은 문제를 해결한 적이 있습니다: Init Containers | Kubernetes

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

컨테이너 간 의존성을 depends 키워드로 체이닝하는 방법도 옵션이 될 수 있습니다:

답변 감사합니다. :slight_smile:

우선 Kubernetes는 기본적으로 “작업을 실행하는 플랫폼”에 가깝기 때문에, 분석 작업을 단순히 Pod 하나로 수행하는 것은 어렵지 않습니다. 다만 말씀하신 것처럼 여러 작업을 순서대로 혹은 조건에 따라 연결하려면, 워크플로우 오케스트레이션 도구를 함께 사용해야 하는 경우가 대부분입니다.

대표적으로 많이 언급되는 도구는 Argo Workflows입니다. K8s 위에서 각 분석 단계를 개별 Step(Pod)로 정의하고, 이를 순서·병렬·조건·재시도 규칙 등과 함께 연결할 수 있기 때문에 데이터 처리나 머신러닝 파이프라인을 구성하는 데 적합하다고 알려져 있습니다. YAML 형태로 전체 과정을 표현할 수 있어 재현성과 관리 측면에서도 장점이 있다는 의견이 많았습니다.

또 한 가지 흐름은 Kubeflow Pipelines를 사용하는 방식입니다. 머신러닝 환경을 위해 만들어진 워크플로우 도구이지만, 단계별 분석·전처리·모델링 작업을 파이프라인 형태로 구성하기에 적합해 보입니다. 각 단계가 Docker 이미지 기반으로 실행되기 때문에, 분석 코드 배포 역시 Kubernetes의 표준 방식을 그대로 활용할 수 있습니다.

물론 분석 작업을 단순히 연결하는 수준이라면 Argo Workflows 기반이 가장 직관적이고 범용적이라는 이야기가 자주 등장합니다. Kubeflow는 머신러닝 중심의 기능들이 많아서 환경 구성 자체가 무거워질 수 있다는 점도 실무에서 종종 언급되곤 합니다.

정리하자면,
Kubernetes 자체 기능만으로 워크플로우를 구성하는 것은 한계가 있고,
대신 Argo Workflows나 Kubeflow Pipelines 같은 Kubernetes-native 오케스트레이터를 활용하면
분석 작업을 단계적으로 연결하거나, 병렬 실행하거나, 조건에 따라 제어하는 구조를 자연스럽게 구축할 수 있다는 흐름이었습니다.

1 Like