-
쿠버네티스 크론잡(cronjob) 이란?
크론잡은 매일 오후 6시에 특정 파드를 실행시키는 등 지정한 일정에 따라 잡을 실행 시킬 수 있습니다.
잡을 모를 경우 이전에 업로드한 글을 참고 해주세요. (https://nirsa.tistory.com/142)
-
크론잡 생성 및 확인
아래 코드는 크론잡과 병렬 잡을 같이 사용하는 코드 입니다..
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: pi
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
completions: 3
parallelism: 3
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(100)"]
restartPolicy: Never
backoffLimit: 4
- apiVersion apps/v1beta1 → 쿠버네티스의 apps/v1beta1 API를 사용 합니다.
- kind: CronJob → CronJob의 작업으로 명시 합니다.
- spec.schedule → 코드 내 설정은 1분마다 잡을 실행하도록 설정 합니다. (순서에 따라 "분 시 일 월 요일" 입니다. )
- spec.jobTemplate → 실행될 잡의 설정 내용 입니다.
yaml 파일을 설정할 때 혹시나 잡 이름이 52자 이하인지 확인해야 합니다. 크론잡은 잡 이름에 11자를 자동으로 추가하고, 잡 이름의 최대 길이는 63자리이므로 혹시나 너무 긴 이름을 사용하였을 경우 이를 생각하고 재지정해야 합니다.
실행 후 몇분 뒤 확인해보면 아래 이미지처럼 매분 잡과 3개의 파드가 실행되고 있다는걸 확인할 수 있습니다.
크론잡의 확인은 kubectl get cronjob 으로 가능하고, kubectl delete cronjobs [크론잡 이름] 으로 크론잡을 삭제하면 연관된 모든 잡과 파드가 삭제 됩니다.
-
크론잡 설정
크론잡을 좀 더 안전하게 사용하기 위해서는 필드값을 몇개 추가해주어야 합니다. 여러가지의 잡이 실행되거나 등 예약한 작업이 누락될 가능성이 있기 때문 입니다.
크론잡 컨트롤러는 마지막 잡부터 지금까지 얼마나 많은 잡이 누락되었는지 확인하게 되는데, 만약 100회 이상 누락이 발생할 경우 에러를 떨구며 잡을 실행하지 않게 됩니다.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: test
spec:
schedule: "*/1 * * * *"
startingDeadlineSeconds: 200
concurrencyPolicy: Forbid
jobTemplate:
spec:
completions: 3
parallelism: 3
template:
spec:
containers:
- name: test
image: test
restartPolicy: Never
backoffLimit: 4
- spec.startingDaelineSeconds: 200 → 여기서 지정된 시간동안 위에서 설명했던 잡 누락 횟수를 카운팅 합니다. 200초 동안 100개 이상 발생 시 에러를 떨구며 잡을 실행하지 않습니다.
- spec.concurrencyPolicy: Forbid → 정상 종료되지 않고 실행 상태인 잡이 있을 경우 다음 잡을 실행해야될 시간이 오더라도 잡을 실행하지 않습니다.
- spec.jobTemplate.spec.template.spec.containers.image → concurrencyPolicy를 확인해보기 위해 존재하지 않는 이미지 파일을 입력 하였습니다.
concurrencyPolicy의 기본 값은 Allow 입니다. 이 값은 크로잡이 여러개의 잡을 동시에 실행할 수 있도록 해주고, Forbid는 정상 종료되지 않고 실행 상태인 잡이 있을 경우 다음 잡을 실행해야될 시간이 오더라도 잡을 실행하지 않습니다.
또한 Replace 는 정상 종료되지 않고 실행 상태인 잡이 있을 경우 실행중인 상태의 잡을 종료하고, 다음 실행해야할 잡을 실행 시킵니다.
위의 코드에서 존재하지 않는 이미지 파일을 지정하여 파드가 정상 종료되지 않도록 설정 하였고, 현재 concurrencyPolicy의 값은 Forbid 이므로 정상 종료되지 않은 잡이 작업을 계속하며 다음 잡을 실행시킬 시간이 되어도 기존 잡이 계속 유지 됩니다.
매분 실행되도록 설정하였고 크론탭이 실행된지 3분 이상 지낫지만, 잡은 첫 실행 후 다음 잡이 실행되지 않고 있습니다.
아래는 ConcurrencyPolicy의 값이 Replace 입니다. 잡이 정상 종료되지 않아도 매 분마다 기존에 있던 잡을 종료하고 새로운 잡이 실행중임을 알 수 있습니다.
마지막으로 기본값인 Allow 입니다. 기존 잡과 새로운 잡이 동시에 실행중임을 알 수 있습니다.
'Container > Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 RBAC-롤바인딩(rolebinding) 개념 및 설정 (1) | 2020.03.05 |
---|---|
[Kubernetes] 쿠버네티스 Docker Hub-Private Image 가져오는 방법 (0) | 2020.02.27 |
[Kubernetes] 쿠버네티스 잡(job) 개념 (0) | 2020.02.21 |
[Kubernetes] 쿠버네티스 데몬셋(Daemonset) 개념 (생성, 확인, 실행중인 파드의 노드 확인, 업데이트) (1) | 2020.02.18 |
[Kubernetes] 쿠버네티스 디플로이먼트(Deployment) 개념 (생성, 확인, 업데이트, 롤백, 롤아웃 기록 조회, 일시 중지, 시작, 재시작) (1) | 2020.02.17 |