Cronjob Controller ?
사용자가 원하는 시간에 Job 실행 예약 지원
Cronjob 안에 Job 컨트롤 기능 포함되어 있다.
job controller로 실행할 Application pod를 주기적으로 반복해서 실행
Linux의 Cronjob의 스케줄링 기능을 Job Contoller에 추가한 API.
다음과 같은 반복해서 실행해야하는 Job을 운영할 때 사용
- Data Backup
- Send email
- Cleaning tasks
Cronjob Schedule: "0 3 1 * *"
- Minutes
- Hours
- Day of the month
- Month
- Day of the week (0 ~ 6)
-> JobTemplate 안의 Spec은 완전히 동일한 것 알 수 있음
[master ~]$ cat > cronjob-exam.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-exam
spec:
schedule: "* * * * *" # 1분에 한 번씩 반복해서 실행
startingDeadlineSeconds: 500
# concurrencyPolicy: Allow # Allow : (Default값) 한 번에 여러개의 Job이여도 괜찮다.
concurrencyPolicy: Forbid # 동작중이면 해당 동작을 실행 X, 한 번에 하나의 Job만 실행
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- echo Hello; sleep 10; echo Bye
restartPolicy: Never
Every 2.0s: kubectl get pods -o wide cs-997982872602-default: Wed Feb 28 08:32:03 2024
# 매 분마다 실행
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cronjob-exam-28485152-54mfn 1/1 Running 0 4s 10.4.2.25 gke-cluster-1-default-pool-697aeef7-ccmj <none> <none>
Every 2.0s: kubectl get pods -o wide cs-997982872602-default: Wed Feb 28 08:32:11 2024
# 10초 뒤에 Completed
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cronjob-exam-28485152-54mfn 0/1 Completed 0 12s 10.4.2.25 gke-cluster-1-default-pool-697aeef7-ccmj <none> <none>
#1분 지나면 하나 더 실행
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cronjob-exam-28485152-54mfn 0/1 Completed 0 65s 10.4.2.25 gke-cluster-1-default-pool-697aeef7-ccmj <none> <none>
cronjob-exam-28485153-tbbrb 1/1 Running 0 5s 10.4.2.26 gke-cluster-1-default-pool-697aeef7-ccmj <none> <none>
[master ~]$ kubectl get cronjob -o yaml
apiVersion: v1
items:
- apiVersion: batch/v1
kind: CronJob
metadata:
creationTimestamp: "2024-02-28T08:31:44Z"
generation: 1
name: cronjob-exam
namespace: default
resourceVersion: "712808"
uid: 7d000dd5-fc5d-4645-a20e-4fb16bf840cd
spec:
concurrencyPolicy: Forbid
failedJobsHistoryLimit: 1
jobTemplate:
metadata:
creationTimestamp: null
spec:
template:
metadata:
creationTimestamp: null
spec:
containers:
- args:
- /bin/sh
- -c
- echo Hello; sleep 10; echo Bye
image: busybox
imagePullPolicy: Always
name: hello
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Never
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
schedule: '* * * * *'
startingDeadlineSeconds: 500
successfulJobsHistoryLimit: 3 # Default값, 성공한 Job에 대한 History 3개만 남긴다.
suspend: false
status:
lastScheduleTime: "2024-02-28T08:34:00Z"
lastSuccessfulTime: "2024-02-28T08:34:13Z"
kind: List
metadata:
resourceVersion: ""
Every 2.0s: kubectl get pods -o wide cs-997982872602-default: Wed Feb 28 08:36:17 2024
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cronjob-exam-28485154-8qlj7 0/1 Completed 0 2m18s 10.4.2.27 gke-cluster-1-default-pool-697aeef7-ccmj <none> <none>
cronjob-exam-28485155-c75m9 0/1 Completed 0 78s 10.4.2.28 gke-cluster-1-default-pool-697aeef7-ccmj <none> <none>
cronjob-exam-28485156-4ndg5 0/1 Completed 0 18s 10.4.2.29 gke-cluster-1-default-pool-697aeef7-ccmj <none> <none>
# 삭제
[master ~]$ kubectl delete cronjob cronjob-exam
cronjob.batch "cronjob-exam" deleted
# 컨트롤러 총정리
- Replication Controller : Pod 개수 보장 컨트롤러
- ReplicaSet: Replication Controller + 풍부한 Lable 지원
- Deployment : ReplicaSet을 제어(Rolling update + Roll back)
- DaemonSet : Node당 1개씩 실행되도록 보장 (ex, log agent..)
- StatefulSet : Pod의 이름 보장
- Job: Pod의 정상종료 관리
반응형
'Container > Kubernetes' 카테고리의 다른 글
[K8S] Ingress Controller (0) | 2024.03.07 |
---|---|
[K8S] Service (0) | 2024.03.05 |
[K8S] Job Controller (0) | 2024.02.27 |
[K8S] Statefulset (0) | 2024.02.26 |
[K8S] DaemonSet (0) | 2024.02.26 |