개발 이야기/쿠버네티스

쿠버네티스 - 잡과 스케줄러 - 19

석구석구 2021. 10. 22. 00:58

작업을 완료한 후에는, 종료되는 서비스가 있을 수 있다. 쿠버네티스는 '잡' 이라는 리소스로 해당 기능을 지원한다.

잡을 통해, 파드 내부 프로세스가 완료되면 해당 파드를 완료 시킬 수 있다. 물론 완료에 실패하면 이후처리를 결정 할 수 있다. 때문에 잡은 제대로 완료되는 것이 중요한 작업에 매우 유용하다.

 

이러한 작업의 좋은 예는 배치 작업이 있다.

apiVersion: batch/v1
kind: Job
metadata: 
  name: batch-example
spec:
  template:
    metadata:
      labels:
        app: batch-example
    spec:
      restartPolicy: OnFailure
      containers:
        - name: main
          image: 배치를 실행할 이미지
kubectl get jobs // job의 목록을 볼 수 있다.

잡을 직렬 혹은 병렬로 배치해 실행 시킬 수도 있다.

apiVersion: batch/v1
kind: Job
metadata: 
  name: batch-example
spec:
  completions: 5
  ...

completions 옵션을 설정하면 차례대로 5개의 파드를 실행한다.

apiVersion: batch/v1
kind: Job
metadata: 
  name: batch-example
spec:
  completions: 5
  parallelism: 2
  ...

parallelism 옵션을 설정하면 잡은 파드를 해당 갯수만큼 생성하고 병렬로 실행한다.

물론 실행되는 동안 스케일링 할 수 있다. 

kubectl scale job batch-example --replicas 3

 

배치가 특정 시간 이상으로 돌아가는 경우, 실패로 간주하여 끝내야 하는 경우도 있다. activeDeadlineSeconds 속성을 설정하면 파드의 실행 시간을 정할 수 있다. 물론 실패한 경우 재시도 횟수도 지정할 수 있는데 backoffLimit 속성을 사용하면 된다.

 

크론잡

 

사전에 설정된 특정 시간과 주기에 실행해야 하는 작업도 설정 가능하다. 

apiVersion: batch/v1
kind: Job
metadata: 
  name: batch-example
spec:
  schedule: "0,15,30,45 * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: batch-example
        spec:
          restartPolicy: OnFailure
          containers:
            - name: main
              image: 배치를 실행할 이미지

이미 크론잡에 경험이 있는 사람은 알겠지만 분, 시, 일, 월, 요일 순으로 설정이 가능하며 위처럼 설정하면 15분마다 실행되게 된다.

 

다음시간에는 서비스에 대해 깊이 있게 알아보자.