
📋 목차
- DaemonSet이란 무엇인가? 🤔
- 왜 DaemonSet을 사용할까? 💡
- 실습: DaemonSet 생성하기 🛠️
- Control Plane에도 배포하고 싶다면? (Taint & Toleration) 🔐
- 마무리 및 요약 🏁
1. DaemonSet이란 무엇인가? 🤔
쿠버네티스에서 DaemonSet(데몬셋)은 모든(또는 특정) 노드에 딱 하나씩의 포드(Pod)를 유지하도록 보장하는 컨트롤러입니다.
일반적인 Deployment가 노드의 여유 자원을 보고 적절히 분산 배치하는 방식이라면, DaemonSet은 "새로운 노드가 추가되면 자동으로 그곳에도 포드를 실행"하는 일편단심형 관리자라고 볼 수 있습니다.
2. 왜 DaemonSet을 사용할까? 💡
모든 노드에 똑같은 서비스를 띄워야 하는 상황은 언제일까요? 주로 시스템 운영과 관련된 작업들입니다.
- 로그 수집: 각 노드의 로그를 수집하는 fluentd나 logstash.
- 모니터링: 노드의 상태를 감시하는 Prometheus Node Exporter.
- 네트워크 설정: 클러스터 네트워크를 구성하는 kube-proxy나 Calico 같은 CNI 플러그인.
3. 실습: DaemonSet 생성하기 🛠️
가장 기본적인 형태의 DaemonSet YAML 파일을 살펴보겠습니다. 이 예제는 모든 노드에서 돌아가는 간단한 nginx 데몬셋입니다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
이 파일을 적용하면 일반적인 Worker Node들에는 포드가 하나씩 생성됩니다. 하지만 한 가지 문제가 발생합니다. 바로 Control Plane(Master Node)에는 포드가 생성되지 않는다는 점입니다.
4. Control Plane에도 배포하고 싶다면? (Taint & Toleration) 🔐
쿠버네티스의 Master 노드(Control Plane)는 매우 중요한 곳입니다. 그래서 기본적으로 Taint(테인트, 얼룩)라는 설정이 되어 있어, 일반적인 포드들이 들어오지 못하게 "금지"하고 있습니다.
① Master 노드의 Taint 확인하기
먼저, Master 노드에 어떤 '얼룩'이 묻어있는지 확인해봅시다.
kubectl describe node <마스터-노드-이름> | grep Taints
보통 다음과 같은 결과가 나옵니다. Taints: node-role.kubernetes.io/control-plane:NoSchedule
이는 "이 노드는 control-plane 역할이니, 허락받지 못한 포드는 스케줄링하지 마라(NoSchedule)"는 뜻입니다.
② Toleration(톨러레이션, 용인) 구성하기
DaemonSet이 Master 노드에서도 실행되게 하려면, 이 '얼룩(Taint)'을 견뎌낼 수 있는 '내성(Toleration)을 포드 설정에 추가해야 합니다.
수정된 YAML의 spec 부분을 확인해 보세요.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
spec:
# ... (생략)
template:
spec:
# 여기가 핵심입니다!
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
- key: Master 노드에서 확인한 Taint의 키 값입니다.
- operator: Exists는 해당 키가 존재하기만 하면 된다는 뜻입니다.
- effect: NoSchedule 상태에서도 무시하고 들어갈 수 있게 합니다.
이렇게 설정하면 이제 DaemonSet은 일반 노드뿐만 아니라 Control Plane 노드에서도 당당히 실행됩니다.
5. 마무리 및 요약 🏁
DaemonSet은 클러스터 전체의 유지보수와 운영을 담당하는 핵심 요소입니다.
- DaemonSet은 노드당 1개의 포드를 보장한다.
- 노드가 늘어나면 자동으로 확장된다.
- Control Plane에 배포하려면 해당 노드의 Taint를 확인하고, 이에 대응하는 Toleration을 설정해야 한다.
이제 클러스터의 모든 구석구석에 필요한 서비스를 배치하실 수 있게 되었습니다! 🚀
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| 쿠버네티스 파드 배치의 기본: nodeName과 nodeSelector 완벽 가이드 ☸️ (0) | 2026.02.19 |
|---|---|
| 쿠버네티스 HPA(Horizontal Pod Autoscaler) 완벽 가이드: 트래픽 변화에 유연하게 대응하기 🚀 (0) | 2026.02.19 |
| 쿠버네티스의 App Store, Helm으로 복잡한 매니페스트 한 번에 관리하기 (0) | 2026.02.16 |
| Kustomize를 활용한 쿠버네티스 애플리케이션 설정 관리 가이드 (0) | 2026.02.16 |
| 🔐 Kubernetes Secret: 민감한 정보를 안전하게 관리하는 법 (과 그 한계) (0) | 2026.02.09 |