• [Kubernetes Workloads] 잡(Job)
    아키텍처 공부/Cloud 2022. 10. 9. 09:00
    반응형

     잡(Job)은 특정 작업을 실행하기 위해 하나 이상의 파드를 만든다. 잡이 완료되면 파드를 종료하고, 작업이 성공적으로 완료되었음을 보고한다.

     

     만약 잡이 아닌 단일 파드를 사용하여 어떤 작업을 진행할 경우를 생각해 보자. 파드가 실행 중인 노드가 갑자기 종료되면 어떻게 될까? 수행된 작업은 어떻게 될까? 분실될 것이다. 어떤 이유로든 파드는 종료되면 다시 시작되지 않는다.

     잡은 이러한 유형의 실패를 처리하는 메커니즘을 제공한다. 다른 쿠버네티스 컨트롤러와 달리 잡은 완료(Completion) 때까지 작업을 관리한다. 어떤 면에서 잡이 원하는 상태는 완료이다.

     

     클러스터에 잡 생성된다. 컨트롤러(=잡)는 작업 대한 파드를 설계한다. 잡은 파드를 모니터링한다. 노드 오류가 발생하고 파드가 손실되면 잡은 작업이 완료되지 않았음을 인식한다. 잡은 파드가 다른 노드에서 실행되도록 다시 예약한다. 잡은 작업이 완료될 때까지 파드를 계속 모니터링한다. 잡이 완료되면 작업 컨트롤러가 완료된 작업 연결된 모든 파드를 제거한다. 

     

    잡 정의 방법

     작업을 정의하는  크게  가지 방법이 있다. 비병렬(non-parallel)과 병렬(parallel)이다.

     

     비병렬 잡 번에 하나의 파드만 생성한다. 물론 파드가 성공적으로 종료되지 않으면 다시 생성된다. 이러한 잡은 파드가 성공적으로 종료되거나 완료 횟수가 정의된 경우 필요한 완료 횟수에 도달하면 완료된다.

     

     병렬 잡 병렬 처리 값이 정의되어 있는 잡으로, 여러 파드가 해당 잡에서 동시에 작동하도록 예약되어 있다. 비병렬 잡과 마찬가지로 완료횟수를 설정할 수 있다. 성공적으로 종료된 파드 수가 완료 횟수에 도달하면 병렬 작업이 완료된 것으로 간주한다.

     

    잡의 매니페스트

       restartPolicy

        잡 메니페스트에 restartPolicy가 정의된다. restartPolicy를 Never로 설정해보자. 즉, 어떤 이유로든 컨테이너와 파드가 실패하면, 전체 파드가 실패하고 잡은 새 파드를 실행하여 파드 실패에 응답한다. 잡에 사용할 수 있는 다른 restartPolicy 옵션은 OnFailure이다. 이 경우 파드는 동일한 노드에 남아 있고, 컨테이너만 재시작된다. 

     

       backoffLimit

        애플리케이션 실패가 가능하거나 예상되는 경우 backoffLimit 필드를 사용할 수 있다. BackoffLimit은 잡을 실패한 것으로 간주하기전까지 재시도할 횟수를 지정한다. 기본값은 6이다. 이렇게 하면 재시작 루프에 빠지는 것을 중지할 있습니다. 실패한 파드는 10초, 20초, 40초  최대 6분까지 다시 생성 될때마다 순차적으로 재시작 대기 시간이 증가하며 다시 생성된다. 파드가 계속 실패하여 6 작업이 실패하고 backoffLimit 초과가 원인으로 지정된다. backoffLimit 도달하기 전에 파드가 성공하면 카운터가 재설정된다.

     

    병렬 잡

     병렬 잡은 spec.parallelism 값을 1보다 크게 설정하면 된다. 병렬 잡에는 다시 두 가지 유형이 있다. 하나는 고정적인 작업 완료 횟수(fixed task completion count)가 있고, 다른 하나는 작업 큐(queue)을 처리하는 것이다.

     

      고정적인 작업 완료 횟수

        만약 spec.parallelism 값을 2로 설정하고, spec.completions 값을 3으로 설정한다고 가정해보자. 병렬 잡은 한번에 최대 2개의 파드를 생성하여 작업을 수행한다. 파드1, 파드2를 생성하고 파드1이 성공하면, 파드3을 새로만들어 파드3, 파드2이되고 파드2, 파드3이 성공하면 성공 횟수가 3번이 되므로 잡이 성공한다.

     

      작업 큐

       spec.parallelism 값을 설정하고, spec.completions 설정하지 않은 상태로 두어 작업 대기열을 처리하는 병렬 작업을 만든다. 예를들어 spec.parallelism 3으로 설정된 경우 잡은 3개의 파드 동시에 실행한다. 잡  파드  하나가 작업을 성공적으로 완료하는 즉시 모든 작업을 완료된 것으로 간주한다

     

     

    cascade 옵션

    잡을 삭제하되, 잡의 파드를 보관하려면 --cascade false 플래그를 지정하자

    kubectl delete jobs my-job --cascade false
    반응형

    댓글

Designed by Tistory.