[개발자 관점] 주요 Kubernetes 컨트롤러 종류 – 6. CronJob

21 sec read

🛠️ CronJob이란?

CronJob은 지정한 스케줄에 따라 Job을 생성하여 실행하는 컨트롤러입니다. 우리는 반복 주기만 설정해두면, CronJob이 정해진 시간이 될 때마다 새로운 Job 인스턴스를 자동으로 생성하여 실행해 줍니다.

핵심 개념: “정해진 시간마다 자동으로 실행되는 Job”

즉, CronJob은 스케줄 관리자이고, 실제 작업 수행은 내부적으로 생성되는 Job이 담당하는 구조입니다.

CronJob (스케줄 관리)
    (정해진 시간에 생성)
Job (단일 작업 실행 및 재시도)
    (실행)
Pod (실제 컨테이너 실행)

🧠 사용 사례

CronJob은 자동화된 운영 및 유지보수 작업에 매우 유용하게 사용됩니다.

  • 정기적인 백업: 매일 자정 데이터베이스 스냅샷 생성
  • 로그 정리 및 아카이빙: 매주 오래된 로그 파일 정리
  • 캐시 초기화: 매시간 특정 캐시 데이터 무효화
  • 리포트 생성 및 발송: 매일 아침 통계 리포트를 생성하여 이메일로 발송
  • 상태 점검 및 알림: 매분 시스템 상태를 점검하고 이상 시 알림 전송

🧪 CronJob YAML 예시

매 5분마다 “Hello from CronJob” 메시지를 출력하는 Job을 생성하는 CronJob 예시입니다.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello-cron
spec:
  # 이 부분이 핵심: CRON 스케줄 정의
  schedule: "*/5 * * * *"
  # 이 아래는 Job의 템플릿
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: hello
              image: busybox
              command: ["echo", "Hello from CronJob"]
          restartPolicy: OnFailure

📌 위 CronJob YAML의 포인트:

  • schedule: "*/5 * * * *": Cron 표현식으로, “매 5분마다” 작업을 실행하라고 정의합니다.
  • jobTemplate: CronJob이 정해진 시간이 되었을 때 생성할 Job의 명세서입니다. 이 템플릿의 내용은 우리가 이전에 배운 Job의 spec과 동일합니다.

🧮 schedule 필드 (CRON 문법)

CronJob의 핵심인 schedule 필드는 표준 CRON 문법을 따릅니다.

* * * * *
| | | | |
| | | | └─ 요일 (0-6, 일요일=0 또는 7)
| | | └─── 월 (1-12)
| | └───── 일 (1-31)
| └─────── 시 (0-23)
└───────── 분 (0-59)

📌 몇 가지 유용한 예시:

  • "0 0 * * *": 매일 자정 (0시 0분)
  • "0 */6 * * *": 6시간마다 (0시, 6시, 12시, 18시)
  • "30 9 * * 1": 매주 월요일 오전 9시 30분

⚙️ 주요 설정 옵션

CronJob의 동작을 세밀하게 제어할 수 있는 유용한 옵션들입니다.

  • startingDeadlineSeconds: 정해진 시간에 어떤 이유로든 Job이 시작되지 못했을 때, 이 시간(초)을 초과하면 해당 작업을 건너뛰고 실패 처리합니다. (예: 100)
  • concurrencyPolicy: 이전 작업이 아직 끝나지 않았을 때 다음 작업 시간이 되면 어떻게 할지 결정합니다.
    • Allow (기본값): 상관없이 새 Job을 실행합니다. (동시 실행 가능)
    • Forbid: 이전 Job이 끝나지 않았으면 새 Job을 실행하지 않고 건너뜁니다.
    • Replace: 실행 중인 이전 Job을 중단시키고 새 Job으로 대체합니다.
  • successfulJobsHistoryLimit: 성공한 Job 기록을 몇 개까지 보존할지 정합니다. (기본값: 3)
  • failedJobsHistoryLimit: 실패한 Job 기록을 몇 개까지 보존할지 정합니다. (기본값: 1)

히스토리 제한 설정은 오래된 Job과 Pod가 클러스터에 불필요하게 쌓이는 것을 방지하여 깔끔한 환경을 유지하는 데 중요합니다.

✅ 개발자 관점 요약

CronJob은 시간 기반으로 반복 실행이 필요한 작업을 위한 컨트롤러입니다.
반복 주기를 표준 CRON 문법으로 선언하여 스케줄을 관리합니다.
내부적으로 Job을 생성하여 작업을 수행하므로, Job의 안정적인 실행 및 재시도 기능을 그대로 활용할 수 있습니다.
정기적인 로그 정리, 데이터 백업, 통계 리포트 생성 등 자동화된 운영 작업에 매우 적합합니다.

쿠버네티스 시크릿 관리, 어떤 방법이 최선일까? 4가지 방식 장단점…

쿠버네티스에서 애플리케이션을 운영할 때, DB 접속 정보나 API 키 같은 민감한 정보, 즉 ‘시크릿(Secret)’을 어떻게 관리해야 할지는 모두의 공통된 고민입니다. 관리 방식은 보안, 운영...
eve
13 sec read

[MSA] Spring Cloud Gateway VS Apache APISIX : 단계별…

마이크로서비스 아키텍처(MSA)에서 API 게이트웨이는 시스템의 관문 역할을 하는 핵심 컴포넌트입니다. 수많은 Java 개발팀이 Spring 생태계와의 완벽한 통합성을 자랑하는 Spring Cloud Gateway를 선택해왔습니다. 그러나 시스템이...
eve
1 min read

[Kafka] 카프카의 심장: 토픽, 파티션, 프로듀서, 컨슈머 완벽 해부

Apache Kafka가 어떻게 대용량 데이터를 실시간으로, 그리고 안정적으로 처리할 수 있는지 궁금하신가요? 그 비밀은 Kafka를 구성하는 핵심 요소들의 유기적인 협력에 있습니다. Kafka는 마치 잘...
eve
1 min read