1️⃣ 개요
Kubernetes Job은 단일 작업을 수행하는 데 그치지 않고,
여러 개의 Pod을 병렬로 실행하여 병렬 처리를 수행할 수 있습니다.
이를 위해 사용하는 핵심 파라미터가 바로:
• completions: 전체 작업 완료 횟수
• parallelism: 동시에 실행할 Pod 수
이 글에서는 이 두 파라미터를 조합하여 다양한 병렬 처리 패턴을 설계하는 방법을 설명합니다.
2️⃣ 개념 비교
항목 | 설명 |
completions | 전체 완료되어야 할 작업 수(Pod 수) |
parallelism | 동시에 실행할 최대 Pod 수 (병렬도) |
기본값 | 1 |
특징 | Pod이 종료될 때마다 하나의 완료로 간주 |
✅ 이 두 값은 함께 조절되어야 의미가 있으며, completions ≥ parallelism 조건이 일반적입니다.
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️⃣ 결론
✔ completions과 parallelism을 적절히 조합하면, Job을 단순한 일회성 작업에서 벗어나 병렬 처리 플랫폼처럼 활용할 수 있습니다.
✔ 전체 처리 횟수와 동시 처리 가능 수를 분리하여 설정함으로써, 리소스 관리와 실행 제어가 유연해집니다.
✔ 반복 작업, 데이터 조각별 처리 등에 매우 유용한 설정입니다.
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [Job 심화편 #6] Job 리소스의 컨트롤러 상태 분석: 완료되지 않은 Job의 정리 기준 (0) | 2025.03.25 |
---|---|
📌 [Job 심화편 #5] Job 로그 수집 전략: 실행 완료 후 로그 유실 방지하기 (0) | 2025.03.25 |
📌 [Job 심화편 #3] Job 실행 중 Node 장애 시 복구 시나리오 분석 (0) | 2025.03.25 |
📌 [Job 심화편 #2] Job에서 BackoffLimit과 ActiveDeadlineSeconds의 차이점과 조합 전략 (0) | 2025.03.22 |
📌 [Job 심화편 #1] Job 리소스의 실행 보장 방식: Pod 실패 대비 전략과 재시도 설정 (0) | 2025.03.22 |