5-4. Job/CronJob

황인권·2025년 2월 21일

Kubernetes

목록 보기
34/37

Batch 프로그램이란?

  • 우리가 여태까지 구성 했던 앱(프로그램)은 상시로 실행이 되어야 하는 앱이였다.
    • API 서버, 데이터베이스 등
  • 그러나 실제로는 이렇게 상시로 실행되고 있는 앱 이외에도 일회성으로 실행되고 제 역할을 다하면 종료되어 버리는 프로그램도 실행이 필요하다.
    • 이러한 프로그램 실행 단위를 Job이라고 부른다.
    • 랭킹 집계 Job, 부정 이용자 처리 Job
      • 보통 여러 데이터를 일괄적으로 가공하는 작업을 많이 하는데, 이러한 일괄 작업을 Batch라고 한다.

쿠버네티스의 Job 오브젝트

  • 쿠버네티스의 Job 오브젝트를 통해 만들어진 Pod는 다른 오브젝트들과 다르게, Pod가 계속 가동 중인 상태를 유지하려 하지 않는다.
    • 일회성으로 Pod안에 들어있는 컨테이너들이 모두 실행이 종료되면, 그대로 사라져버리는 속성을 가지고 있다.

일정 주기마다 Job 오브젝트를 실행하는 방법

  • 실제로 어떤 Batch 작업을 위해 Job 오브젝트를 매번 생성하는 것은 매우 번거롭다.
    • 그래서 쿠버네티스에는 Cron.Job이라는 오브젝트가 있다.
    • 5분마다, 매주 일요일 오후 3시마다 이런식으로 정해진 시간에 알아서 Job을 생성해주는 오브젝트가 바로 CronJob이다.

Job/CronJob 실습

DB 접속을 위한 Secret 설정

  • 아래와 같이 DB 접속 정보가 담긴 Secret 오브젝트를 생성하자.
apiVersion: v1
kind: Secret
metadata:
  name: mini-project-secret
  namespace: default
data:
  DB_HOST: bXlzcWwtMC5teXNxbC5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2Fs
  DB_USER: cm9vdA==
  DB_PASS: c3BhcnRh
  DB_DATABASE: c3BhcnRh

Job을 직접 생성해서 동작 테스트하기

  • DB에 접속하며, user_code가 '00000000'인 유저를 삭제하는 간단한 Job이다.
apiVersion: batch/v1
kind: Job
metadata:
  name: eightzero-delete-job
  namespace: default
spec:
  template:
    spec:
      containers:
      - name: mysql-client
        image: mysql:8.0
        env:
        - name: MYSQL_HOST
          valueFrom:
            secretKeyRef:
              name: mini-project-secret
              key: DB_HOST
        - name: MYSQL_USER
          valueFrom:
            secretKeyRef:
              name: mini-project-secret
              key: DB_USER
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mini-project-secret
              key: DB_PASS
        - name: MYSQL_DATABASE
          valueFrom:
            secretKeyRef:
              name: mini-project-secret
              key: DB_DATABASE
        command: ["sh", "-c", "mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE -e \"DELETE FROM users WHERE user_code = '00000000';\""]
      restartPolicy: Never



1분 주기로 실행되는 CronJob 만들기

apiVersion: batch/v1
kind: CronJob
metadata:
  name: eightzero-delete-cronjob
  namespace: default
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: mysql-client
            image: mysql:8.0
            env:
            - name: MYSQL_HOST
              valueFrom:
                secretKeyRef:
                  name: mini-project-secret
                  key: DB_HOST
            - name: MYSQL_USER
              valueFrom:
                secretKeyRef:
                  name: mini-project-secret
                  key: DB_USER
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mini-project-secret
                  key: DB_PASS
            - name: MYSQL_DATABASE
              valueFrom:
                secretKeyRef:
                  name: mini-project-secret
                  key: DB_DATABASE
            command: ["sh", "-c", "mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE -e \"DELETE FROM users WHERE user_code = '00000000';\""]
          restartPolicy: Never
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3


profile
inkwon Hwang

0개의 댓글