[Kubernetes] DaemonSet이란 무엇인가
Kubernetes DaemonSet의 개념과 사용 목적, 적용 순서, 주의사항을 예제 YAML과 함께 정리합니다.
DaemonSet이란?
DaemonSet은 Kubernetes 클러스터에 여러 노드가 존재할 때
모든 노드(또는 특정 조건을 만족하는 노드)에 파드를 하나씩 실행하도록 보장하는 리소스입니다.
일반적인 Deployment는 원하는 개수만큼 파드를 실행하지만,
DaemonSet은 노드 수에 종속되어 동작한다는 점이 가장 큰 차이점입니다.
사용 목적
DaemonSet은 주로 시스템 레벨 작업을 위해 사용됩니다.
- 클러스터의 모든 노드에 특정 파드를 실행해야 할 때
- 노드 단위로 반드시 필요한 작업이 있을 때
- 노드가 추가될 경우 자동으로 해당 노드에 파드 배치가 필요할 때
대표적인 사용 사례는 다음과 같습니다.
- 로그 수집 에이전트 (Fluentd, Filebeat 등)
- 모니터링 에이전트 (Node Exporter 등)
- 네트워크 플러그인
- 보안 에이전트
여러 노드 환경에서는
각 노드마다 로그 수집이나 모니터링이 필요하기 때문에
DaemonSet이 필수적으로 사용됩니다.
DaemonSet 예시
아래는 기본적인 DaemonSet YAML 예시입니다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: example-daemonset
namespace: default
spec:
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-container
image: example-image
이 DaemonSet은
클러스터에 존재하는 모든 노드에 example-container 파드를 하나씩 실행합니다.
사용 순서
1. DaemonSet 생성
DaemonSet YAML 파일을 클러스터에 적용합니다.
kubectl apply -f daemonset.yaml
적용 후 노드 수만큼 파드가 생성되는 것을 확인할 수 있습니다.
2. Service 생성 (선택)
DaemonSet으로 생성된 파드에 외부 또는 내부 접근이 필요하다면
Service를 생성하여 접근 경로를 제공합니다.
- 일반적으로 ClusterIP 사용
- 시스템 에이전트의 경우 Service가 필요 없는 경우도 많음
사용 시 주의사항
spec.selector와spec.template.metadata.labels는 반드시 일치해야 함- DaemonSet은 기본적으로 모든 노드에 배포됨
- 특정 노드에만 배포하려면
nodeSelector,affinity,tolerations설정 필요
- 특정 노드에만 배포하려면
- 리소스 요청/제한을 반드시 설정하여 노드 자원 고갈 방지
마무리하며
DaemonSet은
Kubernetes 클러스터 운영에서 보이지 않는 핵심 구성 요소입니다.
- 노드 단위 작업이 필요한 경우 → DaemonSet
- 서비스 단위 확장 → Deployment
이 기준만 명확히 구분해도
Kubernetes 리소스 설계가 훨씬 깔끔해집니다.