[NKS] K8S Cron Job으로 PVC 청소하기 🫧🧽

2025. 10. 17. 11:46·K8S & Docker

문제 상황

서버 가용량 모니터링 사이트를 만드는데, 가용량 지표를 다운로드 받는 망과 내가 작업할 수 있는 망이 서로 달라서 지표를 엑셀파일을 통해서만 확인할 수 있다. 어찌보면 API가 엑셀인 셈..

가용량은 보통 주3회 수집하는데, NKS로 구성된 모니터링 사이트의 pvc에 주 3회 엑셀파일이 쌓이게 되어 이를 주기적으로 청소할 필요가 느껴졌다.

 

 

Cron

특정한 시간마다 어떤 작업을 자동으로 수행하고 해주고 싶을때 사용하는 명령어가 Cron이다.

Cron은 특정 시간에 특정 작업을 수행하게 해주는 스케쥴링 역할을 한다.

Cron tab은 cron 작업을 설정하는 파일을 말한다. cron 프로세스는 /etc/crontab 파일에 설정된 것을 읽어서 작업을 수행한다.

Batch와의 차이점?

Batch란?

데이터를 일괄적으로 모아서 한번에 처리하는 작업을 의미한다.

신용카드에서 돈이 빠져나갈때도 배치처리를 하고 (정산작업), 포인트 처리를 할때도 배치 처리를 한다.

사용자에게 빠른 응답이 필요하지 않은 서비스에 적용하며, 특정 시간 이후에는 자원을 거이 소비하지 않는 것이 특징이다.

보통 Cron을 사용하여 Batch작업을 처리한다.

 

 

CronJob 생성하기

CronJob은 반복 일정에 따라 job을 만든다.

Job

하나 이상의 파드를 생성하고 지정된 수의 파드가 성공적으로 종료될 때까지 계속해서 파드이 실행을 재시도한다. 파드가 성공적으로 완료되면 성공적으로 완료된 job을 추적한다.

Cron 스케쥴 문법

# ┌───────────── 분 (0 - 59)
# │ ┌───────────── 시 (0 - 23)
# │ │ ┌───────────── 일 (1 - 31)
# │ │ │ ┌───────────── 월 (1 - 12)
# │ │ │ │ ┌───────────── 요일 (0 - 6) (일요일부터 토요일까지;
# │ │ │ │ │                                   특정 시스템에서는 7도 일요일)
# │ │ │ │ │                                   또는 sun, mon, tue, wed, thu, fri, sat
# │ │ │ │ │
# * * * * *

https://kubernetes.io/ko/docs/concepts/workloads/controllers/cron-jobs/#크론-스케줄-문법

위의 링크를 참고하길 바란다.

 

 

내가 만들 cron job

오늘 날짜를 기준으로 15일 전의 엑셀파일을 pv에서 지우도록 yaml을 구성해봤다.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: excel-cleaner-cronjob
spec:
  schedule: "0 0 * * 0"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: file-cleaner
            image: alpine:latest
            # 오늘 날짜 기준으로 15일 이상된 엑셀 파일을 삭제한다
            command: ["/bin/sh", "-c", "find /data -name '*.xlsx' -mtime +14 -delete"]
            volumeMounts:
            - name: excel-volume
              mountPath: /data
          volumes:
          - name: excel-volume
            persistentVolumeClaim:
              claimName: intern-backend-pvc
          restartPolicy: Never
      activeDeadlineSeconds: 60

yaml 뜯어보기

spec:
  schedule: "0 0 * * 0"

매주 일요일 자정에 실행한다.

jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: file-cleaner
            image: alpine:latest

경량화된 이미지인 alpine 사용

 image: alpine:latest
            # 오늘 날짜 기준으로 15일 이상된 엑셀 파일을 삭제한다
            command: ["/bin/sh", "-c", "find /data -name '*.xlsx' -mtime +14 -delete"]
            volumeMounts:
            - name: excel-volume
              mountPath: /data
          volumes:
          - name: excel-volume
            persistentVolumeClaim:
              claimName: intern-backend-pvc
          restartPolicy: Never
      activeDeadlineSeconds: 60

command: find명령어를 사용해서 오늘 날짜 기준으로 15일 전의 엑셀 파일을 delete 명령어를 삭제한다

volume과 삭제 로직

  1. cron이 실행되면 job의 pod안에서 excel-volume이라는 pv가 생성된다.
  2. 현재 cluster의 pvc인 intern-backend-pvc가 excel-volume이라는 pv를 통해 /data 폴더와 연결된다.
  3. find명령어는 /data 폴더(실질적으로 intern-backend-pvc)를 탐색하며 15일된 파일을 삭제한다.
  4. delete 명령어를 통해 삭제한다.

 

Cron Job 확인해보기

# kubectl get cronjob excel-cleaner-cronjob
NAME                    SCHEDULE    TIMEZONE   SUSPEND   ACTIVE   LAST SCHEDULE   AGE
excel-cleaner-cronjob   0 0 * * 0   <none>     False     0        <none>          55s

참고자료

https://spidyweb.tistory.com/138

https://aws.amazon.com/ko/what-is/batch-processing/

https://kubernetes.io/ko/docs/concepts/workloads/controllers/cron-jobs/

'K8S & Docker' 카테고리의 다른 글

[NKS] NKS + Prometheus + Loki + Promtail로 로그 수집하고 Ncloud Storage(또는 Object Storage) 에 로그 보관하기  (0) 2025.11.06
[NKS] NKS NAS 볼륨 CSI를 사용해 두개 이상의 pod끼리 파일 공유하기  (1) 2025.10.27
[NKS] K8S + uvicorn 에서 표준출력을 활용해 custom log를 남겨보기  (1) 2025.10.27
'K8S & Docker' 카테고리의 다른 글
  • [NKS] NKS + Prometheus + Loki + Promtail로 로그 수집하고 Ncloud Storage(또는 Object Storage) 에 로그 보관하기
  • [NKS] NKS NAS 볼륨 CSI를 사용해 두개 이상의 pod끼리 파일 공유하기
  • [NKS] K8S + uvicorn 에서 표준출력을 활용해 custom log를 남겨보기
jjungking
jjungking
쩡킹의 고상한 코딩 이야기
  • jjungking
    jjungking
    jjungking
  • 전체
    오늘
    어제
    • 분류 전체보기 (19)
      • Cloud (2)
      • K8S & Docker (4)
      • Linux (3)
      • Next.js & React (3)
      • SpringBoot (2)
      • OS (0)
      • Network (1)
      • AWS (1)
      • Git (1)
      • OpenSource (1)
      • 회고록 (1)
      • 기술세션 공부하기 (0)
      • Certi (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    NCP
    ec2
    cronjob
    네이버클라우드플랫폼
    AWS
    Grafana
    RDS
    rds이관
    Husky
    Nclouder
    HikariCP
    ncloud
    promtail
    uncontrolledinput
    nks
    리눅스시스템프로그래밍
    objectstorage
    k8s
    githook
    Loki
    controlledInput
    Helm
    ec2느릴때
    오픈소스기여
    네이버클라우드
    http응답느릴때
    uvicorn
    springboot
    aws이관
    ReactHookForm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
jjungking
[NKS] K8S Cron Job으로 PVC 청소하기 🫧🧽
상단으로

티스토리툴바