※ 실시간으로 pod monitoring

-  kubectl get pod -o wide --watch
-  watch kubectl get pod -o wide

 Job 

:  배치 처리에 적합한 Controller로서 Pod의 성공적인 완료를 보장

:  Job을 사용하여 Pod를 실행하면?

  • Pod의 작업이 정상적 종료 → 완료
  • Pod의 작업이 비정상적 종료다시 실행시켜 Application의 작업을 하도록 함

전제 : Kubernetes에서 Pod은 항상 Running

실습) Job
- wget http://down.cloudshell.kr/k8s/lab/job/job-exam1.yaml
- watch kubectl get pod -o wide
- kubectl apply -f job-exam1.yaml
60초 동안 sleep 프로세스 진행 중

60초 이내에 pod 종료(비정상적 종료)
- kubectl delete pod pod_name 이렇게 하면 다시 생성한다

새로운 Pod 재시작

60초 후에 Pod 보기(정상적 종료)
- kubectl get job

정상적 종료되었기에 Pod이 Completed가 됨

(application 실행이 종료되어도 Pod은 재시작하지 않음)


Job으로 만든 Pod 삭제 시 
-  kubectl delete job job_name

 

backoffLimit 옵션

-  backoffLimit: 10 이라면 10번까지 Pod/Container재시작한다(기본값6)


restartPolicy 옵션 (비정상적 종료일 때)

  • restartPolicy:Never = Pod를 재시작
  • restartPolicy:OnFailure = Pod를 재시작하지 않고 Container를 재시작 (Pod 재시작 시 IP가 바뀔 수 있기 때문)
실습 1) 명령이 잘못된 Pod를 실행하는 경우 (restartPolicy:OnFailure)
-  wget http://down.cloudshell.kr/k8s/lab/job/job-exam-error1.yaml
잘못된 명령어

-  kubectl apply -f job-exam-error1.yaml

▶ 이렇게 하면 6번까지 Pod이 아닌 Container가 재시작된다. 이렇게 하다가 해결되지 않으면 Pod만을 삭제한다.


실습 2) 명령이 잘못된 Pod를 실행하는 경우 (restartPolicy:Never)

-  wget http://down.cloudshell.kr/k8s/lab/job/job-exam-error2.yaml
-  kubectl apply -f job-exam-error2.yaml

 이렇게 하면 Container가 아닌 Pod이 재생성된다. (여러 개의 Pod이 생성) 이렇게 하다가 해결되지 않으면 Pod만을 삭제해 버린다.

 

 CronJob 

사용자가 원하는 시간에 Job 실행을 예약하는 것

:  Job의 기능을 포함 (즉, CronJob → Job → Pod)

단지, schedulejobTemplate만 추가된 것이다.

:  반복해서 실행하는 Job을 운영할 때 사용 (주기적인 Data Backup, Email 전송, Log 파일 및 불필요한 데이터 삭제)

 

CronJob 표기법: "분 시간 날짜 월 요일"

  • 분: 0~59
  • 시간: 0~23
  • 날짜: 1~31
  • 월: 1~12
  • 요일: 0~6 (일요일~토요일)
  • *는 전체를 의미
예시)
매월 1일 3시 정각에 실행하라: 0 3 1 * *
주말 새벽 3시 정각에 실행하라: 0 3 * * 0,6
5분마다 반복해서 실행하라: */5 * * * *

 

실습) CronJob
-  wget http://down.cloudshell.kr/k8s/lab/cronjob/cronjob-exam1.yaml   

yaml

-  kubectl apply -f cronjob-exam1.yaml

1분이 지나면 Job이 시작되어 pod이 실행되고, 10초 후에 완료된다. 이 과정을 계속 반복한다.

성공한 Job은 3개까지 남아있는 것이 Default 값. 4번째 Job이 성공하면 첫 번째 Job은 삭제된다.
(kubectl get cronjob -o yaml보면 successfulJobsHistoryLimit: 3으로 되어 있다)


계속 Job실행되므로 CronJob중지하여 JobPod삭제한다
-
kubectl delete cronjobs.batch --all

 

 

'Study > Cloud' 카테고리의 다른 글

Kubernetes - 인증과 권한  (0) 2022.07.25
Kubernetes - Pod Scheduling  (0) 2022.07.25
Kubernetes - Controller  (0) 2022.07.22
Kubernetes - Service  (0) 2022.07.22
Kubernetes - Pod  (0) 2022.07.21

+ Recent posts