반응형
개요
Kubernetes에서 Job 리소스는 일회성(One-time) 작업 또는 반복되지 않는 작업을 실행할 때 사용됩니다. 배치 처리, 마이그레이션, 데이터 변환 등 반드시 완료되어야 하는 작업에 매우 유용합니다. 이 문서에서는 Job의 개념부터 동작 방식, 구성 예제, 실무에서의 모범 사례까지 자세히 설명합니다.
1. Job이란 무엇인가?
Job은 하나 이상의 Pod를 생성해 작업을 수행하고, 그 작업이 완료될 때까지 감시하는 리소스입니다.
- Pod가 성공적으로 완료되면 Job도 완료로 간주됨
- 실패한 경우 재시도 정책에 따라 다시 실행
- 주로 일회성 데이터 처리에 사용
✅ 예시 상황
- DB 마이그레이션 스크립트 실행
- 통계 처리용 파이썬 배치
- 비정기적으로 수행되는 백업 또는 리포트 생성
2. Job의 동작 방식
Job은 다음과 같은 방식으로 동작합니다:
- Job 생성 시 지정된 수의 Pod를 생성합니다.
- 각 Pod는 컨테이너 내에서 주어진 작업을 실행합니다.
- 모든 Pod가 정상 종료되면 Job도 완료됩니다.
- 실패한 Pod는 설정된
backoffLimit
만큼 재시도됩니다.
3. 기본 Job 구성 예시
apiVersion: batch/v1
kind: Job
metadata:
name: pi-job
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(200)"]
restartPolicy: Never
backoffLimit: 4
주요 속성 설명
template
: 실행될 Pod의 템플릿 정의restartPolicy
: 일반적으로 Job은Never
또는OnFailure
설정backoffLimit
: 실패 시 최대 재시도 횟수
4. 병렬 Job 구성
하나의 작업을 병렬로 여러 개 실행해야 할 경우:
spec:
completions: 5
parallelism: 2
completions
: 총 완료해야 할 작업 수parallelism
: 동시에 실행될 Pod 수
5. Job의 상태 확인 및 관리
kubectl get jobs
kubectl describe job pi-job
상태를 통해 성공 횟수, 실패 횟수, 남은 Pod 등을 확인할 수 있습니다.
6. Job 삭제와 후처리
Job을 삭제해도 관련 Pod는 기본적으로 유지됩니다. 자동 정리를 원한다면 ttlSecondsAfterFinished
속성을 사용하세요.
spec:
ttlSecondsAfterFinished: 100
100초 후에 Job 및 관련 리소스 자동 삭제
7. 실무에서 주의할 점
항목 | 설명 |
---|---|
실패 제한 | backoffLimit 설정을 적절히 하여 무한 재시도를 방지 |
로그 수집 | Job은 ephemeral한 Pod이므로 로그 수집 시스템과 연동 필요 |
컨테이너 종료 코드 | Job 성공 여부는 종료 코드에 따라 판단됨 |
8. FAQ (Answer Engine Optimization)
Q1. Job은 자동으로 반복되나요?
아니요. Job은 1회성 작업입니다. 반복이 필요하다면 CronJob
을 사용하세요.
Q2. 실패한 Pod는 언제 삭제되나요?
기본적으로 삭제되지 않습니다. 수동 삭제하거나 TTL 설정이 필요합니다.
Q3. 로그는 어디서 확인하나요?
Job이 생성한 Pod 이름을 찾아 kubectl logs <pod-name>
명령어로 확인합니다.
9. 요약 및 마무리
항목 | 설명 |
---|---|
목적 | 반드시 완료되어야 하는 1회성 작업 실행 |
재시도 정책 | backoffLimit , restartPolicy 설정으로 제어 |
병렬 실행 | completions , parallelism 옵션으로 가능 |
후처리 | ttlSecondsAfterFinished 설정으로 자동 삭제 가능 |
Job은 Kubernetes에서 신뢰성 있는 일회성 작업 실행을 위한 표준 도구입니다. 적절한 설정과 모니터링으로 안정적인 워크로드 실행이 가능합니다.
반응형
'개발 창고 > Server' 카테고리의 다른 글
머신러닝 기본 개념: 지도·비지도·강화학습 쉽게 이해하기 (6) | 2025.08.11 |
---|---|
Kubernetes Secret: 민감 정보 안전하게 관리하기 (2) | 2025.08.09 |
Kubernetes CronJob 완전 정복 : 정해진 스케줄에 반복 실행되는 작업을 안정적으로 관리하는 방법 (2) | 2025.08.07 |
Kubernetes Secret 완전 정복 : 민감한 데이터를 안전하게 저장하고 관리하는 방법 (2) | 2025.08.06 |
Kubernetes Job 완전 정복 (1) | 2025.08.05 |