본문 바로가기
클라우드/쿠버네티스

🚀 쿠버네티스 모든 노드의 관리자: DaemonSet 가이드

by gasbugs 2026. 2. 21.

 


📋 목차

  1. DaemonSet이란 무엇인가? 🤔
  2. 왜 DaemonSet을 사용할까? 💡
  3. 실습: DaemonSet 생성하기 🛠️
  4. Control Plane에도 배포하고 싶다면? (Taint & Toleration) 🔐
  5. 마무리 및 요약 🏁

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은 클러스터 전체의 유지보수와 운영을 담당하는 핵심 요소입니다.

  1. DaemonSet은 노드당 1개의 포드를 보장한다.
  2. 노드가 늘어나면 자동으로 확장된다.
  3. Control Plane에 배포하려면 해당 노드의 Taint를 확인하고, 이에 대응하는 Toleration을 설정해야 한다.

이제 클러스터의 모든 구석구석에 필요한 서비스를 배치하실 수 있게 되었습니다! 🚀