CronJob

이 페이지에서는 Google Kubernetes Engine에서 CronJob을 실행하는 방법을 설명합니다.

개요

지정한 시간에 한 번 또는 반복적으로 유한한 시간 관련 작업을 수행하기 위해 CronJob을 만들 수 있습니다. CronJob은 백업, 보고, 이메일 전송과 같이 시간에 따라 자동으로 수행되는 작업에 사용될 수 있습니다.

CronJob은 해당 작업을 완료하기 위해 Job 객체를 사용합니다. CronJob은 일정을 한 번 실행할 때마다 한 번씩 Job 객체를 만듭니다.

CronJob은 Job과 같은 방식으로 생성, 관리, 확장, 삭제됩니다. Job에 대한 자세한 내용은 Job 실행을 참조하세요.

시작하기 전에

이 작업을 준비하려면 다음 단계를 수행하세요.

  • Google Kubernetes Engine API가 사용 설정되었는지 확인합니다.
  • Google Kubernetes Engine API 사용 설정
  • Cloud SDK가 설치되었는지 확인합니다.
  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project [PROJECT_ID]
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 지역 클러스터를 사용하는 경우 기본 컴퓨팅 지역을 설정합니다.
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update

CronJob 만들기

다음은 현재 시간과 문자열을 1분마다 출력하는 CronJob의 예입니다.

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo "Hello, World!"
          restartPolicy: OnFailure

CronJob은 생성하는 Job에 대한 Job 사양 jobTemplate: spec이 포함된 필수 jobTemplate 필드를 사용합니다. Job 사양에는 지정한 작업을 수행하기 위해 만드는 포드에 대한 포드 사양, spec: template: spec이 포함됩니다.

CronJob은 Unix 표준 crontab 형식으로 시간을 수락하는 필수 schedule 필드를 사용합니다. 모든 CronJob 시간은 UTC 형식입니다.

  • 첫 번째 값은 분(0~59)을 나타냅니다.
  • 두 번째 값은 시간(0~23)을 나타냅니다.
  • 세 번째 값은 월중 일(1~31)을 나타냅니다.
  • 네 번째 값은 월(1~12)을 나타냅니다.
  • 다섯 번째 값은 주중 요일(0~6)을 나타냅니다.

schedule은 또한 *?를 와일드 카드 값으로 수락합니다. 범위와 함께 /를 사용하면 작업이 일정 간격에 따라 반복되도록 지정합니다. 위 예에서 */1 * * * *는 모든 월의 모든 일자에 1분마다 작업이 반복됨을 나타냅니다.

이 CronJob을 만들려면 위 매니페스트를 config.yaml로 저장한 후 다음 명령어를 실행하세요.

kubectl apply -f cronjob.yaml

또는 매니페스트 파일을 만들지 않고 CronJob을 만들려면 kubectl run을 사용하세요.

kubectl run hello --schedule="*/1 * * * *" --restart OnFailure \
--image busybox -- /bin/sh -c "date; echo Hello, World\!"

기한 지정

선택적인 startingDeadlineSeconds 필드는 어떤 이유로든 예약된 시간이 없는 경우 CronJob을 시작하기 위한 기한(초)을 나타냅니다. 누락된 CronJob은 실패로 간주됩니다.

기한을 지정하려면 매니페스트 파일에서 CronJob의 spec 필드에 startingDeadlineSeconds 값을 추가합니다. 예를 들어 다음 매니페스트는 CronJob이 100초 후 시작되도록 지정합니다.

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  startingDeadlineSeconds: 100
  jobTemplate:
    spec:
    ...

startingDeadlineSeconds 값을 지정하지 않으면 기한이 사용되지 않습니다.

동시 실행 정책 지정

선택적인 concurrencyPolicy 필드는 CronJob 컨트롤러에서 생성된 Job이 동시에 실행될 경우 이를 처리하는 방법을 지정합니다. CronJob의 spec 필드에 concurrencyPolicy를 지정합니다.

concurrencyPolicy는 다음 값을 수락합니다.

  • Allow: 동시 Job을 허용합니다. 기본값입니다.
  • Forbid: 동시 Job을 금지하고 이전 실행이 아직 완료되지 않았으면 다음 실행을 건너뜁니다.
  • Replace: 현재 실행 중인 Job을 취소하고 새 항목으로 바꿉니다.

후속 실행 일시 중단

선택적인 suspend 필드는 true로 설정된 경우 모든 후속 실행을 일시 중단합니다. 현재 실행은 일시 중단하지 않습니다. CronJob의 spec 필드에 suspend를 지정합니다.

suspend의 기본값은 false입니다.

기록 제한 지정

선택적인 successfulJobsHistoryLimitfailedJobsHistoryLimit는 완료된 Job과 실패한 Job의 보존 개수를 지정합니다. CronJob의 spec 필드에 이러한 필드를 지정합니다.

기본적으로 successfulJobsHistoryLimit는 3으로 설정되고 failedJobsHistoryLimit는 1로 설정됩니다. 이러한 필드 중 하나의 값을 0으로 설정하면 완료 후 Job이 보존되지 않습니다.

CronJob 조사

CronJob의 상태를 확인하려면 다음 명령어를 실행합니다.

kubectl describe cronjob [CRON_JOB]

완료된 CronJob에 의해 생성된 포드를 포함하여 클러스터의 모든 포드 리소스를 보려면 다음을 수행하세요.

kubectl get pods -a

-a 플래그는 지정된 유형의 모든 리소스(이 경우에는 포드)가 표시되어야 한다고 지정합니다.

CronJob 삭제

CronJob을 삭제하려면 다음 명령어를 실행하세요.

kubectl delete cronjob [CRON_JOB]

CronJob을 삭제하면 Kubernetes 가비지 수집기가 연관된 작업을 자동으로 삭제하고, 새로운 작업이 시작되지 않습니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine