kubernetes & Docker 관련

[yongggg's] Kubernetes 에서 Job 이란?

Yonggg 2025. 2. 18. 14:45

이번 장에서는 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을 활용 하게되면, 특정 작업을 자동화할 때 효율적으로 관리할 수 있습니다!