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

18 sec read

🤔 Job이란?

Job은 하나 이상의 Pod를 실행하여 주어진 작업이 성공적으로 완료될 때까지 실행하고, 작업이 모두 끝나면 더 이상 새로운 Pod를 생성하지 않는 컨트롤러입니다.

핵심 개념: “단 한 번 실행되어 성공하면 끝나는 작업”을 보장

Deployment가 24시간 상주하는 매장 직원이라면, Job은 특정 임무를 완수하고 퇴근하는 프로젝트 계약직과 같습니다. 임무가 성공적으로 끝나면 그걸로 끝입니다.

🔁 Job의 특징

Job은 단순히 Pod를 한번 실행하고 마는 것 이상의 안정성을 제공합니다.

  • 성공 보장 및 재시도: 만약 실행된 Pod가 노드 문제나 일시적인 오류로 실패하더라도, Job은 작업이 성공할 때까지 자동으로 Pod를 다시 생성하여 재시도합니다. (재시도 횟수는 설정 가능)
  • 병렬 처리: 여러 개의 작업을 동시에, 혹은 순차적으로 실행할 수 있습니다. 예를 들어 100개의 파일을 변환하는 작업을 10개씩 동시에 처리하도록 설정할 수 있습니다.

🧪 Job YAML 예시

“Hello from Job”이라는 메시지를 한 번 출력하고 종료되는 가장 간단한 Job의 YAML 예시입니다.

apiVersion: batch/v1
kind: Job
metadata:
  name: hello-job
spec:
  template:
    spec:
      containers:
        - name: hello
          image: busybox
          command: ["echo", "Hello from Job"]
      restartPolicy: OnFailure # 또는 Never

📌 위 Job YAML의 포인트:

  • apiVersion: batch/v1: Job은 앱이 아닌 배치 작업이므로 apps/v1이 아닌 batch/v1을 사용합니다.
  • command: 컨테이너가 실행할 명확한 명령어를 지정합니다. 이 명령이 성공적으로 끝나면(exit code 0) Job도 성공으로 간주됩니다.
  • restartPolicy: OnFailure 또는 Never로 설정하는 것이 일반적입니다. Job 컨트롤러 자체가 실패 시 새로운 Pod를 생성하여 재시도하므로, 컨테이너 자체의 재시작 정책(restartPolicy: Always)은 Job의 로직과 충돌할 수 있습니다.

⚙️ 주요 설정 옵션

Job의 동작을 더 정교하게 제어할 수 있는 핵심 옵션들입니다.

  • completions: 성공적으로 완료되어야 하는 총 작업의 수입니다. 이 수에 도달하면 Job은 종료됩니다.
  • parallelism: 동시에 실행할 수 있는 최대 Pod의 수입니다.
  • backoffLimit: 작업이 실패했을 때 재시도할 최대 횟수입니다. 이 횟수를 초과하면 Job은 최종 실패 처리됩니다.

예시: 5개의 작업을 최대 2개씩 병렬로 실행 (실패 시 3번까지 재시도)

spec:
  completions: 5
  parallelism: 2
  backoffLimit: 3

이 설정은 “총 5개의 성공이 필요해. 동시에 2개까지 실행하고, 만약 하나가 실패하면 3번까지 봐줄게”라는 의미입니다.

✅ 개발자 관점 요약

Job은 데이터 마이그레이션이나 배치 처리 같은 단발성 작업을 안전하게 실행할 수 있도록 도와주는 컨트롤러입니다.
지정한 작업이 성공할 때까지 재시도하며, 모든 작업이 완료된 후에는 더 이상 리소스를 사용하지 않고 정지됩니다.
CI/CD 파이프라인의 일부로 테스트나 빌드 스크립트를 실행하는 데 매우 유용합니다.
만약 이 작업을 주기적으로, 반복적으로 실행해야 한다면? 그때는 CronJob을 사용해야 합니다.

쿠버네티스 시크릿 관리, 어떤 방법이 최선일까? 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