[yongggg's] Kubernetes 에서 Job 이란?
이번 장에서는 Kubernetes에서 testing 시 이용하는 Job에 대해 설명 드리겠습니다.
Job은 특정 작업(배치 작업, 데이터 처리 등)을 수행하고 종료하는 일회성 작업을 위해 사용됩니다.
** (vs. Pod) Pod은 일반적으로 웹 서버처럼 계속 동작하는 Application을 실행할 때, 사용됩니다.
Kubernetes의 Job에 대해서 더 자세히 알아보겠습니다!
1. Kubernetes Job
Kubernetes Job은 일회성(One-time) 작업을 실행하는 데 사용되는 Kubernetes 리소스이며, Job의 역할은 Pod을 실행하고, 해당 작업이 완료되면 종료되도록 설계되었다. 주로 배치 작업(Batch Processing) 또는 데이터 처리 작업에서 활용된다.
📌 1. Job의 특징
• 일회성 실행: 지정된 작업이 완료되면 Pod가 종료됨.
• 성공 조건: 모든 Pod가 정상적으로 실행되어 종료되면 Job이 완료됨.
• 재시도 기능: 실패한 Pod는 자동으로 재시도할 수 있음.
• 병렬 처리 지원: 여러 개의 Pod를 병렬로 실행할 수 있음.
📌 2. Job 동작 방식
Job이 생성되면 Kubernetes는 다음 과정을 따릅니다:
1. Pod 생성: Job에 정의된 개수만큼 Pod를 실행.
2. Pod 실행: 작업을 수행하고 완료되면 종료.
3. Pod 재시도: 실패한 Pod가 있으면 재시도 (재시도 횟수 설정 가능).
4. Job 완료: 모든 Pod가 성공적으로 실행되면 Job이 종료됨.
📌 3. Job의 주요 설정
✅ (1) 기본적인 Job 예제
apiVersion: batch/v1
kind: Job
metadata:
name: example-job
spec:
template:
spec:
containers:
- name: job-container
image: busybox
command: ["echo", "Hello, Kubernetes!"]
restartPolicy: Never # 실패 시 다시 시작하지 않음
🛠 설명
• kind: Job → Kubernetes Job 리소스를 정의.
• restartPolicy: Never → Pod 실패 시 자동 재시작 안 함.
• command: ["echo", "Hello, Kubernetes!"] → 실행할 명령어.
✅ (2) 재시도 및 병렬 실행 설정
apiVersion: batch/v1
kind: Job
metadata:
name: retry-job
spec:
completions: 5 # 5개의 작업을 실행해야 Job 완료
parallelism: 2 # 동시에 2개의 Pod 실행
backoffLimit: 4 # 최대 4번 재시도
template:
spec:
containers:
- name: job-container
image: busybox
command: ["sh", "-c", "exit 1"] # 실패하도록 설정 (exit code 1)
restartPolicy: Never
🛠 설명
• completions: 5 → Job이 완료되려면 5개의 Pod가 성공해야 함.
• parallelism: 2 → 동시에 2개의 Pod가 실행됨.
• backoffLimit: 4 → 실패 시 4번까지 재시도함.
✅ (3) CronJob (스케줄링 Job)
Kubernetes에서 Job을 특정 시간마다 실행하고 싶다면 CronJob을 사용하면 된다.
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron-job
spec:
schedule: "*/5 * * * *" # 매 5분마다 실행
jobTemplate:
spec:
template:
spec:
containers:
- name: cron-container
image: busybox
command: ["echo", "Scheduled Job Running"]
restartPolicy: Never
🛠 설명
• schedule: "*/5 * * * *" → 매 5분마다 실행 (cron 형식).
• jobTemplate: → 실행할 Job 템플릿을 정의.
📌 4. Job 관련 주요 옵션
옵션 설명
option | description |
completions | 완료해야 할 작업 개수 |
parallelism | 동시에 실행할 Pod 개수 |
backoffLimit | 실패한 Pod의 재시도 횟수 |
activeDeadlineSeconds | Job 실행 제한 시간 (초 단위) |
ttlSecondsAfterFinished | 완료된 Job이 삭제되기까지의 시간 |
📌 5. Job 관리 명령어
# 모든 Job 확인
kubectl get jobs
# 특정 Job의 상태 확인
kubectl describe job <job-name>
# 실행 중인 Job의 Pod 확인
kubectl get pods --selector=job-name=<job-name>
# Job 삭제
kubectl delete job <job-name>
📌 6. Job 사용 사례
✅ 데이터 처리: 로그 분석, 데이터 변환 작업
✅ 백업 및 복구: 데이터베이스 백업, 스냅샷 생성
✅ ML 모델 학습: 한 번 실행 후 완료되는 AI 모델 훈련
✅ CI/CD 작업: 빌드, 테스트 수행 후 종료
📌 7. Job vs. CronJob vs. Deployment 차이점
리소스 용도 | 실행 방식 |
Job | 단발성 작업 한 번 실행 후 종료 |
CronJob | 주기적 작업 스케줄에 따라 반복 실행 |
Deployment | 지속 실행 서비스 지속적으로 실행 (웹 서버 등) |
✅ 정리
• Kubernetes Job은 일회성 작업을 실행하는 리소스.
• 작업이 완료되면 Pod가 자동으로 종료됨.
• parallelism, completions, backoffLimit 등으로 동작을 세밀하게 조정 가능.
• 주기적으로 실행하려면 CronJob을 사용.
• Deployment와 다르게 지속 실행되지 않고, 작업 완료 후 종료됨.
더 자세한 내용은 Kubernetes official document에서 찾아 보실 수 있습니다. 이렇게 Job을 활용 하게되면, 특정 작업을 자동화할 때 효율적으로 관리할 수 있습니다!