✍ Posted by Immersive Builder Seong
Jobs
컨테이너가 수행하는 워크로드에는 여러가지 종류가 있습니다. 웹, 어플리케이션, 데이터베이스와 같이 수동으로 중단하기 전까지 장시간 실행되는 워크로드와 배치 프로세스, 분석, 리포팅 등 특정 작업을 짧은 시간동안만 수행하고 완료되는 워크로드가 있습니다. 이중에서 특정 작업을 완료하기 위해 파드 세트를 실행하는 쿠버네티스 오브젝트가 바로 Job입니다.
Job은 매니페스트 파일로 정의하여 생성할 수 있습니다. 아래의 예시에서 Job은 bpi 연산을 수행하는 파드를 생성하고, 연산이 완료되면 화면에 출력한 후 컨테이너를 종료합니다. 이 때 파드는 Completed 상태가 되고, Job은 restartPolicy 정책에 따라 파드를 재시작하지 않습니다. 그리고 Job을 삭제하면 파드도 함께 삭제됩니다.
- completions : 작업을 완료하기 위한 파드의 개수
- parallelism : 병렬로 실행할 파드의 개수
- backoffLimit : 작업이 완료될 때까지 파드 생성을 시도하는 횟수
- restartPolicy : 파드 재시작 정책 ex) Never - 재시작하지 않음, OnFailure - 실패한 경우에만 재시작
CronJobs
CronJob
CronJob은 반복되는 일정에 따라 Job을 생성하고 실행합니다. CronJob은 백업, 리포팅 등 정기적으로 예약된 작업을 수행하기 위한 쿠버네티스 오브젝트입니다. Cron 데몬은 지속적으로 시스템 시간과 작업 예약 시간이 일치하는지 체크합니다. 그리고 Cron 데몬은 시스템 시간과 작업 예약 시간이 일치하면 새로운 프로세스를 포크하고 시스템 콜을 호출하여 작업을 수행합니다.
CronJob은 매니페스트 파일을 정의하여 생성할 수 있고, 주요 필드는 schedule 과 jobTemplate 입니다.
- schedule : Cron 형식의 스트링 값으로 작업이 수행될 시간을 예약
- jobTemplate : 실제 수행될 작업의 내용을 표시
Schedule syntax
CronJob을 구현하기 위한 Cron 형식은 리눅스의 Crontab 문법을 그대로 따릅니다.
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday)
# │ │ │ │ │ OR sun, mon, tue, wed, thu, fri, sat
# │ │ │ │ │
# │ │ │ │ │
* * * * *
월별, 주별, 일별 등 자주 사용하는 표준 형식은 아래와 같습니다.
Entry | Description | Cron Expression |
@yearly | Run once a year at midnight of 1 January | 0 0 1 1 * |
@monthly | Run once a month at midnight of the first day of the month | 0 0 1 * * |
@weekly | Run once a week at midnight on Sunday morning | 0 0 * * 0 |
@daily | Run once a day at midnight | 0 0 * * * |
@hourly | Run once an hour at the beginning of the hour | 0 * * * * |
*/2 | Run every 2 minutes | */2 * * * * |
*/2, 8-17 | Run every 2 minutes between 8 AM and 5 PM | */2 8-17 * * * |
*/5, 17-19, '6,7' | Every 5 minutes between 5 PM and 7 PM on weekends | */5 17-19 * * 6,7 |
0,12 | Run at midnight and noon every day | 0 0,12 * * * |
0-23/2 | Run every 2 hours starting at midnight | 0 0-23/2 * * * |
1,15 | Run at midnight on the 1st and 15th of every month | 0 0 1,15 * * |
Job Template
.spec.jobTemplate 필드는 CronJob이 생성하는 Job의 템플릿을 정의하며 필수입니다. apiVersion 또는 kind를 제외하면 Job과 정확히 동일한 형식을 가집니다. 그리고 레이블이나 주석 등 공통 메타데이터를 여기에 지정할 수 있습니다.
Concurrency Policy
- Allow : 동시 실행 허용(기본값)
- Forbid : 동시 실행 비허용
- Replace : 새 Job을 실행할 시간이고 이전 Job 실행이 끝나지 않은 경우, 현재 실행 중인 Job을 새 Job으로 대체함
[출처]
1) https://kubernetes.io/docs/concepts/workloads/controllers/job/
2) https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
'K8s > Core Concept' 카테고리의 다른 글
[K8s] Liveness Probes 란? (0) | 2024.11.24 |
---|---|
[K8s] Readiness Probes 란? (0) | 2024.11.23 |
[K8s] 소프트웨어 배포 전략(Software Deployment Strategies) (0) | 2024.11.19 |
[K8s] CoreDNS 란? (0) | 2024.11.16 |
[K8s] Helm 이란? (1) | 2024.11.14 |