Kubernetes의 DaemonSet, CronJob, Job

1. 개요

Kubernetes에서는 특정 작업을 수행하는 Pod를 다양한 방식으로 배포할 수 있다. 그중 DaemonSet, CronJob, Job은 특정 목적을 가진 Pod를 실행할 때 사용하는 중요한 리소스 유형이다.

  • DaemonSet: 모든 노드에서 특정 Pod가 실행되도록 보장
  • Job: 특정 작업을 일정 횟수 실행한 후 종료
  • CronJob: 정해진 스케줄에 따라 Job을 실행

이 문서에서는 각 개념을 자세히 살펴보고, 실제 활용 사례와 YAML 예제를 제공한다.


2. DaemonSet

2.1 DaemonSet이란?

DaemonSet은 클러스터의 모든 노드에서 특정 Pod가 반드시 실행되도록 보장하는 컨트롤러이다. 노드가 추가되면 자동으로 Pod를 배포하고, 노드가 제거되면 관련 Pod도 함께 제거된다.

📌 DaemonSet이 유용한 경우

  • 로그 수집 (Fluentd, Filebeat)
  • 모니터링 에이전트 (Prometheus Node Exporter)
  • 네트워크 플러그인 (CNI, Kube-proxy)

2.2 DaemonSet YAML 예제

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: example-daemonset
spec:
selector:
matchLabels:
app: daemon-example
template:
metadata:
labels:
app: daemon-example
spec:
containers:
- name: daemon-container
image: busybox
command: ["/bin/sh", "-c", "while true; do echo Daemon running; sleep 10; done"]

이 설정은 모든 노드에서 daemon-container가 실행되도록 보장한다.


3. Job

3.1 Job이란?

Job은 특정 작업을 일정 횟수 실행한 후 종료되는 Kubernetes 리소스이다.
Pod가 종료되더라도 Kubernetes가 Job을 다시 생성하여 원하는 횟수만큼 실행이 보장된다.

📌 Job이 유용한 경우

  • 데이터베이스 마이그레이션
  • 일회성 데이터 처리
  • 대량의 데이터를 병렬 처리

3.2 Job YAML 예제

apiVersion: batch/v1
kind: Job
metadata:
name: example-job
spec:
completions: 3
parallelism: 2
template:
metadata:
labels:
job: example
spec:
containers:
- name: job-container
image: busybox
command: ["sh", "-c", "echo Job Running; sleep 10"]
restartPolicy: Never

이 설정은 동시에 2개의 Pod를 실행하며, 총 3번 완료되면 Job이 종료된다.


4. CronJob

4.1 CronJob이란?

CronJob은 리눅스의 cron 스케줄러와 유사하게 특정 시간이나 주기에 맞춰 Job을 실행하는 리소스이다.

📌 CronJob이 유용한 경우

  • 매일 자정에 데이터 백업
  • 일정 시간마다 로그 정리
  • 주기적인 이메일 전송

4.2 CronJob YAML 예제

apiVersion: batch/v1
kind: CronJob
metadata:
name: example-cronjob
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: cronjob-container
image: busybox
command: ["sh", "-c", "echo CronJob Running; sleep 10"]
restartPolicy: OnFailure

이 설정은 5분마다 cronjob-container를 실행한다.


5. DaemonSet, Job, CronJob 비교

리소스 유형실행 방식주요 사용 사례Pod 종료 후
DaemonSet모든 노드에서 실행로그 수집, 모니터링 에이전트지속 실행
Job일정 횟수 실행 후 종료데이터 처리, 일회성 작업실행 후 삭제 가능
CronJob정해진 스케줄에 따라 실행백업, 정기 작업실행 후 삭제 가능

6. 결론

Kubernetes에서 DaemonSet, Job, CronJob을 활용하면 다양한 방식으로 워크로드를 실행할 수 있다.

  • DaemonSet노드 단위의 서비스 실행
  • Job일회성 또는 반복 횟수 제한 작업 실행
  • CronJob스케줄링된 작업 실행

각 리소스를 적절히 활용하면 Kubernetes 환경에서 효율적으로 애플리케이션을 운영할 수 있다. 🚀

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다