안녕하세요, 쿠버네티스 엔지니어 여러분! 🚀 우리가 평소에 다루는 대부분의 애플리케이션은 웹 서버처럼 영원히 실행되는(long-running) 서비스들입니다. 하지만 모든 작업이 그런 것은 아니죠. "데이터베이스 스키마를 딱 한 번만 최신 버전으로 마이그레이션해줘" 라거나 "매일 아침 9시에 어제 자 리포트를 생성해서 이메일로 보내줘" 와 같은 작업도 분명히 필요합니다.
이러한 배치(Batch) 및 스케줄링 작업을 위해 쿠버네티스는 아주 훌륭한 두 가지 도구를 제공합니다. 바로 Job(잡)과 CronJob(크론잡)입니다. 오늘은 이 두 리소스가 무엇이고, 언제 어떻게 사용해야 하는지 자세히 알아보겠습니다!

1. Job: 딱 한 번의 임무를 완수하라! 🎯
Job은 한 번 실행되고 성공적으로 완료되면 종료되는 작업을 정의하는 리소스입니다. 웹 서버처럼 계속 살아있는 것이 아니라, 주어진 임무를 완수하는 것이 목적인 파드(Pod)를 관리합니다.
- 역할: 하나 이상의 파드를 생성하여, 지정된 수의 파드가 성공적으로 완료될 때까지 실행을 보장합니다.
- 핵심 동작:
- Job은 파드를 생성하고, 해당 파드 내의 컨테이너가 성공적으로 종료(Exit Code 0)되기를 기다립니다.
- 만약 파드가 노드 장애나 컨테이너 에러 등으로 실패하면, Job 컨트롤러는 restartPolicy에 따라 파드를 다시 생성하여 작업을 재시도합니다. (OnFailure 또는 Never만 사용 가능)
- 설정된 완료 횟수(completions)에 도달하면 Job은 성공적으로 종료됩니다.
- 주요 사용 사례:
- 데이터베이스 스키마 마이그레이션
- 초기 데이터 설정 또는 대용량 데이터 처리
- 보고서 생성 또는 데이터 백업 (일회성)
- 비유: Job은 특수 요원에게 주어진 '일회성 임무' 🕵️♂️와 같습니다. 목표(작업)를 완수하면 조용히 사라지는 것이죠. 임무 수행 중 문제가 생기면, 본부(Job 컨트롤러)에서 다른 요원(새 파드)을 투입하여 임무를 완수시킵니다.
YAML 예시:
Pi 값 계산을 1000자리까지 수행하고 종료되는 간단한 Job 예시입니다.
apiVersion: batch/v1
kind: Job
metadata:
name: pi-calculation
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(1000)"]
restartPolicy: OnFailure # 실패 시에만 파드를 다시 생성
backoffLimit: 4 # 최대 4번까지 재시도
2. CronJob: 정해진 시간에 임무를 반복하라! 🗓️
CronJob은 이름에서 알 수 있듯이, Job을 스케줄에 따라 주기적으로 실행해주는 리소스입니다. 리눅스의 crontab과 거의 동일한 개념을 쿠버네티스 네이티브 방식으로 구현한 것입니다.
- 역할: 지정된 크론(cron) 스케줄에 따라 Job 리소스를 자동으로 생성합니다.
- 핵심 동작:
- CronJob 컨트롤러는 현재 시간을 계속 확인하다가, schedule 필드에 정의된 시간과 일치하면 해당 CronJob의 템플릿을 사용하여 새로운 Job을 생성합니다.
- 생성된 Job은 위에서 설명한 대로 자신의 임무를 수행하고 종료됩니다.
- CronJob은 이전 실행 기록(성공/실패한 Job)을 정해진 수만큼 보관하여 히스토리 추적을 돕습니다.
- 주요 사용 사례:
- 주기적인 데이터 백업
- 매일, 매주, 매월 보고서 생성 및 발송
- 캐시 비우기, 데이터 동기화 등 정기적인 유지보수 작업
- 비유: CronJob은 매일 아침 같은 시간에 울리는 '알람 시계' ⏰와 같습니다. 알람이 울릴 때마다(스케줄 도달), 특정 행동(Job 실행)을 하도록 만드는 것이죠.
YAML 예시:
매 분마다 "Hello from Kubernetes cluster"를 출력하는 CronJob 예시입니다.
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cronjob
spec:
schedule: "*/1 * * * *" # 매 1분마다 실행 (Cron 스케줄 형식)
jobTemplate: # 이 템플릿을 사용하여 Job을 생성
spec:
template:
spec:
containers:
- name: hello
image: busybox:1.28
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo "Hello from Kubernetes cluster"
restartPolicy: OnFailure
successfulJobsHistoryLimit: 3 # 성공한 Job 기록은 3개까지 보관
failedJobsHistoryLimit: 1 # 실패한 Job 기록은 1개까지 보관
🎉 결론: 자동화의 날개를 달아주는 Job과 CronJob
Job과 CronJob은 쿠버네티스 환경에서 수동으로 처리해야 했던 많은 일회성 및 반복 작업을 자동화하여 운영 효율성을 극대화해주는 강력한 도구입니다.
- 딱 한 번만 실행하고 끝낼 작업이 필요하다면 Job을,
- 정해진 스케줄에 따라 작업을 반복해야 한다면 CronJob을 사용하세요.
이 두 리소스를 잘 활용하여 단순 반복 업무에서 벗어나 더 창의적인 일에 집중하는 스마트한 쿠버네티스 전문가가 되시길 바랍니다!
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| 👮♂️ 내 컨테이너의 경호원! 쿠버네티스 SecurityContext 기초 다지기 (0) | 2025.09.03 |
|---|---|
| 👯♀️ 파드, 혼자가 아닌 둘이서! 멀티 컨테이너 파드 패턴 완전 정복 (Sidecar & Init Container) (0) | 2025.09.03 |
| 🏨 호텔 프론트처럼 똑똑하게! 쿠버네티스 Ingress로 트래픽 관리하기 (0) | 2025.09.03 |
| 📮 내 Pod는 어디있을까? 쿠버네티스 Service로 안정적으로 연결하기 (0) | 2025.09.03 |
| 🕵️♂️ 내 컨테이너에 무슨 일이? 쿠버네티스 로깅 & 디버깅 삼대장 완전 정복! (0) | 2025.09.03 |