쿠버네티스에서는 반복적으로 실행되는 배치 작업(예: 로그 정리, 데이터 백업, 리포트 생성 등)을 자동화하는 것이 중요합니다.
이를 위해 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 상태를 실시간으로 모니터링하고, 실행 로그를 확인하여 장애 발생 시 신속히 대응 가능