[개발자 관점] 주요 Kubernetes 컨트롤러 종류 – 4. DaemonSet

19 sec read

🤔 DaemonSet이란?

DaemonSet은 클러스터의 모든 (또는 일부 지정된) 노드마다 Pod가 1개씩 실행되도록 보장하는 컨트롤러입니다. 마치 리눅스 시스템의 ‘데몬(daemon)’ 프로세스처럼, 각 노드에 백그라운드로 항상 떠 있어야 하는 Pod를 관리하는 데 특화되어 있습니다.

핵심 개념: “모든 노드에 하나씩, 빠짐없이”

DaemonSet은 노드 수에 맞춰 자동으로 Pod를 생성하거나 삭제합니다. 클러스터에 새로운 노드가 추가되면 그 노드에도 즉시 Pod를 배포하고, 노드가 제거되면 해당 Pod도 함께 정리합니다.

🧠 대표적인 사용 사례

DaemonSet은 주로 클러스터 인프라를 지원하는 보조적인 역할을 수행하는 Pod를 배포하는 데 사용됩니다. 개발자가 직접 DaemonSet을 만들기보다, 클러스터 관리 도구나 플러그인을 설치할 때 자주 접하게 됩니다.

  • 로그 수집기: 각 노드에서 발생하는 로그를 수집하여 중앙 서버로 보내는 Fluentd, Filebeat, Logstash
  • 모니터링 에이전트: 각 노드의 CPU, 메모리, 디스크 등 시스템 메트릭을 수집하는 Prometheus Node Exporter, Datadog Agent
  • 네트워크 플러그인 (CNI): Calico, Flannel 등 쿠버네티스 네트워킹을 담당하는 컴포넌트
  • 스토리지 플러그인 (CSI): 각 노드에 스토리지 볼륨을 연결해주는 드라이버

이들은 모두 애플리케이션이 아닌, 노드 자체에서 실행되어야 하는 공통 기능들입니다.

🧪 DaemonSet YAML 예시

클러스터의 모든 노드에 Prometheus Node Exporter를 배포하는 DaemonSet YAML을 살펴봅시다. 구조는 매우 단순합니다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      containers:
        - name: exporter
          image: prom/node-exporter

📌 위 YAML 스펙의 의미:

  • replicas 필드가 없는 것을 주목하세요. 복제본의 수는 우리가 정하는 것이 아니라 노드의 수에 의해 결정되기 때문입니다.
  • 위 YAML을 클러스터에 적용하면, 쿠버네티스는 현재 존재하는 모든 워커 노드를 파악하고 각 노드에 prom/node-exporter 이미지를 사용하는 Pod를 1개씩 생성합니다.

🔄 작동 방식 요약

  • DaemonSet이 생성되면, 쿠버네티스 스케줄러는 클러스터 내 모든 노드를 대상으로 Pod를 하나씩 배치합니다.
  • 클러스터에 새로운 노드가 추가되면 → DaemonSet 컨트롤러가 이를 감지하고 해당 노드에 자동으로 Pod를 생성합니다.
  • 클러스터에서 노드가 제거되면 → 해당 노드 위에서 실행되던 Pod도 자동으로 함께 제거됩니다.
  • 만약 특정 노드 그룹에만 Pod를 배포하고 싶다면, YAML에 nodeSelector, tolerations, affinity 같은 옵션을 사용하여 조건을 지정할 수 있습니다. (예: disktype: ssd 레이블이 있는 노드에만 배포)

✅ 개발자 관점 요약

DaemonSet은 노드 단위로 반드시 필요한 Pod를 배포하는 데 특화된 컨트롤러입니다.
클러스터 운영에 필요한 Agent, Exporter, 드라이버 등을 배포할 때 필수적으로 사용됩니다.
목적에 따라 컨트롤러를 명확히 구분해야 합니다. 일반적인 애플리케이션 배포는 Deployment, 노드 전역에 공통 Pod를 배포할 때는 DaemonSet을 사용하세요.

수십, 수백 개의 노드를 운영하는 환경을 상상해 보세요. 새로운 노드가 추가될 때마다 일일이 접속해서 에이전트를 설치하는 것은 끔찍한 일입니다. DaemonSet의 자동 관리 능력은 클러스터가 커질수록 운영 효율성과 일관성을 극적으로 향상시켜줍니다.

쿠버네티스 시크릿 관리, 어떤 방법이 최선일까? 4가지 방식 장단점…

쿠버네티스에서 애플리케이션을 운영할 때, DB 접속 정보나 API 키 같은 민감한 정보, 즉 ‘시크릿(Secret)’을 어떻게 관리해야 할지는 모두의 공통된 고민입니다. 관리 방식은 보안, 운영...
eve
13 sec read

[MSA] Spring Cloud Gateway VS Apache APISIX : 단계별…

마이크로서비스 아키텍처(MSA)에서 API 게이트웨이는 시스템의 관문 역할을 하는 핵심 컴포넌트입니다. 수많은 Java 개발팀이 Spring 생태계와의 완벽한 통합성을 자랑하는 Spring Cloud Gateway를 선택해왔습니다. 그러나 시스템이...
eve
1 min read

[Kafka] 카프카의 심장: 토픽, 파티션, 프로듀서, 컨슈머 완벽 해부

Apache Kafka가 어떻게 대용량 데이터를 실시간으로, 그리고 안정적으로 처리할 수 있는지 궁금하신가요? 그 비밀은 Kafka를 구성하는 핵심 요소들의 유기적인 협력에 있습니다. Kafka는 마치 잘...
eve
1 min read