-
Kubernetes(K8S): Job & CronJob공부합시다!/Kubernetes 2023. 1. 3. 00:12728x90
Linux를 운영할 때 단순 1회성 작업은 at, 주기적인 작업은 cron으로 처리를 했습니다.
2023.01.03 - [공부합시다!/LInux] - CentOS7: at & cron
K8S에서 역시 동일한 기능을 제공합니다.
단순 1회성 작업은 Job, 주기적인 작업은 CronJob으로 처리를 합니다.
아래 hello world를 10번 출력하는 code를 이용해 보도록 하겠습니다.
# vi for.sh #! /bin/bash for a in {1..10} do echo hello world: $a done
# sh for.sh hello world: 1 hello world: 2 hello world: 3 hello world: 4 hello world: 5 hello world: 6 hello world: 7 hello world: 8 hello world: 9 hello world: 10
단순히 hello world를 10번 출력해주는 code 입니다.
1. Job
1.1. 예약된 작업이 실행된 후 종료가 필요한 경우 사용하는 Resource
1.2. 하나 이상의 Pod를 생성하고 지정된 수의 파드가 성공적으로 종료될 때까지 계속해서 Pod의 실행을 재시도
1.3. Pod가 성공적으로 완료되면, 성공적으로 완료된 Job을 추적
1.4. 지정된 수의 성공 완료에 도달하면 작업이 완료된다. 주의: 작업이 완료되어도 Pod는 삭제되지 않는다.
1.5. 작업(Job)을 삭제하면 Pod도 제거됨.
1.6. 작업을 일시 중지하면 작업이 재개될 때까지 활성 파드가 삭제된다.
1.7. config file
1.7.1. # vi cron.yml
apiVersion: batch/v1 kind: Job metadata: name: cron spec: template: spec: containers: - name: hell image: centos command: ["/bin/sh"] args: ["-c", "for a in {1..10}; do echo hello world: $a; done"] restartPolicy: Never backoffLimit: 4
1.7.2. 실행 및 pod, job 확인
# kubectl apply -f cron.yml # kubectl get pods # kubectl get jobs
1.7.3. 상세정보확인
1.7.3.1. Controller: Job/cron
1.7.3.2. 현재 컨테이너 상태는 Terminated
1.7.3.3. 작업이 완료됐음을 의미하는 Completed
1.7.4. Job 삭제 및 Pod 상태 확인
1.7.4.1. Job을 삭제하면 Pod 역시 삭제됨.
# kubectl get jobs # kubectl delete jobs cron # kubectl get pod
1.7.5. Job 재생성 후 Pod 삭제 후 Job 상태 확인
1.7.5.1. Pod를 삭제해도 Job은 남아있음.
1.8. 작업 종료 후 자동 삭제되는 Job 만들기
1.8.1. configfile
1.8.2. vi crondel.yml
apiVersion: batch/v1 kind: Job metadata: name: crondel spec: ttlSecondsAfterFinished: 30 # 30초후 작업 삭제 template: spec: containers: - name: hello image: centos command: ["/bin/sh"] args: ["-c", "for a in {1..10}; do echo hello world: $a; done"] restartPolicy: Never
1.8.3. config file 적용 및 pod, job 상태 확인
1.8.3.1. 30초 후 생성한 job 및 pod 삭제 확인
2. CronJob
2.1. 스케줄에 따른 단일 or 여러 작업의 병렬 수행에 사용하는 Resource
2.2. 스케줄링 문법은 완전히 Linux와 동일함.
스케줄링 문법: https://kubernetes.io/ko/docs/concepts/workloads/controllers/cron-jobs/ 2.3. config file 작성, 적용, 확인
2.3.1. # vi cronjob.yml
apiVersion: batch/v1 kind: CronJob metadata: name: cronjob spec: schedule: "* * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: centos imagePullPolicy: IfNotPresent command: ["/bin/sh"] args: ["-c", "for a in {1..10}; do echo hello world: $a; done"] restartPolicy: OnFailure
2.3.2. 적용 및 확인, 삭제
# kubectl apply -f cronjob.yml # kubectl get pod # 1분 뒤에 확인할 것. cron설정에 1분마다 실행으로 설정 # kubectl get jobs job 넘버와 동일한 pod가 생성됨 # kubectl delete -f cronjob.yml cronjob 삭제
자! 오늘은 예약작업과 주기적인 예약 작업을 담당하는 Job과 CronJob에 대해서 살펴보았습니다.
이제는 K8S echo system으로 넘어가야 하나요?
728x90'공부합시다! > Kubernetes' 카테고리의 다른 글
Kubernetes(K8S): Helm + Prometheus + Grafana (0) 2023.01.06 Kubernetes(K8S): DaemonSet & StatefulSet (0) 2023.01.04 Kubernetes(K8S): Multi Container POD (0) 2023.01.02 Kubernetes (K8S): Object - 2. POD (0) 2022.12.30 Kubernetes (K8S): Scheduling (0) 2022.12.30