개발 창고/Server

Kubernetes Job 완전 정복

Royzero 2025. 8. 5. 22:00
반응형

25차시: Kubernetes Job 완전 정복

일회성 작업과 배치 작업을 컨테이너로 안전하게 실행하는 방법


목차

  1. Kubernetes Job이란?
  2. 왜 Job이 필요한가?
  3. Job의 주요 특징
  4. Job vs CronJob vs Deployment
  5. 기본 YAML 구성 예제
  6. Job 실행 및 모니터링 방법
  7. 실패 처리 및 재시도 전략
  8. 병렬 처리(Parallelism)와 Completions
  9. 실제 사용 시나리오
  10. 운영 시 주의사항
  11. 자주 묻는 질문 (FAQ)
  12. 요약 정리

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 설정 고려 필요

반응형