[kubernetes] 쿠버네티스 패턴 - 주기적 잡

박원균·2021년 11월 22일
0

Kubernetes

목록 보기
21/24
post-thumbnail

Periodic Job

시간 차원을 추가하고 작업 단위 실행이 시간적 이벤트에 의해 트리거 되도록 하여 배치 잡을 확장합니다.

문제

주기적 잡은 보통 시스템 유지 보수나 관리 작업을 자동화하기 위해 사용됩니다. 또한 주기적으로 실행되어야 하는 특정한 작업을 요구샇는 비즈니스 애플리케이션과 관련이 있습니다.
ex) 파일 전송을 통한 B2B, Db 조회를 통한 애플리케이션 통합 등

시스템 유지보수 목적을 위해 주기적 잡을 관리하는 전통적인 방식은 Cron 혹은 특화된 스케줄링 소프트웨어를 사용하는 것입니다. 하지만 특화된 소프트웨어는 간단한 사용 예에 활용하기에는 비용이 많이 들며 단일 서버에서 실행되는 크론 잡은 관리하기가 어렵고 단일 장애지점(Single point of failure)이 될수도 있습니다.

쿠버네티스 크론잡 구현은 잘 알려진 크론 형식을 이용한 잡 자원 스케줄을 허용하며 개발자들이 시간적 스케줄링 측변보다는 수행될 작업을 구현하는데에 집줍하게 함으로써 여러가지 문제를 해결할 수 있습니다.

해결책

크론잡은 잡 위에서 빌드되기 때문에 배치 잡에 적용이 됩니다. 크론잡 인스턴스는 유닉스 크론탭의 1개 행과 유사하며, 잡의 시간적 측면을 관리합니다. 또한 지정된 시간에 주기적으로 잡을 수행하는 것이 가능합니다.

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: random-generator
sepc:
  schedule: "*/3 * * * *"	# 3분마다 실행하는 크론 정의
  jobTemplate:
    spec:
      template:			# 일반 잡과 동일한 정의를 사용하는 잡 템플릿
        spec:
          containers:
          - image: k8spatterns/random/generator:1.0
            name: random-genrator
            command: ["java","-cp","/","RandomRunner","/number.txt","10000"]
          restartPolicy: OnFailure

시간적 측면을 정의하기 위한 추가 필드

  • .spec.schedule
    잡의 스케줄을 지정하기 위한 크론탭 항목
  • .spec.startngDeadlineSeconds
    스케줄 시간이 누락된 경우 작없 ㅣ간에 대한 마감시간을 나타냅니다.
    일부 사용 예에서 작업은, 특정 시간 내에 실행된 경우에만 유효하고 늦게 실행된 경우에는 소용없습니다

    ex) 잡이 컴퓨팅 자원 부족이나 의존성 누락으로 요청된 시간에 실행되지 않았따면 처리 예정인 데이터가 이미 쓸모없어졌기 때문에 실행을 안 하는것이 더 좋을수 있습니다.
  • .spec.concurrencyPolicy
    동일한 크론잡에 의해 생성된 잡을 동시에 실행하는 방법을 정의합니다.
    기본 동작인 Allow는 이전 잡이 완료되지 않았어도 새로운 잡 인스턴스를 생성합니다. 이런 식의 동작을 원하지 않는다면 Forbid 값으로 현재 잡이 완료되지 않았다면 다음 실행을 건너뛰거나 Replace 값으로 현재 실행 중인 잡을 취소하고 해로운 잡을 시작할 수 있습니다.
  • .spec.suspend
    이미 시작된 실행에는 영향을 주지 않고 모든 후속 실행을 일시 중단하는 필드입니다.
  • .spec.successfulJobHistoryLimit.spec.failedJobsHistoryLimit
    audit 목적으로 완료한 잡과 실패한 잡을 각각 몇 개 유지시켜야 하는지를 지정하는 필드입니다.
profile
함바라기

0개의 댓글