티스토리 뷰

2022.05.22 - [Devops 2회차/K8S Study] - k8s-07_워크로드 API(Daemonset, Statefulset)

 

참조

http://www.yes24.com/Product/Goods/102847901

 

쿠버네티스 완벽 가이드 - YES24

일본 아마존 쿠버네티스 분야 베스트셀러 1위! 쿠버네티스 버전 1.18로, 쿠버네티스의 기본부터 실무까지 총망라! 쿠버네티스 환경, 버전, kubectl 버전, 그 외 시스템 버전 업데이트! 쿠버네티스 1.1

www.yes24.com

JOB

앞서 다룬 여러 워크로드 API들과 동일하게 JOB 역시 하나의 Kind이고 Pod를 띄우는 워크로드이다.

JOB은 컨테이너를 사용하여 딱 한 번만 실행되는 리소스이다.

 

일반적인 replica set으로 구성되는 워크로드와 구분한다면,
JOB으로 생성된 파드는 명령받은 동작을 한 뒤에 정지되는 것으로 그 역할을 끝낸다는 것이다.

deployment로 구성된 파드가 정지된다면 그것은 에러이지만 잡의 경우는 정상으로 인식된다는 것이다.

 

공식 가이드를 따라 JOB 을 적용해보자
(https://kubernetes.io/ko/docs/concepts/workloads/controllers/job/)

 

## https://kubernetes.io/ko/docs/concepts/workloads/controllers/job/


apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

job.batch/pi 가 성공적으로 생성되었다.
그 결과를 확인하면

일반적인 Running이나 Error가 아닌 위와 같은 Completion이 표시된다.

 

RestartPolicy

만일 구성하려는 잡이 꽤나 많은 시간을 소요한다면 restartPolicy를 신중하게 선택해주어야 한다.

restartPolicy는 2가지의 옵션이 있다.

잡이 동작중인 상황에서 프로세스를 강제로 종료하거나 예기치 못한 상황으로 종료되는 에러 상황이라 가정해보자.
각 Policy는 아래와 같이 동작한다.

Never: 문제가 생긴경우 신규 파드가 생성되어 다시 잡을 시작한다.
OnFailure: 동일한 파드를 사용하여 잡을 다시 시작한다. (restart 값이 증가)

 

큰 차이점은 만일 기존에 사용중인 파드를 계속 쓰는지 말 것인지 여부이다.
데이터와 관련된 잡을 복잡하게 수행하는 로직이라면 PV나 hostPath 마운트 설정 없이는 Never의 경우 모든 데이터가 유실된다.

 

Completions, Parallelism, BackoffLimit, ttlSecdonsAfterFinished

어느정도 복잡한 잡을 다루려면 이 세가지 옵션은 잘 알아두는 것이 좋다.

Completion: 총 몇 번 성공해야 끝낼까?
Parallelism: (병렬작업) 동시에 몇 개의 파드로 작업할까?
BackoffLimit: 총 몇 번까지 실패는 그냥 넘어갈까?

하지만 여기서 헷갈리면 안되는 것이 하나 있다.
Completion과 Backofflimit의 관계를 잘 이해하고 있어야 한다.

만일 Completion: 1 이고, BackoffLimit: 0 인 설정으로 잡을 구성하였다면,
설계자는 한 번의 성공시에 잡이 종료되기를 의도하고 설계하였겠지만, 실패 허용치가 없는 셈이다.
즉, 성공 유무와 관계 없이 무조건 1회만 실행하고 종료되는 잡이 되어 버리는 것이다.

 

위 세개의 조합에 따라 잡의 큐를 지정하고, 동작하는 것이 완전히 달라지기 때문에 혹시나 복잡한 잡을 구성한다면
추가적인 정보와 변수간의 관계를 더 알아보고 구성하기를 권한다.

 

ttlSecdonsAfterFinished: 몇 초후에 잡을 삭제할까?

위 옵션들과 별개로 이건 단순하게 몇 초후에 잡을 삭제시킬지에 대한 설정이다.
잡은 종료 후에 삭제되지 않고 계속 남아있기 때문에 계속해서 쌓여서 관리하는데 어려움을 겪기보다 적절한 값을 지정하는 것도 나쁘지 않다.