Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Medium Level #15] Job & CronJob을 활용한 배치 작업 자동화 및 장애 대응

ygtoken 2025. 3. 17. 12:02
728x90

 

쿠버네티스에서는 반복적으로 실행되는 배치 작업(예: 로그 정리, 데이터 백업, 리포트 생성 등)을 자동화하는 것이 중요합니다.

이를 위해 Job과 CronJob을 활용하여 일회성 및 주기적인 배치 작업을 실행하는 방법과 장애 발생 시 복구 전략을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. Job을 사용하여 일회성 배치 작업 실행 및 장애 발생 시 재시도 설정

2. CronJob을 활용하여 주기적인 작업 자동화 및 실패한 작업 복구 전략

3. kubectl을 활용한 Job 및 CronJob 상태 모니터링 및 로그 분석 방법

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ Job을 사용하여 일회성 배치 작업 실행 및 장애 발생 시 재시도 설정

 

❓ 문제 상황

 

운영팀에서 일회성 데이터 백업 작업을 실행해야 하며, 작업이 실패할 경우 자동으로 재시도되도록 설정해야 합니다.

이를 위해 Job을 활용하여 백업 스크립트를 실행하고, 실패한 경우 일정 횟수만큼 재시도하도록 구성해야 합니다.

Job 이름: backup-job

실행할 명령어: tar -czf /backup/data.tar.gz /data

최대 재시도 횟수: 3회

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Job을 생성하여 데이터 백업 작업을 실행하도록 설정합니다.

 

2. backoffLimit을 설정하여 작업이 실패했을 경우 자동으로 재시도하도록 구성합니다.

 


✅ 정답 Manifest (Job 설정)

apiVersion: batch/v1
kind: Job
metadata:
  name: backup-job
spec:
  template:
    spec:
      containers:
      - name: backup
        image: alpine
        command: ["sh", "-c", "tar -czf /backup/data.tar.gz /data"]
        volumeMounts:
        - name: backup-volume
          mountPath: /backup
      restartPolicy: Never
      volumes:
      - name: backup-volume
        emptyDir: {}
  backoffLimit: 3  # 최대 3번 재시도

이제 Job이 실행될 때, 실패하면 최대 3번까지 재시도됨

 


📌 적용 후 예상 결과 값

 

1. Job 실행 상태 확인

kubectl get jobs

 

💡 예상 출력 값

NAME          COMPLETIONS   DURATION   AGE
backup-job    1/1           5s         1m

 

2. Job 실행 로그 확인

kubectl logs job/backup-job

 

💡 예상 출력 값

tar: Removing leading `/' from member names

데이터 백업 Job이 정상적으로 실행되고, 실패 시 자동으로 재시도됨

 


2️⃣ CronJob을 활용하여 주기적인 작업 자동화 및 실패한 작업 복구 전략

 

❓ 문제 상황

 

운영팀에서 매일 자정마다 로그 파일을 정리하는 작업을 자동으로 실행해야 합니다.

이를 위해 CronJob을 사용하여 스케줄링하고, 장애 발생 시 일정 횟수 재시도하도록 설정해야 합니다.

CronJob 이름: log-cleanup

실행 시간: *매일 자정 (0 0 * * )

실패 시 재시도 횟수: 5회

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. CronJob을 생성하여 매일 자정마다 로그 정리 작업을 자동으로 실행합니다.

 

2. jobTemplate 내에 backoffLimit을 설정하여 실패한 경우 자동 재시도합니다.

 


✅ 정답 Manifest (CronJob 설정)

apiVersion: batch/v1
kind: CronJob
metadata:
  name: log-cleanup
spec:
  schedule: "0 0 * * *"  # 매일 자정 실행
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cleanup
            image: busybox
            command: ["sh", "-c", "rm -rf /var/log/*.log"]
          restartPolicy: Never
      backoffLimit: 5  # 최대 5번 재시도

이제 CronJob이 매일 자정마다 실행되며, 실패하면 최대 5번까지 재시도됨

 


📌 적용 후 예상 결과 값

 

1. CronJob 실행 상태 확인

kubectl get cronjob

 

💡 예상 출력 값

NAME           SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
log-cleanup    0 0 * * *  False     0        10h             1d

 

2. 최근 실행된 Job 목록 확인

kubectl get jobs

 

💡 예상 출력 값

NAME                  COMPLETIONS   DURATION   AGE
log-cleanup-2789123   1/1           3s         5m

CronJob이 설정된 일정에 맞춰 실행되고 있음

 


3️⃣ kubectl을 활용한 Job 및 CronJob 상태 모니터링 및 로그 분석 방법

 

❓ 문제 상황

 

운영팀에서 Job 및 CronJob이 정상적으로 실행되고 있는지 모니터링하고, 실패한 Job이 있는 경우 즉시 확인하여 복구해야 합니다.

kubectl 명령어를 활용하여 Job 및 CronJob 실행 상태를 점검하고, 실행 로그를 분석해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. kubectl get jobs 및 get cronjob 명령어를 사용하여 실행 상태를 확인합니다.

 

2. kubectl logs 명령어를 사용하여 최근 실행된 Job의 로그를 분석합니다.

 


✅ Job 및 CronJob 상태 확인 명령어

 

🔹 현재 실행된 Job 목록 조회

kubectl get jobs

 

💡 예상 출력 값

NAME                  COMPLETIONS   DURATION   AGE
log-cleanup-2789123   1/1           3s         5m
backup-job            1/1           5s         1m

 

🔹 특정 Job의 실행 로그 확인

kubectl logs job/backup-job

 

💡 예상 출력 값

tar: Removing leading `/' from member names

 

🔹 최근 CronJob 실행 상태 확인

kubectl get cronjob

 

💡 예상 출력 값

NAME           SCHEDULE    SUSPEND   ACTIVE   LAST SCHEDULE   AGE
log-cleanup    0 0 * * *  False     0        10h             1d

Job 및 CronJob 상태를 실시간으로 모니터링하고, 실행 로그를 확인하여 장애 발생 시 신속히 대응 가능

728x90