Job 이란?
작업을 완료한 후에, 종료되는 태스크를 실행하려는 경우가 있을 수 있습니다.
이럴 때 사용되는 것이 Job 리소스 입니다.
Job은 파드의 컨테이너 내부에서 실행 중인 프로세스가 정상적으로 완료가 되면, 컨테이너를 다시 시작하지 않는 파드로 실행할 수 있습니다.
Job은 레플리카셋과 동일하게 파드가 동작 중인 노드에서 문제가 생기면, 다른 노드로 스케줄링이 됩니다.
ex)

그리고 컨테이너 내의 프로세스에서 장애가 발생했을 경우에도 Job에서 컨테이너 재시작을 할지 말지 정책도 정해 줄 수있습니다.
이제 실제 예시를 한번 보겠습니다.
Job 실습
Job 매니페스트를 확인해보면 아래와 같습니다.
apiVersion: batch/v1
kind: Job
metadata:
name: batch-job
spec:
template:
metadata:
labels:
app: batch-job
spec:
restartPolicy: OnFailure
containers:
- name: main
image: luksa/batch-job
이미지는 busybox를 기본으로 120초간 sleep 명령을 호출하는 이미지 입니다.
kubectl 명령어를 사용해서 yaml 파일을 실행해줍니다.
# kubectl apply -f batch-job.yaml
그리고 확인 파드가 생성되었는지 확인 해봅니다.
# kubectl get pods

그리고 2분 후에 log, pod를 확인해보면 아래와 같은 결과가 나옵니다.
# kubectl logs job batch-job

# kubectl get pods

명령어가 실행이 된 후 파드의 갯수가 0개로 줄어든 것을 확인 할 수 있습니다.
그리고 Job을 삭제를 하면 파드 자체가 삭제되는 것을 확인 할 수 있습니다.

Job 순차 작업
Job 스펙에 completions을 정의를 해주면 Job의 파드를 몇 번 실행 할 지도 정해줄 수 있습니다.
위의 yaml 파일의 내용에서 completions을 추가 해주면 됩니다.
apiVersion: batch/v1
kind: Job
metadata:
name: batch-job
spec:
completions: 5 # 추가
template:
metadata:
labels:
app: batch-job
spec:
restartPolicy: OnFailure
containers:
- name: main
image: luksa/batch-job
작성한 yaml 파일로 Job을 생성해보면 파드가 순차적으로 1개씩 늘어나는 것을 확인 할 수 있습니다.

Job 병렬 작업
Job을 병렬로 작업하기 위해서는 Job 스펙에 parallelism을 정의 해주면 됩니다.
위의 yaml 파일의 내용에서 parallelism을 추가 해주면 됩니다.
apiVersion: batch/v1
kind: Job
metadata:
name: batch-job
spec:
completions: 5
parallelism: 2
template:
metadata:
labels:
app: batch-job
spec:
restartPolicy: OnFailure
containers:
- name: main
image: luksa/batch-job
yaml 파일의 내용을 보면 Job은 동시에 2개씩 총 5개 실행되도록 되어있습니다.

Cron Job
크론 잡이란?
리눅스에 있는 crontab과 비슷한 형식으로 시간을 정해놓고 Job을 실행하도록 하는 것 입니다.
크론 잡을 사용하기 위해서는 아래와 같습니다.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: batch-job-every-fifteen-minutes
spec:
schedule: "0,15,30,45 * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: periodic-batch-job
spec:
restartPolicy: OnFailure
containers:
- name: main
image: luksa/batch-job
CronJob의 스펙에 schedule을 정의해주면 되는데,
왼쪽에서 오른쪽으로
- 분
- 시
- 일
- 월
- 요일
과 같이 정의 됩니다.
yaml 파일에 작성된 내용으로 보면
매일 0, 15, 30, 45분에 Job이 실행하도록 되어있습니다.
이상 입니다.
'쿠버네티스 > 이론' 카테고리의 다른 글
쿠버네티스 Ingress 란? (0) | 2024.11.04 |
---|---|
쿠버네티스 Service 란? (0) | 2024.11.01 |
쿠버네티스 라이브니스 프로브, 데몬셋 이란? (0) | 2024.07.18 |
쿠버네티스 클러스터 구조 알아보기 (0) | 2024.04.10 |
Kubernetes란? (0) | 2024.01.07 |