Kubernetes/Kubernetes Advanced

📌 [Job 심화편 #4] Job의 completions, parallelism 조합을 통한 병렬 처리 패턴 구성

ygtoken 2025. 3. 25. 15:59
728x90

 

1️⃣ 개요

 

Kubernetes Job은 단일 작업을 수행하는 데 그치지 않고,

여러 개의 Pod을 병렬로 실행하여 병렬 처리를 수행할 수 있습니다.

이를 위해 사용하는 핵심 파라미터가 바로:

completions: 전체 작업 완료 횟수

parallelism: 동시에 실행할 Pod 수

 

이 글에서는 이 두 파라미터를 조합하여 다양한 병렬 처리 패턴을 설계하는 방법을 설명합니다.

 


2️⃣ 개념 비교

항목 설명
completions 전체 완료되어야 할 작업 수(Pod 수)
parallelism 동시에 실행할 최대 Pod 수 (병렬도)
기본값 1
특징 Pod이 종료될 때마다 하나의 완료로 간주

✅ 이 두 값은 함께 조절되어야 의미가 있으며, completionsparallelism 조건이 일반적입니다.

 


3️⃣ 예제: 5개 작업을 최대 2개씩 병렬로 실행

apiVersion: batch/v1
kind: Job
metadata:
  name: batch-task
spec:
  completions: 5                       # 총 5개의 작업 수행 필요
  parallelism: 2                       # 동시에 2개까지 실행 허용
  template:
    spec:
      restartPolicy: OnFailure        # 실패 시에만 재시작
      containers:
        - name: worker
          image: busybox
          command:
            - sh
            - -c
            - |
              echo "🎯 작업 시작: $(hostname)";
              sleep 10

📌 설명

한 번에 2개씩 Pod이 실행되며, 각 Pod이 성공적으로 종료되면 1개의 작업으로 간주됩니다.

총 5개 작업을 완료하기 위해 Pod은 최대 5번 실행됩니다.

 


4️⃣ 실행 흐름 예시

1. 첫 번째 병렬 실행 → Pod A, Pod B
2. A, B 종료 후 → Pod C, Pod D
3. C, D 종료 후 → Pod E 실행
4. 총 5회 완료 → Job 성공 처리

✅ 모든 작업은 병렬로 최대 2개까지만 동시 실행되며, 순차적으로 진행됩니다.

 


5️⃣ 병렬 처리 전략 패턴

패턴 설명 예시
일괄 처리 completions = parallelism 한 번에 모든 작업 실행
순차 처리 parallelism = 1 한 작업씩 순차적으로 실행
제어된 병렬 처리 parallelism < completions 일정 병렬도 유지하며 작업 분산 처리

 

 


6️⃣ 완료된 Pod 확인 및 상태 조회

kubectl get pods --selector=job-name=batch-task

kubectl describe job batch-task

 

출력 예시:

Successful Pods: 5
Parallelism: 2
Completions: 5

kubectl logs <pod-name> 으로 각 작업의 출력 결과를 확인할 수 있습니다.

 


7️⃣ 작업마다 다른 인자를 주고 싶다면?

인덱스 기반 처리: Indexed Job (Kubernetes 1.21+)

환경 변수 주입: Downward API 또는 args 활용

외부 구성: ConfigMap 또는 파일로 매핑

 

➡ 이 내용은 별도 글에서 Indexed Job으로 확장하여 다룰 예정입니다.

 


🔥 8️⃣ 결론

 

completionsparallelism을 적절히 조합하면, Job을 단순한 일회성 작업에서 벗어나 병렬 처리 플랫폼처럼 활용할 수 있습니다.

✔ 전체 처리 횟수와 동시 처리 가능 수를 분리하여 설정함으로써, 리소스 관리와 실행 제어가 유연해집니다.

✔ 반복 작업, 데이터 조각별 처리 등에 매우 유용한 설정입니다.

 

728x90