잡(Job)
쿠버네티스의 포드가 작동하는 원리는 지속적인 애플리케이션 실행이다. 만약에 컨테이너가 종료가 되는 애플리케이션이 실행이 된다고 하면 종료 후에 쿠버네티스는 자동으로 그 해당 컨테이너를 다시 실행시킨다.
배치 프로그램과 같은 한번 실행되면 종료가 되야하는 프로그램을 담고 있는 컨테이너를 관리하는 오브젝트가 쿠버네티스의 잡(Job)이다. Batch 처리에 적합한 컨트롤러로 Pod의 성공적인 완료를 보장한다. 잡은 비정상시 종료 후 다시 실행하고 정상적으로 종료 시 완료 처리를 한다.
apiVersion: batch/v1
kind: Job
metadata:
name: sample-job
spec:
template:
spec:
completions: 1
parallelism: 1
backoffLimit: 10
containers:
- name: tools-container
image: amsy810/tools:v2.0
command: ["sleep"]
args: ["60"]
restartPolicy: Never
restartPolicy에 따른 동작 차이
잡의 매니페스트에는 spec.template.spec.restartPolicy에 OnFailure 또는 Never 중 하나는 지정해야 한다. Never를 지정한 경우 포드에 장애가 발생하면 신규 포드가 생성되고 OnFailure의 경우 다시 동일한 포드를 사용하여 잡을 다시 시작한다.
위 예시처럼 restartPolicy가 Never일 경우 에러가 발생해 프로세스가 멈추는 새로운 이름의 다른 포드가 생성된다. 하지만 OnFailure일 경우 get pods 명령어로 포드를 살펴보면 RESTARTS 카운터가 증가하고 사용했던 포드를 다시 사용하여 잡을 실행 하려고 한다.
잡의 spec 부분에는 다양한 옵션들이 있는데 completions은 성공 횟수를 지정하고 parallelism은 병렬성을 지정이고 backoffLimit은 실패를 허용하는 횟수이다.
이 세 파라미터는 잡의 워크로드에 따라 적절히 설정하여 사용해야 한다.
워크로드 | completions | parallelism | backoffLimit |
1회만 실행하는 태스트 | 1 | 1 | 0 |
N개 병렬로 실행시키는 태스트 | M | N | P |
한 개씩 실행하는 작업 큐 | 미지정 | 1 | P |
N개 병렬로 실행하는 작업 큐 | 미지정 | N | P |
One Shot Task: 1회만 실행하는 태스크
completions = 1/ parallelism = 1/ backoffLimit = 0을 지정하면 '한 개 병렬로 실행/성공 횟수가 1이 되면 종료/실패 횟수가 0이 되면 종료'라는 조건으로 성공 유무에 관계없이 반드시 1회만 실행된다
Multi Task: N개 병렬로 실행시키는 태스크
completions = 5/ parallelism = 3을 지정하고 잡을 실행한 경우 포드가 5회 정상 종료할 때까지 세 개 병렬로 실행한다.
Multi WorkQueue: N개 병렬로 실행하는 작업 큐
작업 큐는 큰 처리 전체가 정상 종료할 때까지 몇 개의 병렬 수로 계속 실행하고 싶은 경우 사용한다. 작업 큐의 잡은 성공 횟수(completions)을 지정하지 않고 병렬 수(parallelism)만 지정한다. 이 경우 parallelism으로 지정한 병렬 수로 포드를 실행하고 그중 하나라도 정상 종료하면 그 이후는 포드를 생성하지 않는다. 도 그때 이미 실행 중인 나머지 포드는 강제적으로 정지하지 않고 개별 처리가 종료할 때까지 계속 동작한다.
Single WorkQueue: 한 개씩 실행하는 작업 큐
Multi WorkQueue에서 parallelism에 1을 지정한 경우 한 번 정상 종료할 때까지 한 개씩 실행하는 작업 큐가 된다.
크론잡(CronJob)
Job 컨트롤러로 실행할 Application Pod를 주기적으로 반복해서 실행한다. 데이터 백업이나 이메일을 주기적으로 보내는 일들을 수행할 때처럼 반복해서 실행하는 Job을 운영해야 할 때 사용한다.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: sample-cronjob
spec:
schedule: "*/1 * * * *"
concurrencyPolicy: Allow
startingDeadlineSeconds: 30
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 3
suspend: false
jobTemplate:
spec:
completions: 1
parallelism: 1
backoffLimit: 0
template:
spec:
containers:
- name: tools-container
image: amsy810/random-exit:v2.0
restartPolicy: Never
크론잡은 지정한 시간에 잡을 계속 생성한다. 점검이나 어떤 이유로 잡 생성을 원하지 않을 경우에는 suspend(일시 정지)를 할 수 있다. 크론잡에서 spec.suspend가 true로 설정되어 있으면 스케줄 대상에서 제외된다.
크론잡에서는 잡을 생성하는 특성상 동시 실행에 대한 정책을 설정할 수 있다. spec.concurrencyPolicy에 명시해 아래 표의 정책을 수행할 수 있다.
정책 | 개요 |
Allow(기본값) | 동시 실행에 대한 제한을 하지 않음 |
Forbid | 이전 잡이 종료되지 않았을 경우 다음 잡은 실행하지 않음 |
Replace | 이전 잡을 취소하고 잡을 시작 |
spec.schedule 은 Cron의 형식을 사용한다.
예 "0 3 1 * *"
- Minutes (from 0 to 59)
- Hours (from 0 to 23)
- Day of the month (from 1 to 31)
- Month (from 1 to 12)
- Day of the week (from 0 to 6)
https://en.wikipedia.org/wiki/Cron
cron - Wikipedia
From Wikipedia, the free encyclopedia Jump to navigation Jump to search Job scheduler for Unix-like operating systems The cron command-line utility, also known as cron job[1][2] is a job scheduler on Unix-like operating systems. Users who set up and mainta
en.wikipedia.org
'Kubernetes' 카테고리의 다른 글
쿠버네티스 스테이트풀셋 (0) | 2021.11.16 |
---|---|
쿠버네티스 포드 디자인 패턴 및 포드 설계 (0) | 2021.11.06 |
쿠버네티스 데몬셋 (0) | 2021.10.17 |
쿠버네티스 컨트롤러 (0) | 2021.10.17 |
쿠버네티스 포드 (0) | 2021.10.17 |