1. DaemonSet : 각 노드에 특정 작업을 유지
DaemonSet은 모든 노드에 파드를 배포하고, 항상 해당 파드가 유지되도록 관리하는 역할을 한다. 노드 수준에서 작동하는 애플리케이션(예: 로그 수집기, 모니터링 에이전트 등)을 배포할 때 유용하다.
모든 노드에서 동일한 파드를 하나씩 유지하므로, 클러스터에 새로운 노드가 추가되면 DaemonSet이 자동으로 새 노드에도 파드를 생성한다.
주요 특징
- 노드마다 하나씩 파드 배포: 클러스터 내 모든 노드에 파드가 하나씩 배포되며, 새로운 노드가 추가되면 자동으로 해당 노드에 파드가 생성된다.
- HostPort와 NodeSelector 활용 가능: 특정 포트나 노드의 OS 족건을 설정하여 특정 조건을 가진 노드에만 파드를 배치할 수 있다.
HostPort 설정 예시
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-1
spec:
selector:
matchLabels:
type: app
template:
metadata:
labels:
type: app
spec:
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
hostPort: 18080
- 위 설정은 클러스터의 각 노드에 kubetm.app 이미지를 실행하는 파드를 배포하며, 노드의 HostPort 18080에서 통신한다.
NodeSelector 설정 예시
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-2
spec:
selector:
matchLabels:
type: app
template:
metadata:
labels:
type: app
spec:
nodeSelector:
os: centos
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 8080
위 설정은 os=centos 레이블을 가진 노드에만 파드를 배치하도록 설정한다.
2. Job : 한번만 실행되는 일회성 작업의 스케줄러
Job은 특정 작업을 일회성으로 실행되도록 설정한다. 실행이 완료되면 파드는 자동으로 종료되며, 로그나 데이터 처리를 위한 단일 작업에 유용하다.
주요 특징
- 한 번만 실행 후 종료: Job은 파드가 한번 실행되고 종료된다.
- Parallelism과 Completions 설정 가능: 여러 인스턴스를 동시에 실행하거나, 지정된 횟수만큼 완료되도록 설정할 수 있다.
단일 작업 실행 예시
apiVersion: batch/v1
kind: Job
metadata:
name: job-1
spec:
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start'; sleep 20; echo 'job end'"]
- 이 Job은 kubetm/init 이미지를 실행하는 컨테이너를 배포하고, 20초 동안 대기한 후 종료된다.
병렬 작업 예시
apiVersion: batch/v1
kind: Job
metadata:
name: job-2
spec:
completions: 6
parallelism: 2
activeDeadlineSeconds: 30
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start'; sleep 20; echo 'job end'"]
- 이 설정은 한 번에 2개의 파드를 동시에 실행하며, 총 6번 완료될 때까지 반복한다. activeDeadlineSeconds로 Job 실행의 제한 시간을 설정할 수 있다.
3. CronJob : 주기적으로 실행되는 작업
CronJob은 주기적으로 실행되어야 하는 작업을 예약하는 데 사용된다. 예를 들어 매일 백업을 실행하거나 일정에 따라 데이터를 정리하는 작업을 설정할 때 유용하다.
주요 특징
- 일정에 따른 작업 실행 : CronJob은 지정된 Cron 형식 스케줄을 따르며, 정해진 주기에 따라 작업을 실행한다.
- ConcurrencyPolicy 지원 : Allow, Forbid, Replace 등의 정책을 설정하여 중복 실행을 제어할 수 있다.
매 1분마다 실행되는 CronJob 예시
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron-job
spec:
schedule: "*/1 * * * *" # 매 1분마다 실행
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start'; sleep 20; echo 'job end'"]
- 위 예시에서는 매 1분마다 Job을 실행하도록 설정한다. 작업이 완료되면 대기하다가 1분이 되면 다시 실행된다.
ConcurrencyPolicy 예시 (중복 실행 방지)
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron-job-2
spec:
schedule: "20,21,22 * * * *" # 매 시각 20, 21, 22분에 실행
concurrencyPolicy: Replace # 이전 작업이 실행 중이면 새로운 작업으로 대체
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: container
image: kubetm/init
command: ["sh", "-c", "echo 'job start'; sleep 140; echo 'job end'"]
여기서는 Replace 정책을 사용하여 ,새로운 작업이 시작될 때 이전 작업이 중복 실행되지 않고 대체되도록 설정한다.
정리
리소스 | 설명 | 주요 특징 |
DaemonSet | 모든 노드에 파드를 배치 | 모든 노드에 하나씩 파드 유지, 조건에 맞는 노드 선택 |
Job | 한 번만 실행되는 작업 | 일회성 작업, 병렬 실행 및 완수 횟수 설정 가능 |
CronJob | 주기적으로 실행되는 작업 | 일정에 따른 자동 실행 ConcurrencyPolicy로 중복 제어 |
'DevOps > Kubernetes' 카테고리의 다른 글
쿠버네티스 - Pod 리소스 우선순위 관리 (QoS Classes) (0) | 2024.10.30 |
---|---|
쿠버네티스 - (ReadinessProbe, LivenessProbe) (0) | 2024.10.30 |
쿠버네티스 - Controller(Deployment) (0) | 2024.10.29 |
쿠버네티스 - Controller(Replication Controller, ReplicaSet) (0) | 2024.10.29 |
쿠버네티스 - 환경변수 활용(ConfigMap, Secret) (0) | 2024.10.10 |