컨테이너가 제공할 수 있는 워크로드는 다양하다.
웹, 애플리케이션, 데이터베이스와 같이 수동으로 종료할 때까지 장시간 수행하는 종류부터 계산, 이미지 처리, 대규모 데이터 분석, 리포트 생성, 메일 발송 등 특정 작업을 수행한 후 완료해야 하는, 짧은 시간 동안 수행하는 종류 등이 존재한다.
아래와 같이 간단한 계산을 수행하는 컨테이너를 도커로 실행하면, 컨테이너는 실행을 완료하고 종료된다.
docker ps ubuntu expr 3 + 2
반면 동일한 기능을 하는 컨테이너를 쿠버네티스 포드에 생성하여 실행하면, 작업을 수행한 뒤 포드가 완료되고 다시 포드를 생성하여 작업을 수행한다. 쿠버네티스는 기본적으로 컨테이너 실행 상태를 유지하는 방향으로 설정된 restartPolicy 값을 참조하여 임계치에 도달할 때까지 포드 생성과 작업 수행을 반복한다.
restartPolicy
상황에 따른 재시작 유무 설정으로, 포드 내 모든 컨테이너에 적용된다.
Always, Never, OnFailure 값이 올 수 있으며 기본값은 Always이다.
apiVersion: v1
kind: Pod
metadata:
name: math-pod
spec:
containers:
- name: math-add
image: ubuntu
command: ['expr', '3', '+', '2']
restartPolicy: Never
포드의 재시작 횟수는 get pods 명령으로 확인할 수 있다.
Job
대규모 데이터 병렬 처리와 같이 여러 개의 포드가 필요한 작업은 모든 포드가 할당된 작업을 성공적으로 수행했는지 확인한 후 종료해야 한다. 이 때 작업을 성공적으로 완료할 수 있도록 포드를 생성할 수 있는 관리자가 필요한데, 이 관리자 역할을 하는 개념이 Job이다.
Job은 포드 집합을 실행시켜 지정한 작업을 완료한다.
생성 방법
yaml 형식의 정의 파일로 생성할 수 있다.
apiVersion: batch/v1
kind: Job
metadata:
name: math-add-job
spec:
completions: 3 # 성공 횟수
parallelism: 3 # 병렬로 생성하는 포드 수
template:
containers:
- name: math-add
image: ubuntu
command: ['expr', '3', '+', '2']
restartPolicy: Never
- completions
항목을 설정하면, 작업을 성공한 포드 수가 설정값에 도달할 때까지 포드를 하나씩 순차적으로 생성하여 작업을 실행한다. - parallelism
항목을 설정하면, 포드 실행 시 한 번에 설정한 개수의 포드를 병렬 생성하여 작업을 실행한다.
만약 3개 포드를 병렬 실행해서 2개 포드가 작업을 성공했다면, 그 이후로는 나머지 하나의 작업을 성공할 때까지 하나의 포드를 생성하여 작업을 수행한다.
yaml 파일을 작성한 뒤에는 create 명령으로 생성하면 된다.
명령어
# 생성된 job 확인
kubectl get jobs
# 포드 수행 결과 확인
kubectl logs <POD_NAME>
# job 삭제
kubectl delete job <JOB_NAME>
job을 삭제할 경우, job 생성 시 함께 생성되었던 포드도 삭제된다.
참고문서
https://www.slideshare.net/DanielSmith272/whats-new-in-kubernetes