Workload API - CronJob

2025. 7. 4. 12:40·Cloud/Kubernetes

✅ CronJob

CronJob은 다른 매니페스트와 다르게 schedule(얼마나 자주), command(어떤 행동을 수행) 부분이 추가된다.


✅ 크론잡 생성 예제

ex) busybox 이미지를 통해 Pod를 생성하고 생성된 Pod는 1분 단위(schedule) 로 date; echo Hello from the Kubernetes cluster 메시지를 출력(command)하는 크론잡

 

  • yaml 파일 작성
# cronjob.yaml

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *" #스케쥴 지정
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent #이미지가 없을 때에만 내려받음
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure #컨테이너에서 실행된 프로세스가 실패할 때에만 다시 시작
  • 크론잡 생성 및 확인
# 크론잡 생성
kubectl create job my-job --image=busybox -- date

# 리소스 생성
kubectl apply -f cronjob.yaml

# 파드 확인
kubectl get pods
kubectl logs hello-28909935-66pzd

 

  • 크론잡 상태 확인
    • LAST SCHEDULE: 스케쥴을 마지막으로 실행하고 경과된 시간. 실행되지 않은 경우 <none>으로 출력될 수도 있다.
kubectl get cronjob hello

 

실행 결과

  • 크론잡 일시정지: spec.suspend에 true를 설정한다.
kubectl patch cronjob hello -p '{"spec":{"suspend":true}}'


✅ 크론잡을 잡으로 생성

 


✅ 동시 실행, 실행 시작 기한, 이력 제어

Cronjob에서는 동시 실행, 실행 시작 기한, 이력에 대한 제어를 할 수 있다.

동시 실행 제어

잡 실행이 의도한 시간 간격 안에서 정상 종료할 때는 명시적으로 지정하지 않아도 되지만, 스케쥴 시간 안에 종료되지 않은 경우 어떻게 할 것인지 설정할 수 있다.

spec.concurrencyPolicy에서 동시 실행에 대한 정책을 설정할 수 있다.

  • Allow (기본값): 동시 실행에 대한 제한을 하지 않는다.
  • Forbid: 이전 Job이 종료되지 않았을 경우 다음 Job은 실행하지 않는다.
  • Replace: 이전 Job을 취소하고 새로운 Job을 시작한다.

 

실행 시작 기한 제어

spec.startingDeadlineSeconds에서 CronJob이 시작될 수 있는 허용 지연 시간(초)을 지정할 수 있다. Kubernetes 마스터 일시 정지 등으로 시작이 지연될 경우를 대비한다.

매시 00분에 시작하는 잡을 매시 00~05분에만 실행 가능으로 설정하는 경우

 

크론잡 이력

Job 이력 개수를 제어할 수 있다.

  • spec.successfulJobsHistoryLimit: 성공한 잡 저장 개수
  • spec.failedJobsHistoryLimit: 실패한 잡 저장 개수 설정

 

# sample-cronjob.yaml

apiVersion: batch/v1
kind: CronJob
metadata:
  name: sample-cronjob
spec:
  schedule: "*/1 * * * *"
  concurrencyPolicy: Allow #동시 실행 정책 지정
  startingDeadlineSeconds: 30 #실행 시작 기한 제어
  successfulJobsHistoryLimit: 3 #성공한 잡 저장 개수
  failedJobsHistoryLimit: 3 #실패한 잡 저장 개수
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
저작자표시 비영리 변경금지 (새창열림)

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

Helm  (1) 2025.08.12
External IP 서비스  (0) 2025.07.07
Service API - 쿠버네티스 클러스터 네트워크와 서비스  (0) 2025.07.04
Workload API - StatefulSet  (0) 2025.07.04
Workload API - Deployment  (0) 2025.07.03
'Cloud/Kubernetes' 카테고리의 다른 글
  • External IP 서비스
  • Service API - 쿠버네티스 클러스터 네트워크와 서비스
  • Workload API - StatefulSet
  • Workload API - Deployment
lur
lur
  • lur
    공부 기록
    lur
  • 전체
    오늘
    어제
    • 분류 전체보기 (41)
      • PS (9)
        • 백준 (6)
        • 프로그래머스 (1)
        • 알고리즘 (1)
        • C++ (1)
      • Cloud (14)
        • Public Cloud (4)
        • Kubernetes (6)
        • Ansible (4)
      • CICD (4)
      • TDD (1)
      • Network (12)
      • 책 (0)
        • 대규모 시스템 설계 (0)
      • 후기 (1)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS
    네트워크
    dfs
    백준
    Elastic Load Blancing
    Community Ansible
    AWS DataBase
    kubernetes
    CI/CD
    RHAAP
    AWS File Storage
    Continuous Deployment
    알고리즘
    버전 관리 시스템
    ansible playbook
    BFS
    canary update
    ansible
    비트마스킹
    blue/green update
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
lur
Workload API - CronJob
상단으로

티스토리툴바