반응형

목차

  1. 잡(Job) 리소스
  2. 잡 리소스 YAML 파일 작성
  3. 잡에서 여러 파드 인스턴스 실행
  4. 잡 스케일링
  5. 잡 파드가 완료되는 데 걸리는 시간 제한하기

이전까지는 계속 지속되어 실행돼야 하는 파드에 대해 다루었습니다. 하지만 작업을 완료한 후에는 종료되는 테스크만 실행하려는 경우가 있을 것입니다. 레플리케이션 컨트롤러, 레플리카셋, 데몬셋은 완료되었다고 간주되지 않는 지속적인 테스크를 실행합니다. 그러나 완료 가능한 테스크에서는 프로세스가 종료된 후에 다시 시작되지 않습니다.

 

  • 리소스
    리소스(Resources)란 시스템에서 사용되는 하드웨어, 소프트웨어 및 데이터와 같은 자원들을 의미합니다. 컴퓨터와 관련된 여러 분야에서 사용되지만 쿠버네티스에서 리소스(Resource)는 컨테이너가 사용할 수 있는 CPU, 메모리, GPU 등의 하드웨어 자원을 의미하는 데 사용됩니다. 컨테이너에 리소스를 할당함으로써, 컨테이너 간에 리소스가 공정하게 분배되어 안정적인 서비스 운영이 가능해집니다.

잡(Job) 리소스

쿠버네티스는 잡(Job) 리소스로 이런 기능을 지원하며, 이전에서 논의된 다른 리소스와 유사하지만 잡은 파드의 컨테이너 내부에서 실행 중인 프로세스가 성공적으로 완료되면 컨테이너를 다시 시작하지 않는 파드를 실행할 수 있습니다. 일단 그렇게 되면 파드는 완료된 것으로 간주됩니다.

 

노드에 장애가 발생한 경우 해당 노드에 있던 잡이 관리하는 파드는 레플리카셋 파드와 같은 방식으로 다른 노드로 다시 스케줄링됩니다. 프로세스 자체에 장애가 발생한 경우, 잡에서 컨테이너를 다시 시작할 것인지 설정할 수 있습니다.

 

예를 들어 잡은 작업이 제대로 완료되는 것이 중요한 임시 작업에 유용합니다. 관리되지 않은 파드에서 작업을 실행하고 완료될 때까지 기다릴 수 있지만 작업이 수행되는 동안 노드에 장애가 발생하거나 파드가 노드에서 제거되는 경우 수동적으로 다시 생성해야 합니다. 특히 잡을 완료하는 데 몇 시간이 걸리는 경우 이 작업을 수동으로 수행한다는 것은 말이 되지 않는 일입니다. 이러한 잡은 데이터를 어딘가에 저장하고 있고, 이 데이터를 변환해서 어딘가로 전송해야 하는 경우를 예시로 들 수 있습니다. 


잡 리소스 YAML 파일 작성
apiVersion: batch/v1                              >  잡의 API 그룹입니다.
kind: Job
metadata:
  name: batch-jop
spec:                                                       >  파드 셀렉터를 따로 지정하지 않았지만 파드 템플릿의 레이블을 
  template:                                                  기반으로 만들어집니다.
    metadata:
      labels:
        app: batch-job
  spec:
    restartPolicy: OnFailure                      >  잡은 기본 재시작 정책(Always)를 사용할 수 없습니다.
      containers:
      - name: main
        image: luksa/batch-job

이 이미지는 정확히 120초 동안 실행된 후 종료되는 프로세스를 호출합니다.

 

파드 스펙에서는 컨테이너에서 실행 중인 프로세스가 종료될 때 쿠버네티스가 수행할 작업을 지정할 수 있습니다. 이 작업은 파드 스펙 속성인 restartPolicy로 수행되며 기본값은 Always입니다. 잡 파드는 무한정 실행하지 않으므로 기본 정책을 사용할 수 없습니다. 따라서 restartPolicy를 OnFailure나 Never로 명시적으로 설정해야 합니다. 이 설정은 컨테이너가 종료될 때 재시작되지 않도록 하는 것입니다. 이는 컨테이너가 종료 후에 재시작되지 않는 이유가 파드를 잡 리소스로 관리하기 때문이 아니라는 뜻이기도 합니다.


잡에서 여러 파드 인스턴스 실행

잡은 두 개 잇아의 파드 인스턴스를 실행해 병렬 또는 순차적으로 실행하도록 구성할 수 있습니다. 이는 잡 스펙에 completions와 parallelism 속성을 설정해 수행합니다.

 

  • 순차적으로 잡 파드 실행하기

잡을 두 번 이상 실행해야 하는 경우 잡의 파드를 몇 번 실행할지를 completions에 설정합니다.

apiVersion:  batch/v1
kind: Job
metadata:
  name: multi-completion-batch-job
spec:
  completions: 5                     > 이 숫자만큼 잡 파드를 순차적으로 생성합니다.
  template:
    <template is the same as in listing 4.11>

이 잡은 차례로 다섯 개의 파드를 실행합니다. 처음에는 파드를 하나 만들고, 파드의 컨테이너가 완료도면 두 번째 파드를 만들어 다섯 개의 파드가 성공적으로 완료될 때까지 위의 과정을 계속합니다. 파드 중 하나가 실패하면 잡이 새 파드를 생성하므로 잡이 전체적으로 다섯 개 이상의 파드를 생성할 수 있습니다.

 

  • 병렬로 잡 파드 실행하기

잡 파드를 하나씩 차례로 실행하는 대신 잡이 여러 파드를 병렬로 실행할 수도 있습니다. 다음 예제에서 볼 수 있는 것과 같이 잡 스펙의 parallelism 속성을 이용해 병렬로 실행할 파드 수를 지정합니다.

apiVersion:  batch/v1
kind: Job
metadata:
  name: multi-completion-batch-job
spec:
  completions: 5
  parallelism: 2    > 2개까지 병렬로 실행할 수 있도록 해줍니다.
  template:
    <template is the same as in listing 4.11>

잡 스케일링

잡이 실행되는 동안 잡의 parallelism 속성을 변경할 수도 있습니다. 이것은 레플리카셋이나 레플리케이션 컨트롤러를 스케일링하는 것과 유사하며, kubectl scale로 relicas 수를 변경할 수도 있습니다.

kubectl scale job multi-complietion-batch-job --replicas 3

잡 파드가 완료되는 데 걸리는 시간 제한하기

잡은 파드가 완료될 때까지 얼마나 기다려야 할까요? 파드가 특정 상태에 빠져서 도무지 완료할 수 없는 경우나 충분히 빠르게 완료할 수 없을 경우 어떻게 해야 할까요?

 

파드 스펙에 activeDeadlineSeconds 속성을 설정해 파드의 실행 시간을 제한할 수 있습니다. 파드가 이보다 오래 실행되면 시스템이 종료를 시도하고 잡을 실패한 것으로 표시합니다.

반응형