Job

Ethan·2021년 6월 14일
0

Kubernetes

목록 보기
8/16

지속적으로 Task를 실행하는 Object가 아닌, 단일로 Task를 실행하고 완료하는 Resource도 존재한다.
이 Job은 컨테이너 내부의 실행 중인 프로세스가 성공적으로 완료되면 컨테이너를 다시 시작하지 않는 Pod을 생성하게 해준다.

즉 batch job 같은 기능에 어울리는 Resource이다.

Job은 실행중에 Node의 문제가 발생하면, ReplicaSet과 동일하게 다른 Node로 Pod을 배치하고, 컨테이너를 다시 실행할지 말지를 결정한다.

job은 kubernetes API 그룹중 batch/v1에 속한다.

apiVersion: batch/v1
kind: Job
metadata:
  name: batch-job
spec:
  template:
    metadata:
      labels:
        app: batch-job
    spec:
      restartPolicy: ONFailure	-- Job의 재시작 정책이다. Always는 지원하지 않으며, OnFailure나 Never로 지정해야한다.
      containers:
      - name: main
        image: luksa/batch-job

Job은 process를 정상적으로 종료했을 경우 Status가 Complete로 기록된다.
Job의 모든 상태를 보고 싶으면 -a Option을 넣어 조회하면 된다.

Pod이 완전하게 삭제되지 않고 남아있는 이유는 바로 해당 Pod의 Log를 검사할 수 있게 함이다.

Job은 하나의 Task가 아닌 두개 이상의 pod을 생성해 병렬, 순차적으로 process를 실행하도록 구성할 수 있다. 이 설정은 completions, parallelism 속성을 이용해 지정한다.

completions option은 순차적으로 몇개의 pod을 실행할지에 대한 설정값이며, parallelism은 몇개의 job을 병렬로 실행할지를 나타낸다.

이 Job이 종료가 되지 않는 상태라면 무제한으로 Job이 끝나지 않고 유지되게 된다.
이럴땐 activeDeadlineSeconds 속성을 이용해 실행시간을 제한할 수 있다.

Job을 일정 시간마다 실행하고 싶을때는 CronJob을 이용해 실행한다.
Job과는 개념이 비슷하며, Job + Cron의 개념이라고 생각하면 쉽다.

apiVerison: batch/v1beta1
kind: CronJob
metadata:
  name: batch-job-every-fifteen-minutes
spce:
  schedule: "0,15,30,45 * * * *" 	-- cron
  jobTemplate:
   spec:
     template:
       metadata:
         labels:
           app: periodic-batch-job
       spec:
         restartPolicy: OnFailure
         containers:
         - name: main
           image: luksa/batch-job
profile
잘 하고 싶다는 의욕만 넘치는 평범한 개발자

0개의 댓글