• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

CronJob

20.12.31 10:10 작성 조회수 254

1

안녕하세요.

ConcurrencyPolicy 를 forbid로 설정한 예시에서, 

20, 21, 22분에 각각 스케쥴이 실행되도록 설정되었는데, 

이 경우, 20분에 시작한 잡이 22분 20초에 완료되니, 22분에 스케쥴된 잡은 실행되지 않을 거라고 예상했습니다.

그런데 예상과 다르게 20분에 시작된 잡이 종료되자마자 22분 스케쥴에 의해 다시 새로운 잡이 실행된 것으로 보여서,  좀 헷갈립니다.

제가 잘 못 이해한 부분이 있을까요? 

https://kubernetes.io/ko/docs/tasks/job/automated-tasks-with-cron-jobs/#%EB%8F%99%EC%8B%9C%EC%84%B1-%EC%A0%95%EC%B1%85

  • Forbid: 크론 잡은 동시 실행을 허용하지 않는다. 새로운 잡을 실행할 시간이고 이전 잡 실행이 아직 완료되지 않은 경우, 크론 잡은 새로운 잡 실행을 건너뛴다.

답변 3

·

답변을 작성해보세요.

1

안녕하세요.

답변 감사합니다.

새로운 사실을 알게 되었네요. Pending status가 있다는 사실은 곧, 내부에 큐가 있다는 말과 같다고 보면 크게 틀리지 않겠군요.

혹시 Parallelism 과의 관계도 같이 생각해 볼 수 있을까요?

동시에 N개의 잡이 스케쥴링 된다면, 각 잡은 각각 ConcurrencyPolicy에 따라 독립적으로 동작하게 되겠죠?

감사합니다.

0

추가 질문하신 내용이 아래와 같은 세팅을 말씀하시는 걸까요?

--------

apiVersion: batch/v1beta1

kind: CronJob

metadata:

  name: cron-job-2

spec:

  schedule: "20,21,22 * * * *"

  concurrencyPolicy: Forbid

  jobTemplate:

    spec:

      completions: 6

      parallelism: 2            

      template:

        spec:

          restartPolicy: Never

          containers:

          - name: container

            image: kubetm/init

            command: ["sh", "-c", "echo 'job start';sleep 140; echo 'job end'"]

          terminationGracePeriodSeconds: 0

-------

이럴 경우 20분의 job이 완료할려면 파드는 2개씩 생겨서 140초를 소요하고. 끝나면 2개가 더 생기고, 140초 소요되고. 또 끝나면 140초를 더 소요되기 때문에

첫번째 job이 끝나는데 걸리는 시간은 420초라 

21분의 job과, 22분의 Job모두 실행되지 않겠네요.

0

안녕하세요. 

21분에 시작될 Job이, 20분에 Job에 잡이 끝나지 않았기 때문에 Pending중인 상태이지 Skip된 상태는 아닙니다.

22분에 새로운 Job을 생성하려고 하지만, 20분 Job이 끝나지 않았기 때문에 여전히 Pending 중인거고

큐는 하나기 때문에 21분에 생성하지 못한 Job은 삭제가 되고요.

그렇기 때문에 22분대에 20분에 생성한 Job이 종료되면서 현재 Pending중인 22분 job이 바로 시작된거고요.

내부적으로 이렇게 동작한다고 이해하시면 될꺼 같아요.