Job

  • 단발성으로 연산, 데이터 처리 등을 이유로 자원을 써야하는 경우도 있음
  • 이러한 작업을 Pod로 구현한다면, Pod는 중료 후 재생성 되는 사이클을 반복함
    • restartPolicy: Always가 디폴트이기 때문에 사용자가 삭제하지 않는 한 Pod 는 실행 상태를 유지하는 것이 K8s 의 특성
    • restartPolicy: Never 로 설정하면 한번 실행하고 종료가 되긴 함.

만일 다수의 파드를 생성하고 배치로 스케쥴링 및 관리하고 싶다면 Job 오브젝트를 사용하면 됨. 싶다면?

Job 정의

apiVersion: batch/v1   # 버전 주의
kind: Job
metadata:
	name: my-job
	
spec:
	template:
		spec:
			cotainers:
				- name: math-add
					image: ubuntu
					command: ['expr', '3', '+', '2']
					
			restartPolicy: Never
			
	completions: 3 
	parallelism: 3
  • completion

    • Job을 반복하고자 하는 횟수
    • 파드가 한개씩 생성되며 Job을 실행함.
    • 반복 중 에러가 발생하면 또 다른 파드를 생성해 다시 시도함. 횟수를 채울 때까지 반복됨
  • parallelism

    • 병렬로 실행하고자 하는 파드의 수. completion의 수 내로 설정.
    • 예를 들어 completion=3, parrelism=3 일 경우 파드 3개가 동시에 실행되어 Job을 수행함. 만일 3개 중 2개 완료, 1개 에러일 경우 다시 파드 1개를 생성해서 Job을 실행함. completion 횟수를 채울 때까지 작업 반복.

Job 관련 명령어

  • kubectl get jobs
  • kubectl logs <pod-name> - Job의 output 조회하기
  • kubectl delete jobs <job-name> - Job에 사용된 파드도 함께 삭제됨

CronJob

Job을 주기적으로 실행하고 싶을 때 사용하는 오브젝트

apiVersion: batch/v1betav1   # 버전 주의
kind: CronJob
metadata:
	name: my-cron-job
	
spec:
	schedule: "*/ * * *  *" # 크론 주기 표기함.
	
	jobTemplate:
	
		# Job 생성 때 사용했던 내용 그대로 기입. 
		spec:
			template:
				spec:
					cotainers:
						- name: math-add
							image: ubuntu
							command: ['expr', '3', '+', '2']
							
					restartPolicy: Never
					
			completions: 3 
			parallelism: 3

Resource