ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿠버네티스 컨트롤러 : 크론잡(CronJob)
    Kubernetes 2018. 6. 27. 09:00
    크론잡은 잡을 시간 기준으로 관리하는 합니다. 지정된 시간에 한번만 잡을 실행하거나 주기적으로 지정된 시간동안 반복하면서 잡을 실행합니다. 시간을 지정하는 형식은 리눅스나 유닉스에서 많이 사용하는 크론 형식으로 지정합니다.
    크론잡은 지정된 시간에 잡을 실행하는데 정확하게 한번에 하나의 잡만을 실행하는게 아니라, 2개의 잡이 실행될수도 있고 잡이 실행되지 않을수도 있습니다. startingDeadlineSeconds 옵션을 크게 설정하거나 아니면 따로 설정하지 않고 concurrencyPolicy 옵션을 Allow로 두면 잡은 최소한 한번(at least once)은 실행됩니다. 크론잡은 잡을 생성하는 역할만 하고 잡이 실행되고 나면 일반 잡과 마찬가지로 작동합니다.

    다음 내용을 cronjob.yaml로 저장하고 실행시켜 봅니다.
    kubectl apploy -f cronjob.yaml
    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 from the Kubernetes cluster
              restartPolicy: OnFailure

    간단한 명령은 yaml파일을 작성하지 않고도 다음처럼 kubectl run을 이용해서 바로 사용할 수도 있습니다.
    kubectl run hello --schedule="*/1 * * * *" --restart=OnFailure --image=busybox -- /bin/sh -c "date; echo Hello from the Kubernetes cluster"
    cronjob "hello" created
    실행된 cronjob은 kubectl get cronjobs 명령으로 확인해 볼 수 있습니다. 크론잡이 실행한 잡은 kubectl get jobs 를 하면 크론잡 이름인 hello와 동일하게해서 잡들이 실행된걸 확인할 수 있습니다.



    삭제는 다른것들과 마찬가지로 kubectl delete cronjobs hello명령을 사용하면 됩니다. 그럼 크론잡이 생성했던 잡들까지 모두 한꺼번에 지워집니다.
        
    크론잡 설정
    .spec.schedule 옵션에 "0 * * * *", "@hourly" 이렇게 크론형식으로 시간을 설정하면 지정된 시간에 잡이 실행됩니다. .spec.jobTemplate 옵션은 크론잡에서 실행할 잡에 관한 내용을 적어줍니다. .spec.startingDeadlineSeconds 옵션은 크론잡이 지정된 시간에 실행되지 못한경우 여기 설정한 시간을 지나게 되면 그 시간에 크론잡이 실행되지 않게 됩니다. 이 옵션을 설정하지 않으면 실행시간이 좀 지나더라도 제약 없디 잡이 실행되게 됩니다. .spec.concurrencyPolicy옵션은 크론잡이 실행하는 잡의 동시성을 관리하는 역할을 합니다. 기본값은 Allow이고 크론잡이 여러개의 잡들을 동시에 실행할 수 있게 합니다. Forbid로 설정하면 잡을 동시에 실행하지 않게 합니다. 만약 이전에 실행했던 잡이 아직 완료되지 않고 실행중인 상태에서 새로운 잡을 실행해야할 시간이 됐다고 하면 크론잡은 그 타이밍에는 새로운 잡을 실행하지 않고 다음 지정된 시간에 잡을 실행시킵니다. Replace로 설정한 경우에 이전에 실행했던 잡이 실행중인 상태에서 새로운 잡을 실행할 시간이 되면, 이전에 실행중이던 잡을 새로운 잡으로 대체합니다.
    .spec.suspend 옵션을 true로 지정하면 더이상 크론잡이 실행되지 않고 멈춰있게 됩니다. 이때 기존에 실행중이던 잡을 멈추지는 않습니다. 기본값은 false입니다.
    .spec.successfulJobsHistoryLimit, .spec.failedJobsHistoryLimit 옵션들은 잡의 성공실패 내역을 몇개 까지 기록해 둘지에 대한 옵션입니다. .spec.successfulJobsHistoryLimit의 기본값은 3이고 .spec.failedJobsHistoryLimit의 기본값은 1입니다. 값을 0으로 설정하면 잡이 종료된 다음에 기록을 남기지 않습니다.







    댓글

Designed by Tistory.