반응형
목차
- DaemonSet이란 무엇인가?
- 왜 DaemonSet이 필요한가?
- DaemonSet의 주요 특징
- 기본 YAML 구성 예제
- 실제 사용 시나리오 예시
- DaemonSet vs Deployment vs StatefulSet
- DaemonSet 수정 및 삭제 방법
- 자주 발생하는 오류와 해결 방법
- 자주 묻는 질문 (FAQ)
- 요약 정리
1. DaemonSet이란 무엇인가?
DaemonSet은 Kubernetes에서 제공하는 워크로드 리소스 중 하나로, 클러스터의 모든 노드에 동일한 Pod를 하나씩 배포하는 역할을 합니다.
예를 들어, 클러스터의 모든 노드에 로그 수집 에이전트(fluentd), 모니터링 에이전트(prometheus node exporter) 등을 배포해야 할 때 유용합니다.
특징 요약
항목 | 설명 |
---|---|
배포 대상 | 모든 노드(또는 조건에 맞는 노드) |
주요 용도 | 모니터링, 로깅, 시스템 레벨 데몬 배포 |
대표 예시 | node-exporter, fluent-bit, logstash 등 |
Pod 수 | 노드 수와 동일 (기본 설정 기준) |
2. 왜 DaemonSet이 필요한가?
일반적인 Deployment는 스케일링된 Pod를 아무 노드에나 배포합니다. 하지만 다음과 같은 경우에는 모든 노드에 반드시 하나의 Pod가 필요합니다.
사용 예시
- 각 노드의 CPU/메모리/디스크 상태 수집 에이전트
- 노드 로컬 디스크 백업 도구
- 네트워크 트래픽 모니터링 Daemon
- GPU 드라이버 관리 에이전트
단 하나라도 노드에서 해당 Pod가 빠지면 모니터링이나 수집이 누락됩니다. 이럴 때 DaemonSet이 필수입니다.
3. DaemonSet의 주요 특징
특징 | 설명 |
---|---|
자동 배포 | 노드 추가 시 자동으로 Pod 생성 |
자동 삭제 | 노드 삭제 시 해당 Pod 자동 제거 |
노드 셀렉터 지원 | 특정 레이블의 노드에만 배포 가능 |
Tolerations 지원 | taint된 노드에도 배포 가능 (예: 마스터 노드 포함) |
클러스터 상태 감시 필수 | 노드 수에 따라 리소스가 동적으로 늘어남 |
4. DaemonSet 기본 YAML 예제
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: log-agent
namespace: kube-system
spec:
selector:
matchLabels:
app: log-agent
template:
metadata:
labels:
app: log-agent
spec:
containers:
- name: log-agent
image: fluent/fluentd:latest
resources:
limits:
memory: "200Mi"
cpu: "200m"
위 YAML은 모든 노드에
fluentd
기반 로그 수집기를 배포합니다.namespace: kube-system
을 사용하여 시스템 영역에서 관리되도록 지정했습니다.
5. 실제 사용 시나리오 예시
1) Prometheus Node Exporter 설치
- 모든 노드의 메트릭 수집
- DaemonSet으로 각 노드에 배포
- Prometheus 서버는 클러스터 외부에서 scrape
2) GPU 드라이버 Daemon 배포
- GPU 노드에서만 작동 (nodeSelector 사용)
- CUDA 환경 초기화 Pod로 구성
spec:
nodeSelector:
hardware: nvidia
6. DaemonSet vs Deployment vs StatefulSet
항목 | DaemonSet | Deployment | StatefulSet |
---|---|---|---|
Pod 개수 | 노드 수만큼 1:1 | 수동 설정 (replica) | 순차적으로 증가 |
고유성 | 노드별 하나 | 랜덤 | 이름, 스토리지 고정 |
사용 목적 | 데몬, 에이전트 | 웹앱, API 서버 | DB, Kafka 등 상태ful 앱 |
Deployment와 혼용하면 리소스 충돌 가능성이 있으므로 주의가 필요합니다.
7. DaemonSet 수정 및 삭제
# 수정
kubectl edit daemonset log-agent -n kube-system
# 삭제
kubectl delete daemonset log-agent -n kube-system
8. 자주 발생하는 오류와 해결 방법
오류 메시지 | 원인 | 해결 방법 |
---|---|---|
insufficient memory |
노드 리소스 부족 | 리소스 요청 줄이기 |
matchLabels mismatch |
selector 오류 | selector, template.label 일치 확인 |
PodUnschedulable |
taint된 노드 미허용 | tolerations 추가 필요 |
9. 자주 묻는 질문 (FAQ)
Q1. DaemonSet은 모든 노드에 무조건 Pod를 생성하나요?
아니요. nodeSelector
, affinity
, tolerations
조건에 따라 선택적으로 배포할 수 있습니다.
Q2. DaemonSet은 수평 확장이 가능한가요?
기본적으로 Pod 수는 노드 수로 제한되므로 replica 개념은 없습니다.
Q3. DaemonSet은 HPA(수평 오토스케일링)가 가능한가요?
불가능합니다. 대신, 클러스터의 노드 수를 조절함으로써 간접적인 스케일링은 가능합니다.
10. 요약 정리
- DaemonSet은 모든 노드에 Pod를 배포하는 특수 리소스
- 로그 수집, 모니터링, 시스템 에이전트에 필수
- nodeSelector, tolerations 등과 함께 사용 가능
- 수정 시 label-selector 주의 필요
- Deployment, StatefulSet과의 차이 이해 필요
반응형
'개발 창고 > Server' 카테고리의 다른 글
Kubernetes Secret 완전 정복 : 민감한 데이터를 안전하게 저장하고 관리하는 방법 (2) | 2025.08.06 |
---|---|
Kubernetes Job 완전 정복 (1) | 2025.08.05 |
Kubernetes Deployment 완전정복: Pod 배포와 업데이트 자동화의 핵심 리소스 (2) | 2025.08.03 |
Kubernetes 레플리카셋(ReplicaSet) 완벽 이해하기 (2) | 2025.08.02 |
Kubernetes 리소스 - Deployment 완벽 이해하기 (1) | 2025.08.01 |