Kubernetes/Kubernetes Advanced

📌 [Job 심화편 #6] Job 리소스의 컨트롤러 상태 분석: 완료되지 않은 Job의 정리 기준

ygtoken 2025. 3. 25. 16:03
728x90

 

1️⃣ 개요

 

Kubernetes에서 Job 리소스는 작업이 완료되면 Completed, 실패하면 Failed 상태로 전환됩니다.

그러나 다음과 같은 경우에는 Job이 계속 남아있는 상태로 클러스터 자원을 차지할 수 있습니다:

실패했지만 backoffLimit을 넘기지 않음

완료되었으나 TTL이 설정되지 않음

외부 시스템과 연동이 되지 않아 상태 처리가 누락됨

 

이 글에서는 Job 컨트롤러가 Job을 어떻게 관리하고,

불완전한 Job 리소스를 안전하게 정리하는 방법을 소개합니다.

 


2️⃣ Job의 상태 흐름 요약

[Job 생성]
  ↓
[Pod 실행]
  ↓
[성공] → Job 상태: Completed
[실패] → 재시도 → backoffLimit 초과 → Job 상태: Failed

 

상태 의미
Active 현재 실행 중인 Pod이 존재
Succeeded 성공적으로 완료된 Pod 수
Failed 실패한 Pod 수 (재시도 포함)
Conditions 완료 여부 (Complete, Failed 등) 이벤트 발생 여부

 

 


3️⃣ 상태 확인 명령어

kubectl get jobs
kubectl describe job <job-name>

 

출력 예시:

Name         Active   Succeeded   Failed   Completions   Duration   Age
batch-test   0        1           0        1             25s        3m

Active = 0 + Succeeded = 1 → Job 완료됨

Failed > 0 + backoffLimit 초과 → Job 실패 상태

 


4️⃣ Job이 계속 남아있는 경우

원인 해결 방법
TTL 설정 없음 ttlSecondsAfterFinished 값 설정
Job 상태가 Active로 유지됨 Pod이 비정상 종료되었거나 컨트롤러 미갱신
외부 시스템 연동 실패 상태 보고 누락 → 수동 정리 필요

 

 


5️⃣ Job 완료 후 자동 정리 설정 (TTL 컨트롤러)

apiVersion: batch/v1
kind: Job
metadata:
  name: ephemeral-job
spec:
  ttlSecondsAfterFinished: 300        # 완료 후 300초(5분) 뒤 자동 삭제
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: short-task
          image: busybox
          command:
            - sh
            - -c
            - echo "🧼 종료 후 자동 정리"

📌 설명

작업이 완료되면 TTL 컨트롤러가 지정한 시간 이후에 Job 리소스를 삭제합니다.

클러스터 내 오래된 Job이 쌓이는 것을 방지합니다.

 


6️⃣ Job 정리 정책 전략

목적 설정 방법
일정 시간 후 자동 삭제 ttlSecondsAfterFinished 설정
강제로 삭제 kubectl delete job <name> 사용
Pod만 먼저 삭제 --cascade=orphan 옵션 사용 가능
로그 수집 후 삭제 로그 수집기와 연계하여 완료 후 삭제 트리거 설정

 


7️⃣ 수동으로 오래된 Job 확인 스크립트 예시

kubectl get jobs -o json | jq '.items[] | select(.status.completionTime != null) | {name: .metadata.name, completed: .status.completionTime}'

📌 이 스크립트를 통해 완료된 Job 목록과 완료 시간을 추출하여, 정리 여부를 결정할 수 있습니다.

 


🔥 8️⃣ 결론

 

✔ Job은 완료되거나 실패해도 리소스로 계속 남을 수 있기 때문에, 명시적인 정리 설정이 필요합니다.

ttlSecondsAfterFinished를 설정하면 일정 시간 후 Job을 자동으로 정리할 수 있습니다.

✔ Job의 상태 흐름을 이해하고, 불완전하거나 오래된 Job을 수동/자동으로 관리하는 전략이 중요합니다.

 

 

728x90