본문 바로가기
Kubernetes(쿠버네티스)

[Kubernetes] Ch2. 워크로드 API 카테고리 - (4) Job, CronJob

by 잭피 2022. 11. 26.

Job (잡)

Jobs

잡은 컨테이너를 사용하여 한 번만 실행되는 리소스다

N개의 병렬로 실행하면서 지정한 횟수의 컨테이너 실행(정상종료)를 보장하는 리소스다

잡과 레플리카셋의 차이점?

가장 큰 차이점은 기동 중인 파드가 정지되는 것을 전제로 만들어졌는지다

기본적으로 레플리카셋 정지는 예상치 못한 에러다

반면 잡의 경우는 파드의 정지가 정상 종료되는 작업에 적합하다

ex) 파일 업로드, 배치처리

잡 생성

apiVersion: batch/v1
kind: Job
metadata:
  name: sample-job
spec:
  completions: 1
  parallelism: 1
  backoffLimit: 10
  template:
    spec:
      containers:
      - image: amsy810/tools:v2.06
        name: tools-container
        command: ["sleep"]
        args: ["60"]
      restartPolicy: Never

60초 동안 sleep하는 잡이다

레이블과 셀렉터는 따로 지정하지 않는 것을 추천한다

(쿠버네티스가 유니크한 uuid를 자동으로 생성)

# 생성 직후
kubectl get pods --watch
NAME                                 READY   STATUS    RESTARTS   AGE
sample-job-zgh2v                     1/1     Running   0          23s

# 60초 후 완료된 잡
kubectl get pods --watch
NAME                                 READY   STATUS    RESTARTS   AGE
sample-job-zgh2v                     0/1     Completed   0          70s

restartPolicy

spec.template.spec.restartPolicy

Never

잡 용도로 생성한 파드 내부 프로세스가 정지되면 신규 파드를 생성하여 잡을 계속 실행하려고 한다

OnFailure

잡 용도로 생성된 파드 내부 프로세스가 정지되면 RESTARTS 카운터가 증가하고, 사용했던 파드를 다시 사용하여 잡을 실행하려고 한다

태스크와 작업 큐 병렬 실행

completions : 성공횟수

parallelism : 병렬성

backoffLimit : 실패를 허용하는 횟수

One Shot Task : 1회만 실행하는 태스크

completions=1 / parallelism=1 / backoffLimit=0 으로 지정

반드시 1회만 실행한다

Multi Task : 병렬로 실행하는 태스크

completions와 parallelism를 변경하여 병렬 태스크를 생성할 수 있다

ex) completions=5 / parallelism=3 지정한 경우, 파드가 5회 정상 종료할 때까지 세 개 병렬로 실행한다

Mulit WorkQueue: N개 병렬로 실행하는 작업 큐

큰 처리 전체가 정상 종료할 때까지 몇 개의 병렬 수로 계속 실행하고 싶은 경우

completions은 지정하지 않고 parallelism만 지정한다

이 경우 parallelism로 지정한 병렬 수로 파드를 실행하고, 그중 하나라도 정상 종료하면 그 이후는 파드를 생성하지 않는다

Single WorkQueue: 한 개씩 실행하는 작업 큐

Multi WorkQueue 응용으로 성공 횟수(Completions)를 지정하지 않고 병렬 수(Parallelism)에 1을 지정한 경우에는 한 번 정상 종료할 때까지 한 개씩 실행하는 작업 큐(Single WorkQueue)가 된다

CronJob (크론잡)

CronJob

기존의 스케줄잡이라는 이름이 크론잡으로 명칭이 변경되었다

크론잡은 스케줄링된 시간에 잡을 생성한다

크론잡이 잡을 관리하고 잡이 파드를 관리하는 3계층 구조이다

크론잡 생성

apiVersion: batch/v1
kind: CronJob
metadata:
  name: sample-job
spec:
  schedule: "* /1* * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

크론잡 일시 정지

점검이나 어떤 이유로 잡 생성을 원하지 않는 경우에는 suspend(일시정지)를 할 수 있다

크론잡에서 spec.suspend가 true로 설정되어 있으면 스케줄 대상에서 제외된다 (기본값은 false)

크론잡을 임의의 시점에 실행

—from 옵션을 사용하여 크론잡으로 잡을 생성할 수 있다

스케줄링 시간 이외의 시점에 실행시키고 싶을 때 사용한다

kubectl create job sample-job-from-cronjob --from cronjob/sample-cronjob

댓글