반응형
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 |