-
[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을 활용 하게되면, 특정 작업을 자동화할 때 효율적으로 관리할 수 있습니다!
'kubernetes & Docker 관련' 카테고리의 다른 글
[yongggg's] Kubernetes(쿠버네티스) 생성 및 배포 테스트 (6) 2025.07.25 [yongggg's] Kubernetes 개념 (Docker 와의 비교) (0) 2025.02.18 [yongggg's] docker images 서버에서 로컬(서버) 옮기기 (0) 2025.02.14 [yongggg's] 서버 docker container 내의 0.0.0.0 바인딩 후, 로컬 접속 에러 (5) 2025.01.10 [yongggg's] port 안뚫린 docker container에 ssh 연결하기 (ssh -> server -> docker container) (1) 2024.03.07