쿠버네티스/이론

쿠버네티스 Job 리소스 란?

황동리 2024. 10. 31. 16:28
반응형

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이 실행하도록 되어있습니다.

 

이상 입니다.

반응형