[Kubernetes] Jobs (잡)과 CronJob

2023. 2. 13. 18:10·Cloud Engineering/Kubernetes ⚙️
목차
  1. Jobs
  2. 1. 직렬적으로 작업 처리하기 (Non-parallel Job) 
  3. 2. 병렬적으로 작업 처리하기 (Parallel Job) 
  4. 3. Job으로 Pod과 Contianer의 Failure (비정상 종료) 핸들링하기 
  5. CronJob
728x90

Jobs

  • Job 은 하나 이상의 pod들이 성공적으로 종료되기 전까지 실행을 반복하는 오브젝트 컨트롤러이다. 
  • 작업을 수행하는 pod 이 성공적으로 완료되면  pod이 맡은 임무를 성공적으로 완료한 것으로 간주하여  pod을 종료시킨다. 
  • 또한 Job은 pod들을 병렬적으로 수행하도록 설정할 수 있다. 
  • Job은 데몬셋, 레플리카셋과 달리 레이블 셀렉터를 사용자가 직접 지정하지 않으며, 컨트롤러에 의해 부여된 고유값인 UID를 레이블 셀렉터로 사용한다. 
  • Job은 pod

 

1. 직렬적으로 작업 처리하기 (Non-parallel Job) 

apiVersion: batch/v1 ## batch 그룹의 v1 api 사용
kind: Job # Job object 선언
metadata:
  name: myapp-job
spec:
  template: # Pod 템플릿 내용 정의하기 
    metadata:
      labels: # 여기서의 label은 셀렉터가 아님 
        app: myapp-job
    spec:
      restartPolicy: OnFailure
      containers:
      - name: pi
        image: perl:latest
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(1000)"]

 

Job 에 의해서 pod이 생성되었으며 pod 의 작업이 모두 수행되어서 작업이 완료된 상태로 표시된다. 

log를 찍어보면 pod 실행 후 파이에 대한 값이 출력된것을 확인할 수 있다. 

 

2. 병렬적으로 작업 처리하기 (Parallel Job) 

apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job-bara
spec:
  completions: 3 # 완료할 job의 횟수 3번 
  parallelism: 3 # 병렬처리할 job의 개수 
  template:
    metadata:
      labels:
        app: myapp-job-para
    spec:
      restartPolicy: OnFailure # 다 수행한 job을 다시 실행할 필요는 없음
      containers:
      - name: pi
        image: perl:latest
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(1000)"]

 

parallelism 필드에 병렬 처리를 할 job의 개수를 적어 준다.  세개의 job을 병렬적으로 실행하는 설정이다. 

Job이 실행되는 상황을 보면 pod 3개가 돌아가면서 작업이 진행되고 있다. 즉 병렬처리 되는 것을 확인할 수 있다.

 

3. Job으로 Pod과 Contianer의 Failure (비정상 종료) 핸들링하기 

다음과 같이 Job으로 종료를 핸들링하는 설정파일을 작성할 수 있다. 

apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job-atvdl
spec:
  backoffLimit: 3 # 재실행 시도 횟수
  activeDeadlineSeconds: 3 # 데드라인 
  template:
    metadata:
      labels:
        app: myapp-job-atvdl
    spec:
      restartPolicy: OnFailure
      containers:
      - name: pi
        image: perl:latest
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(1000)"]

backoffLimit : Job에 대해 Failure로 처리하기 이전에 재실행을 해 볼 횟수이다. 값을 지정하지 않으면 기본값은 6번이다. 

activeDeadLineSeconds : Job을 종료해야 하는 데드라인을 설정하는 것이며 데드라인을 넘어가면 실패한 것으로 간주한다. 데드라인을 넘긴 pod은 종료시키고 재실행시키지 않는다. activeDeadLineSeconds에 의해 종료된 pod은 backoffLimit 설정이 되어있다고 해도 재시작 되지 않는다. 이는 activeDeadLineSeconds의 우선순위가 backoffLimit보다 높기 때문이다. 

위의 Job을 실행했을 때 다음과 같은 결과가 나온다. 3초가 경과되서 강제 종료되고 pod도 삭제되었다.

실패처리된 pod은 삭제되고, 재실행되지 않으므로 현재 네임스페이스에 실행중인 pod이 없는 것이다. 

CronJob

위의 Job을 한번이 아니라 여러번 반복적으로 수행하고 싶을 때 CronJob 오브젝트 컨트롤러를 사용할 수 있다. 

apiVersion: batch/v1 # CronJob이 사용하는 api 
kind: CronJob
metadata:
  name: myapp-cj
spec:
  schedule: "* * * * *" # CronJob 실행 주기를 설정 
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: myapp-cj
        spec:
          restartPolicy:  OnFailure # 실패시 재시작 
          containers:
            - name: sleep
              image: busybox # utility 를 모아놓은 이미지 
              command: ["sleep", "60"] # system에서 60초 동안 대기 (sleep)

리눅스 환경의 작업 스케줄링을 하는 Cron 에서 job의 주기를 사용하는 방식과 동일하다

schedule 다음의 필드 순서는  분 시 일 월 요일 이다. 

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                   7 is also Sunday on some systems)
# │ │ │ │ │                                   OR sun, mon, tue, wed, thu, fri, sat
# │ │ │ │ │
# * * * * *

* 를 모두 지정해주었으므로 Job을 1분마다 실행하도록 설정한 것이다.

실제로 CronJob을 생성했을 때 CronJob의 스케줄링에 의해 pod이 1분마다 생성되고 , 60초동안 대기하고 있다. 

참고자료


https://kubernetes.io/docs/concepts/workloads/controllers/job/

 

Jobs

A Job creates one or more Pods and will continue to retry execution of the Pods until a specified number of them successfully terminate. As pods successfully complete, the Job tracks the successful completions. When a specified number of successful complet

kubernetes.io

 

728x90

'Cloud Engineering > Kubernetes ⚙️' 카테고리의 다른 글

[Kubernetes] 쿠버네티스 Volume의 종류와 특징  (0) 2023.02.17
[Kubernetes] Service 의 종류  (0) 2023.02.16
[Kubernetes] DaemonSet (데몬셋)  (0) 2023.02.13
[Kubernetes] Replication Controller (레플리케이션 컨트롤러)  (0) 2023.02.11
[Kubernetes] 컨테이너 프로브 (Container Probe)  (0) 2023.02.11
  1. Jobs
  2. 1. 직렬적으로 작업 처리하기 (Non-parallel Job) 
  3. 2. 병렬적으로 작업 처리하기 (Parallel Job) 
  4. 3. Job으로 Pod과 Contianer의 Failure (비정상 종료) 핸들링하기 
  5. CronJob
'Cloud Engineering/Kubernetes ⚙️' 카테고리의 다른 글
  • [Kubernetes] 쿠버네티스 Volume의 종류와 특징
  • [Kubernetes] Service 의 종류
  • [Kubernetes] DaemonSet (데몬셋)
  • [Kubernetes] Replication Controller (레플리케이션 컨트롤러)
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • python
  • 운영체제
  • 카카오코딩테스트
  • 데이터브릭스
  • 스파크
  • 프로그래머스
  • Swift
  • dfs
  • ansible
  • dp
  • 쿠버네티스
  • linux
  • BFS
  • 알고리즘
  • 데이터엔지니어
  • AWS
  • Databricks
  • 빅데이터
  • 데이터엔지니어링
  • 리눅스
  • Leetcode
  • 백트래킹
  • SPARK
  • docker
  • 코딩테스트
  • EC2
  • 백준
  • Kubernetes
  • 파이썬
  • 클라우드

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
[Kubernetes] Jobs (잡)과 CronJob
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.