반응형
25차시: Kubernetes Job 완전 정복
일회성 작업과 배치 작업을 컨테이너로 안전하게 실행하는 방법
목차
- Kubernetes Job이란?
- 왜 Job이 필요한가?
- Job의 주요 특징
- Job vs CronJob vs Deployment
- 기본 YAML 구성 예제
- Job 실행 및 모니터링 방법
- 실패 처리 및 재시도 전략
- 병렬 처리(Parallelism)와 Completions
- 실제 사용 시나리오
- 운영 시 주의사항
- 자주 묻는 질문 (FAQ)
- 요약 정리
1. Kubernetes Job이란?
Kubernetes Job은 한 번 또는 지정된 횟수만큼 실행되는 작업을 안정적으로 수행하는 Kubernetes 워크로드 리소스입니다.
Deployment와 달리, Job은 지속적인 서비스를 제공하지 않고, 작업이 완료되면 종료됩니다.
대표적인 예:
- 데이터 처리 스크립트 실행
- 데이터베이스 마이그레이션
- 보고서 생성
- 로그 아카이빙
- ML 모델 학습(단발성)
2. 왜 Job이 필요한가?
단순히 Pod만 만들어서 작업을 실행할 수도 있습니다.
그러나 Pod 단독 사용 시 다음과 같은 문제가 발생합니다:
- Pod가 실패하면 자동으로 재실행되지 않음
- 완료 상태를 추적하기 어려움
- 여러 개의 Pod로 병렬 처리할 때 제어 불가
Job은 이런 문제를 해결합니다:
- 자동 재시도 기능 제공
- 성공/실패 상태 관리
- 병렬 실행 제어 가능
3. Job의 주요 특징
특징 | 설명 |
---|---|
완료 기반 실행 | 지정된 작업이 끝나면 Pod 종료 |
재시도 지원 | 실패 시 자동 재실행 가능 |
상태 추적 | 성공/실패 Pod 기록 유지 |
병렬 처리 지원 | 동시에 여러 Pod 실행 가능 |
자원 관리 | 작업 단위로 리소스 할당 가능 |
4. Job vs CronJob vs Deployment
리소스 | 용도 | 실행 방식 | 종료 시점 |
---|---|---|---|
Job | 일회성/한정된 횟수 작업 | 즉시 실행 | 작업 완료 시 |
CronJob | 주기적 작업 | 스케줄 기반 실행 | 작업 완료 시 |
Deployment | 지속 서비스 | 상시 실행 | 수동 종료 시 |
5. 기본 YAML 구성 예제
apiVersion: batch/v1
kind: Job
metadata:
name: data-processing-job
spec:
template:
spec:
containers:
- name: data-processor
image: python:3.10
command: ["python", "-c", "print('Processing data...')"]
restartPolicy: OnFailure
backoffLimit: 3
설명:
restartPolicy: OnFailure
→ 실패 시 재시작backoffLimit: 3
→ 최대 3회 재시도
6. Job 실행 및 모니터링 방법
kubectl apply -f job.yaml
kubectl get jobs
kubectl describe job data-processing-job
kubectl logs <pod-name>
Tip:
kubectl get pods
로 개별 Pod 상태 확인- 완료된 Pod도 로그를 남기므로 결과 추적 가능
7. 실패 처리 및 재시도 전략
Job은 다양한 재시도 전략을 제공합니다.
필드 | 설명 |
---|---|
backoffLimit |
최대 재시도 횟수 |
activeDeadlineSeconds |
실행 시간 제한(초) |
restartPolicy |
Never 또는 OnFailure 설정 가능 |
예:
spec:
backoffLimit: 5
activeDeadlineSeconds: 300
8. 병렬 처리(Parallelism)와 Completions
Job은 여러 개의 Pod를 동시에 실행할 수 있습니다.
spec:
parallelism: 5
completions: 20
- parallelism: 동시에 실행되는 Pod 개수
- completions: 총 실행 횟수
위 설정은 20개의 작업을 5개씩 동시에 처리
9. 실제 사용 시나리오
- 데이터 변환: ETL(Extract, Transform, Load) 작업
- 대량 파일 처리: 이미지 변환, 영상 인코딩
- 백업 작업: DB 백업, 스토리지 동기화
- 단발성 배포 스크립트 실행: 애플리케이션 초기화
- ML 학습: 모델 학습 후 저장
10. 운영 시 주의사항
- 리소스 할당: Job이 과도한 리소스를 사용하면 클러스터 전체 성능에 영향
- 완료된 Pod 관리: 기본적으로 완료된 Pod가 남아있어, 필요 시
ttlSecondsAfterFinished
로 자동 삭제 - 로그 보존: 결과 확인 후 로그를 외부 스토리지에 백업하는 전략 권장
- 노드 장애 대응: 노드 장애 시 Job이 재시작되도록 스케줄링 정책 검토 필요
11. 자주 묻는 질문 (FAQ)
Q1. Job은 무한 실행이 가능한가요?
아니요. Job은 종료 조건이 있는 작업에 적합합니다.
Q2. Job 실행 시간이 너무 길면?activeDeadlineSeconds
로 제한 가능, 초과 시 실패 처리
Q3. Job과 CronJob 차이는?
Job은 즉시/단발성, CronJob은 스케줄 기반 반복 실행
12. 요약 정리
- Job은 완료형 작업 실행을 관리하는 Kubernetes 리소스
- 자동 재시도, 병렬 처리, 상태 추적 지원
- 데이터 처리, 백업, 단발성 스크립트 실행에 적합
- 운영 시 리소스 관리, 로그 보존, Pod TTL 설정 고려 필요
반응형
'개발 창고 > Server' 카테고리의 다른 글
Kubernetes CronJob 완전 정복 : 정해진 스케줄에 반복 실행되는 작업을 안정적으로 관리하는 방법 (2) | 2025.08.07 |
---|---|
Kubernetes Secret 완전 정복 : 민감한 데이터를 안전하게 저장하고 관리하는 방법 (2) | 2025.08.06 |
Kubernetes DaemonSet 완전 정복: 모든 노드에 Pod를 자동 배포하는 방법 (6) | 2025.08.04 |
Kubernetes Deployment 완전정복: Pod 배포와 업데이트 자동화의 핵심 리소스 (2) | 2025.08.03 |
Kubernetes 레플리카셋(ReplicaSet) 완벽 이해하기 (2) | 2025.08.02 |