- Created by Sansae, last modified on Mar 07, 2024
목차
Cron Job개요
- 기존 리눅스 시스템의 Crontab과 유사한 동작, 동일한 크론 표기법을 사용
- CronJob하나에 하나의 작업 실행 권장
https://kubernetes.io/ko/docs/concepts/workloads/controllers/cron-jobs/

CronJob Manifest
https://dev-k8sref-io.web.app/docs/workloads/cronjob-v1beta1/
- apiVersion: batch/v1beta1
kind: CronJob
- metadata (ObjectMeta)
- spec (CronJobSpec)
- schedule #실행 스케줄 설정 Linux Crontab정책과 동일
- concurrencyPolicy #동시 실행 가능
- jobTemplate
- metadata (ObjectMeta)
- spec (JobSpec)
- template (PodTemplateSpec)
- parallelism
- selector
- status (CronJobStatus)
- 이미 하나의 CronJob이 실행중인 경우 CronJob을 추가로 실행할지 결정
- 동시성 정책 설정하기
- spec.concurrencyPolicy
- Allow: 중복 실행을 허용(기본값)
- Forbid: 중복 실행을 금지
- Replace: 현재 실행중인 CronJob을 내리고 새로운 CronJob으로 대체
- spec.concurrencyPolicy
cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello-cronjob
spec:
schedule: "*/1 * * * *" # 매분마다 실행
concurrencyPolicy: Allow # 동시 실행 가능
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
CronJob 실습
sansae@sansaeAir15m2 k8s-lab-workspace % k apply -f cronjob.yaml
cronjob.batch/hello-cronjob created
sansae@sansaeAir15m2 k8s-lab-workspace % k get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 7s
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
cronjob.batch/hello-cronjob */1 * * * * False 0 <none> 4s
sansae@sansaeAir15m2 k8s-lab-workspace % k get pod
NAME READY STATUS RESTARTS AGE
hello-cronjob-28499961-hbpgl 0/1 Completed 0 119s
hello-cronjob-28499962-rtts5 0/1 Completed 0 59s
sansae@sansaeAir15m2 k8s-lab-workspace % k describe cronjob hello-cronjob
Name: hello-cronjob
Namespace: default
Labels: <none>
Annotations: <none>
Schedule: */1 * * * *
Concurrency Policy: Allow
Suspend: False
Successful Job History Limit: 3
Failed Job History Limit: 1
Starting Deadline Seconds: <unset>
Selector: <unset>
Parallelism: <unset>
Completions: <unset>
Pod Template:
Labels: <none>
Containers:
hello:
Image: busybox:1.28
Port: <none>
Host Port: <none>
Command:
/bin/sh
-c
date; echo Hello from the Kubernetes cluster
Environment: <none>
Mounts: <none>
Volumes: <none>
Last Schedule Time: Sun, 10 Mar 2024 00:23:00 +0900
Active Jobs: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 2m26s cronjob-controller Created job hello-cronjob-28499961
Normal SawCompletedJob 2m19s cronjob-controller Saw completed job: hello-cronjob-28499961, status: Complete
Normal SuccessfulCreate 86s cronjob-controller Created job hello-cronjob-28499962
Normal SawCompletedJob 83s cronjob-controller Saw completed job: hello-cronjob-28499962, status: Complete
Normal SuccessfulCreate 26s cronjob-controller Created job hello-cronjob-28499963
Normal SawCompletedJob 22s cronjob-controller Saw completed job: hello-cronjob-28499963, status: Complete
sansae@sansaeAir15m2 k8s-lab-workspace % k get pod NAME READY STATUS RESTARTS AGE hello-cronjob-28504263-m4dkp 0/1 Completed 0 70s hello-cronjob-28504264-2w5zp 0/1 Completed 0 10s sansae@sansaeAir15m2 k8s-lab-workspace % k logs hello-cronjob-28504263-m4dkp Tue Mar 12 15:03:05 UTC 2024 Hello from the Kubernetes cluster
- No labels