본문 바로가기
쿠버네티스

[쿠버네티스] Job, CronJob 이란?

by woo0doo 2025. 4. 2.

Job과 CronJob에 대해 설명하기 전에 쿠버네티스의 컨트롤러의 기능과 종류는 다음과 같습니다.


쿠버네티스의 컨트롤러의 기능

  • Pod의 개수를 보장

 

쿠버네티스 컨트롤러 종류

 

이번 글에서는 이중에서 Job과 CronJob에 대해 다루어보려고 합니다.


Job이란?

job은 쿠버네티스 ①pod를 이용해서 ②일회성 또는 정기적인 작업을 실행할 때 사용합니다. pod와 다른점은 종료되는 것을 기대하고 작업 실행결과를 알려줍니다.

  • 목적: Job은 반복 실행할 필요가 없는 단발성 작업이나 배치 작업을 수행할 때 사용됩니다.
  • 동작 방식: Job은 하나 이상의 파드를 생성하여 작업을 수행한 후, 작업이 성공적으로 완료되면 종료됩니다. 만약 작업이 실패하면, Job 컨트롤러는 파드를 재시작하거나 새로운 파드를 생성하여 작업을 다시 시도합니다.

 

주요 특징

  • 신뢰성: Job은 설정한 성공 조건(예: 파드의 성공적인 완료 횟수)을 만족할 때까지 작업을 반복 실행합니다.
  • 재시도 메커니즘: 파드가 실패할 경우, Job 컨트롤러는 자동으로 실패한 작업을 재시도하여 작업 완료를 보장합니다.
  • 일회성 작업 관리: 주기적인 실행이 필요하지 않은 데이터 처리, 백업 작업, 초기 데이터 로딩 등 일회성 작업을 관리하는 데 적합합니다.
  • 확장성: 필요한 경우 동시에 여러 파드를 생성하여 작업을 병렬로 수행할 수 있습니다.

 

사용 예

  • 데이터 처리: 대용량 데이터를 일괄 처리하거나, 데이터 마이그레이션 작업을 실행할 때.
  • 백업 작업: 데이터베이스나 파일 시스템의 백업 작업을 주기적이 아닌 특정 시점에 실행할 때.
  • 테스트/검증: 특정 테스트 스크립트를 실행하여 환경 구성을 확인하거나 결과를 검증할 때.

 

예제

apiVersion: batch/v1
kind: Job
metadata:
  name: example-job
spec:
  template:
    spec:
      containers:
      - name: example
        image: busybox
        command: ["echo", "Hello Kubernetes!"]
      restartPolicy: Never
  backoffLimit: 4

 

  • restartPolicy: 작업이 실패했을 때 재시작할 정책을 정의합니다. 일반적으로 Job에서는 Never 또는 OnFailure를 사용합니다.
    • Never : 컨테이너가 실패하더라도 재시작하지 않습니다.
    • OnFailure : 컨테이너가 오류로 종료되면 재시작합니다.
  • backoffLimit: 파드가 실패했을 때 재시도할 최대 횟수를 설정합니다.

CronJob이란?

쿠버네티스 CronJob은 정해진 스케줄에 따라 반복적으로 Job을 실행하도록 관리하는 리소스입니다. Cron 표현식을 사용해 실행 시간을 지정할 수 있으며, 주기적인 배치 작업이나 일정을 가진 작업을 처리하는 데 매우 유용합니다.

 

특징

 

  • 스케줄 기반 실행: CronJob은 지정한 스케줄(예: 매일, 매주, 매월 등)에 따라 Job을 자동으로 생성하고 실행합니다.
  • Job 관리: CronJob이 생성하는 각 Job은 일반 Job과 동일한 방식으로 파드를 생성하여 작업을 수행합니다.
  • 실행 정책: 실패한 Job의 재시작 정책, 동시 실행 제한(concurrencyPolicy), 실행 시작의 기한(startingDeadlineSeconds) 등 다양한 옵션을 통해 작업의 실행 방식을 세밀하게 제어할 수 있습니다.
  • 리소스 관리: 주기적으로 반복되는 작업을 관리하면서, 과거 실행 기록을 보관하거나 삭제하는 등의 리소스 관리를 할 수 있습니다.

 

예제

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: example-cronjob
spec:
  schedule: "0 0 * * *"  # 매일 자정에 실행
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: example
            image: busybox
            command: ["echo", "Hello from CronJob!"]
          restartPolicy: OnFailure
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1

 

  • schedule: "0 0 * * *" 은 매일 자정에 CronJob이 실행됨을 의미합니다.
  • jobTemplate: CronJob이 생성할 Job의 템플릿을 정의합니다.
  • concurrencyPolicy: 이전 작업이 아직 실행 중일 때 새로운 작업을 금지합니다.
  • 히스토리 제한: 실행 기록을 관리하여 리소스를 효율적으로 사용합니다.

주요 옵션

  • schedule: Cron 표현식을 사용하여 작업이 실행될 스케줄을 지정합니다.
  • concurrencyPolicy: 동시에 실행되는 Job의 수를 제어합니다. 예를 들어, Forbid로 설정하면 이전 작업이 끝나지 않았을 때 새로운 Job이 실행되지 않습니다.
  • startingDeadlineSeconds: 스케줄 시간 이후 얼마 동안 Job을 시작할 수 있는지의 기한을 설정합니다.
  • successfulJobsHistoryLimit / failedJobsHistoryLimit: 성공/실패한 Job의 실행 기록을 보관할 최대 개수를 지정하여 클러스터 내 불필요한 기록 축적을 방지할 수 있습니다.

 


Job과 CronJob의 차이점

  • Job: 단발성 작업 실행을 위해 설계되어, 한 번 실행 후 종료됩니다.
  • CronJob: 지정된 스케줄에 따라 주기적으로 작업을 실행하도록 설계되어 있습니다. 예를 들어, 매일 자정에 실행되는 작업 등을 설정할 때 사용합니다.