7.6 잡 (Job) & 크론잡 (CronJob): 배치 및 스케줄링 작업

지금까지 우리가 살펴본 디플로이먼트, 스테이트풀셋, 데몬셋과 같은 쿠버네티스 컨트롤러들은 주로 지속적으로 실행되는 서비스(long-running services)를 관리하는 데 초점을 맞추었습니다. 웹 서버, API 서버, 데이터베이스 등과 같이 항상 실행 상태를 유지하며 요청을 처리해야 하는 애플리케이션들이 그 대상이었죠. 하지만 실제 업무 환경에서는 특정 작업을 한 번만 실행하고 종료하거나, 정해진 시간에 주기적으로 반복 실행해야 하는 배치(batch) 작업이나 스케줄링된 작업들도 많이 필요합니다.

예를 들어, 대량의 데이터를 한 번에 처리하는 데이터 마이그레이션 작업, 주기적으로 백업을 수행하는 스크립트, 매일 밤 특정 시간에 리포트를 생성하는 프로그램 등이 이러한 배치 및 스케줄링 작업의 대표적인 예시입니다. 이러한 작업들은 웹 서비스처럼 항상 떠 있을 필요는 없으며, 작업이 성공적으로 완료되면 스스로 종료되어야 합니다. 만약 작업 도중에 실패한다면, 자동으로 재시도되어 결국에는 완료될 수 있도록 보장하는 기능도 중요합니다.

쿠버네티스는 이러한 비지속적(non-continuous) 작업을 효과적으로 관리하기 위해 잡(Job)과 크론잡(CronJob)이라는 두 가지 특별한 워크로드 API 오브젝트를 제공합니다.

  • 잡(Job): 하나 이상의 파드를 생성하여 특정 작업을 수행하고, 해당 작업이 성공적으로 완료될 때까지 파드의 실행을 보장하는 컨트롤러입니다. 잡은 일회성 작업을 실행하는 데 사용되며, 작업이 완료되면 더 이상 새로운 파드를 생성하지 않습니다.
  • 크론잡(CronJob): 마치 리눅스의 cron 유틸리티처럼, 정해진 스케줄에 따라 주기적으로 잡(Job)을 생성하여 실행하는 컨트롤러입니다. “매일 자정에 이 작업을 실행해줘” 또는 “매주 월요일 아침 9시에 저 작업을 실행해줘”와 같은 예약 실행 요구사항을 충족시켜줍니다.

이번 7.6장에서는 쿠버네티스에서 배치 및 스케줄링 작업을 다루는 핵심 도구인 잡과 크론잡에 대해 자세히 알아볼 것입니다.

  • 먼저 7.6.1 잡: 일회성 작업 실행에서는 잡이 어떻게 동작하는지, 그리고 작업의 성공적인 완료를 어떻게 보장하는지 살펴볼 것입니다. 특히, 잡이 생성하는 파드가 실패했을 때 어떻게 재시도하는지(backoffLimit), 여러 개의 파드를 병렬로 실행하여 작업을 더 빠르게 완료하는 방법(completions, parallelism 필드 활용) 등 잡의 핵심 기능과 설정을 배우게 됩니다.
  • 이어서 7.6.2 크론잡: 예약된 작업 실행에서는 크론잡이 어떻게 특정 시간에 맞춰 잡을 생성하고 실행하는지 그 메커니즘을 알아볼 것입니다. 리눅스 cron과 유사한 형식으로 스케줄을 정의하는 schedule 필드, 이전 작업이 아직 실행 중일 때 다음 스케줄이 도래하면 어떻게 처리할지를 결정하는 concurrencyPolicy, 그리고 성공/실패한 잡의 기록을 얼마나 보관할지를 설정하는 successfulJobsHistoryLimit와 failedJobsHistoryLimit 등 크론잡의 중요한 설정들을 탐구합니다.
  • 마지막으로 7.6.3 [실습] 간단한 배치 작업 및 주기적 실행 작업 생성에서는 직접 잡과 크론잡 YAML 파일을 작성하여 간단한 “Hello World” 출력 잡을 실행해보고, 매분마다 현재 시간을 출력하는 크론잡을 만들어 그 동작을 관찰할 것입니다. 이 실습을 통해 잡과 크론잡의 개념을 확실히 이해하고, 실제 업무에 어떻게 적용할 수 있을지에 대한 감을 잡으실 수 있을 겁니다.

잡과 크론잡은 쿠버네티스를 단순한 서비스 배포 플랫폼을 넘어, 다양한 종류의 연산 작업을 자동화하고 관리할 수 있는 강력한 워크로드 오케스트레이션 도구로 만들어주는 핵심 기능입니다. 이 장을 통해 쿠버네티스의 또 다른 유용한 측면을 발견하고, 클라우드 네이티브 환경에서 배치 및 스케줄링 작업을 더욱 효율적으로 관리하는 방법을 익히시길 바랍니다.