DATA GROUND 로고DATA GROUND
Kubernetes

[Kubernetes] DaemonSet이란 무엇인가

S.H. Yoo
마지막 업데이트: 2024-04-09

Kubernetes DaemonSet의 개념과 사용 목적, 적용 순서, 주의사항을 예제 YAML과 함께 정리합니다.

작성일: 2024-04-09작성자: S.H. Yoo마지막 업데이트: 2024-04-09

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.selectorspec.template.metadata.labels는 반드시 일치해야 함
  • DaemonSet은 기본적으로 모든 노드에 배포됨
    • 특정 노드에만 배포하려면 nodeSelector, affinity, tolerations 설정 필요
  • 리소스 요청/제한을 반드시 설정하여 노드 자원 고갈 방지

마무리하며

DaemonSet은
Kubernetes 클러스터 운영에서 보이지 않는 핵심 구성 요소입니다.

  • 노드 단위 작업이 필요한 경우 → DaemonSet
  • 서비스 단위 확장 → Deployment

이 기준만 명확히 구분해도
Kubernetes 리소스 설계가 훨씬 깔끔해집니다.

마지막 업데이트: 2024-04-09

당신이 관심있을 만한 글