ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [yongggg's] Kubernetes 에서 Job 이란?
    kubernetes & Docker 관련 2025. 2. 18. 14:45

    이번 장에서는 Kubernetes에서 testing 시 이용하는 Job에 대해 설명 드리겠습니다.

    Job은 특정 작업(배치 작업, 데이터 처리 등)을 수행하고 종료하는 일회성 작업을 위해 사용됩니다.

    ** (vs. Pod) Pod은 일반적으로 웹 서버처럼 계속 동작하는 Application을 실행할 때, 사용됩니다.

    Kubernetes의 Job에 대해서 더 자세히 알아보겠습니다!

    1. Kubernetes Job

    Kubernetes Job일회성(One-time) 작업을 실행하는 데 사용되는 Kubernetes 리소스이며, Job의 역할은 Pod을 실행하고, 해당 작업이 완료되면 종료되도록 설계되었다. 주로 배치 작업(Batch Processing) 또는 데이터 처리 작업에서 활용된다.

    📌 1. Job의 특징

    일회성 실행: 지정된 작업이 완료되면 Pod가 종료됨.

    성공 조건: 모든 Pod가 정상적으로 실행되어 종료되면 Job이 완료됨.

    재시도 기능: 실패한 Pod는 자동으로 재시도할 수 있음.

    병렬 처리 지원: 여러 개의 Pod를 병렬로 실행할 수 있음.

    📌 2. Job 동작 방식

    Job이 생성되면 Kubernetes는 다음 과정을 따릅니다:

    1. Pod 생성: Job에 정의된 개수만큼 Pod를 실행.

    2. Pod 실행: 작업을 수행하고 완료되면 종료.

    3. Pod 재시도: 실패한 Pod가 있으면 재시도 (재시도 횟수 설정 가능).

    4. Job 완료: 모든 Pod가 성공적으로 실행되면 Job이 종료됨.

    📌 3. Job의 주요 설정

    ✅ (1) 기본적인 Job 예제

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: example-job
    spec:
      template:
        spec:
          containers:
          - name: job-container
            image: busybox
            command: ["echo", "Hello, Kubernetes!"]
          restartPolicy: Never  # 실패 시 다시 시작하지 않음

    🛠 설명

    kind: Job → Kubernetes Job 리소스를 정의.

    restartPolicy: Never → Pod 실패 시 자동 재시작 안 함.

    command: ["echo", "Hello, Kubernetes!"] → 실행할 명령어.

     

    ✅ (2) 재시도 및 병렬 실행 설정

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: retry-job
    spec:
      completions: 5   # 5개의 작업을 실행해야 Job 완료
      parallelism: 2   # 동시에 2개의 Pod 실행
      backoffLimit: 4  # 최대 4번 재시도
      template:
        spec:
          containers:
          - name: job-container
            image: busybox
            command: ["sh", "-c", "exit 1"]  # 실패하도록 설정 (exit code 1)
          restartPolicy: Never

    🛠 설명

    completions: 5 → Job이 완료되려면 5개의 Pod가 성공해야 함.

    parallelism: 2 → 동시에 2개의 Pod가 실행됨.

    backoffLimit: 4 → 실패 시 4번까지 재시도함.

     

    ✅ (3) CronJob (스케줄링 Job)

    Kubernetes에서 Job을 특정 시간마다 실행하고 싶다면 CronJob을 사용하면 된다.

    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: cron-job
    spec:
      schedule: "*/5 * * * *"  # 매 5분마다 실행
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: cron-container
                image: busybox
                command: ["echo", "Scheduled Job Running"]
              restartPolicy: Never

    🛠 설명

    schedule: "*/5 * * * *" → 매 5분마다 실행 (cron 형식).

    jobTemplate: → 실행할 Job 템플릿을 정의.

    📌 4. Job 관련 주요 옵션

    옵션 설명

    option description
    completions 완료해야 할 작업 개수
    parallelism 동시에 실행할 Pod 개수
    backoffLimit 실패한 Pod의 재시도 횟수
    activeDeadlineSeconds Job 실행 제한 시간 (초 단위)
    ttlSecondsAfterFinished 완료된 Job이 삭제되기까지의 시간

    📌 5. Job 관리 명령어

    # 모든 Job 확인
    kubectl get jobs
    
    # 특정 Job의 상태 확인
    kubectl describe job <job-name>
    
    # 실행 중인 Job의 Pod 확인
    kubectl get pods --selector=job-name=<job-name>
    
    # Job 삭제
    kubectl delete job <job-name>

    📌 6. Job 사용 사례

    데이터 처리: 로그 분석, 데이터 변환 작업

    백업 및 복구: 데이터베이스 백업, 스냅샷 생성

    ML 모델 학습: 한 번 실행 후 완료되는 AI 모델 훈련

    CI/CD 작업: 빌드, 테스트 수행 후 종료

    📌 7. Job vs. CronJob vs. Deployment 차이점

    리소스 용도  실행 방식
    Job 단발성 작업 한 번 실행 후 종료
    CronJob 주기적 작업 스케줄에 따라 반복 실행
    Deployment 지속 실행 서비스 지속적으로 실행 (웹 서버 등)

     

    ✅ 정리

    Kubernetes Job일회성 작업을 실행하는 리소스.

    작업이 완료되면 Pod가 자동으로 종료됨.

    parallelism, completions, backoffLimit 등으로 동작을 세밀하게 조정 가능.

    주기적으로 실행하려면 CronJob을 사용.

    Deployment와 다르게 지속 실행되지 않고, 작업 완료 후 종료됨.

     

    더 자세한 내용은 Kubernetes official document에서 찾아 보실 수 있습니다. 이렇게 Job을 활용 하게되면, 특정 작업을 자동화할 때 효율적으로 관리할 수 있습니다!

Designed by Tistory.