CronJob으로 자동화된 작업 실행하기

CronJob으로 자동화된 작업 실행하기

이 페이지에서는 쿠버네티스 CronJob 오브젝트를 사용해 자동화된 작업을 실행하는 방법을 보여줘요.

출처: 문서

본문

시작하기 전에

  • 실행 중인 쿠버네티스 클러스터(버전 1.21 이상)가 필요하다. 이 튜토리얼은 batch/v1 API를 사용한다. 클러스터가 batch/v1 CronJob API를 지원하지 않는 경우 해당 API 버전을 확인해라. 크론 작업은 구성 파일이 필요하다.

CronJob 만들기

크론 작업은 구성 파일이 필요해요. 다음은 매분 간단한 시연 작업을 실행하는 CronJob의 매니페스트입니다:

다음 명령으로 예시 CronJob을 실행해요:

kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml

출력은 다음과 비슷합니다:

cronjob.batch/hello created

크론 작업을 만든 뒤 다음 명령으로 상태를 확인해요:

kubectl get cronjob hello

출력은 다음과 비슷합니다:

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        <none>          10s

명령의 결과에서 알 수 있듯이 크론 작업은 아직 어떤 작업도 스케줄하거나 실행하지 않았어요. 약 1분 안에 작업이 생성될 때까지 기다려요:

kubectl get jobs --watch

출력은 다음과 비슷합니다:

NAME               COMPLETIONS   DURATION   AGE
hello-4111706356   0/1                      0s
hello-4111706356   0/1           0s         0s
hello-4111706356   1/1           5s         5s

이제 "hello" 크론 작업이 스케줄한 실행 중인 작업 하나를 보았어요. 작업을 계속 보지 않고 크론 작업을 다시 확인해 작업을 스케줄했는지 볼 수 있어요:

kubectl get cronjob hello

출력은 다음과 비슷합니다:

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        50s             75s

크론 작업 helloLAST SCHEDULE에 지정된 시간에 작업을 성공적으로 스케줄했음을 볼 수 있어요. 현재 활성 작업은 0개로, 작업이 완료되었거나 실패했음을 의미합니다.

이제 마지막으로 스케줄된 작업이 만든 파드를 찾아 그중 하나의 표준 출력을 확인해요:

작업 이름은 파드 이름과 달라요.

# Replace "hello-4111706356" with the job name in your system
pods=$(kubectl get pods --selector=job-name=hello-4111706356 --output=jsonpath={.items[*].metadata.name})

파드 로그를 보여줘요:

kubectl logs $pods

출력은 다음과 비슷합니다:

Fri Feb 22 11:02:09 UTC 2019
Hello from the Kubernetes cluster

CronJob 삭제하기

크론 작업이 더 이상 필요 없으면 kubectl delete cronjob <cronjob name>으로 삭제해요:

kubectl delete cronjob hello

크론 작업을 삭제하면 그것이 만든 모든 작업과 파드가 제거되고 추가 작업을 만드는 것도 중지돼요. 작업 제거에 대해 더 읽으려면 garbage collection을 참고하세요.

더 알아보기 (Learn more)