[Kubernetes] 데몬이 뭐야? DaemonSet은 왜 쓰는 걸까?

굿굿·2026년 5월 27일

CI/CD

목록 보기
52/73

쿠버네티스 공부하다 보면 DaemonSet이라는 단어가 나온다.
처음 보면 이름부터 좀 무섭다.

데몬? 악마? 뭐 하는 애임?

근데 어렵게 생각할 필요 없다.
쿠버네티스에서 말하는 데몬은 쉽게 말하면 서버 뒤에서 계속 돌아가는 프로그램이다.


1. 데몬이란?

Daemon은 백그라운드에서 계속 실행되는 프로그램을 말한다.

우리가 직접 매번 실행하지 않아도 서버가 켜져 있는 동안 계속 떠 있으면서 자기 일을 한다.

예를 들면 이런 것들이 있다.

sshd
containerd
kubelet
systemd

각각 하는 일은 대충 이렇다.

데몬역할
sshdSSH 접속을 기다림
containerd컨테이너 실행 관리
kubelet노드에서 Pod 상태 관리
systemd리눅스 서비스 관리

즉, 데몬은 이런 느낌이다.

사용자가 직접 조작하지 않아도
서버 뒤에서 계속 떠 있으면서
필요한 일을 처리하는 프로그램

2. 쿠버네티스에서 왜 데몬이 중요할까?

쿠버네티스 클러스터에는 여러 노드가 있다.

worker-node-1
worker-node-2
worker-node-3

그런데 어떤 프로그램은 특정 노드 하나에만 있으면 안 된다.
모든 노드에서 하나씩 돌아야 하는 프로그램들이 있다.

예를 들면:

각 노드의 로그를 수집하는 프로그램
각 노드의 CPU/메모리 상태를 수집하는 프로그램
각 노드의 네트워크를 담당하는 프로그램
각 노드의 보안 상태를 확인하는 프로그램

이런 애들은 worker-node-1에만 있으면 안 된다.

worker-node-1 로그만 수집
worker-node-2 로그는 모름
worker-node-3 로그는 모름

이러면 안 되니까 모든 노드마다 하나씩 배치해야 한다.

이때 쓰는 게 바로 DaemonSet이다.


3. DaemonSet이란?

DaemonSet은 모든 노드에 Pod를 하나씩 띄워주는 쿠버네티스 리소스다.

한 줄로 정리하면 이거다.

DaemonSet = 모든 노드마다 특정 Pod를 하나씩 실행하게 해주는 리소스

예를 들어 노드가 3개 있다고 해보자.

worker-node-1
worker-node-2
worker-node-3

여기에 로그 수집용 Pod를 DaemonSet으로 배포하면 이렇게 된다.

worker-node-1: log-agent Pod 1개
worker-node-2: log-agent Pod 1개
worker-node-3: log-agent Pod 1개

노드가 하나 추가되면?

worker-node-4 추가

DaemonSet이 알아서 새 노드에도 Pod를 띄워준다.

worker-node-4: log-agent Pod 1개 자동 생성

이게 DaemonSet의 핵심이다.


4. Deployment랑 뭐가 다를까?

처음에는 Deployment랑 헷갈린다.

Deployment는 이렇게 말하는 느낌이다.

Pod 3개 띄워줘

그러면 쿠버네티스가 적당히 배치한다.

worker-node-1: Pod 2개
worker-node-2: Pod 1개
worker-node-3: Pod 0개

이렇게 될 수도 있다.

Deployment는 Pod 개수가 중요하다.

반면 DaemonSet은 이렇게 말하는 느낌이다.

각 노드마다 Pod 하나씩 띄워줘

그러면 노드마다 하나씩 생긴다.

worker-node-1: Pod 1개
worker-node-2: Pod 1개
worker-node-3: Pod 1개

DaemonSet은 노드마다 하나씩이 중요하다.


5. Deployment vs DaemonSet

구분DeploymentDaemonSet
기준Pod 개수Node 개수
목적원하는 개수만큼 Pod 실행모든 노드에 Pod 실행
예시웹 서버, API 서버로그 수집기, 모니터링 에이전트
노드 추가 시꼭 새 노드에 생기진 않음새 노드에도 자동 생성
핵심replicasevery node

즉, 이렇게 보면 된다.

Deployment = Pod 몇 개 띄울래?
DaemonSet = 모든 노드에 하나씩 띄울래?

6. DaemonSet은 언제 쓸까?

DaemonSet은 보통 모든 노드에서 실행되어야 하는 시스템성 프로그램에 사용한다.

대표 예시는 다음과 같다.

로그 수집
모니터링
네트워크 플러그인
보안 에이전트
스토리지 에이전트

실제로 쿠버네티스에서 자주 보는 DaemonSet 예시는 이런 것들이 있다.

kube-proxy
calico-node
cilium
fluent-bit
fluentd
promtail
node-exporter
aws-node

예를 들어 node-exporter는 노드의 CPU, 메모리, 디스크 정보를 수집한다.

그럼 특정 노드에만 있으면 안 된다.

worker-node-1의 CPU 정보만 수집
worker-node-2는 모름
worker-node-3은 모름

이러면 모니터링이 제대로 안 된다.

그래서 모든 노드에 하나씩 떠야 한다.

worker-node-1: node-exporter
worker-node-2: node-exporter
worker-node-3: node-exporter

이런 경우 DaemonSet을 쓴다.


7. DaemonSet 예시 YAML

간단한 DaemonSet 예시는 이렇게 생겼다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-agent
  namespace: default
spec:
  selector:
    matchLabels:
      app: node-agent
  template:
    metadata:
      labels:
        app: node-agent
    spec:
      containers:
      - name: node-agent
        image: nginx

중요한 부분은 여기다.

kind: DaemonSet

이 리소스는 Deployment가 아니라 DaemonSet이다.

그리고 selector와 template label이 맞아야 한다.

selector:
  matchLabels:
    app: node-agent

template:
  metadata:
    labels:
      app: node-agent

이 두 개가 안 맞으면 에러가 난다.


8. 확인 명령어

DaemonSet 조회는 이렇게 한다.

kubectl get daemonset

줄여서 이렇게도 가능하다.

kubectl get ds

전체 네임스페이스에서 보고 싶으면:

kubectl get ds -A

Pod가 어느 노드에 떠 있는지 보고 싶으면:

kubectl get pod -o wide

그러면 각 Pod가 어떤 노드에 배치됐는지 볼 수 있다.

NAME                 READY   STATUS    NODE
node-agent-abcde     1/1     Running   worker-node-1
node-agent-fghij     1/1     Running   worker-node-2
node-agent-klmno     1/1     Running   worker-node-3

이렇게 노드마다 하나씩 있으면 DaemonSet이 잘 동작하는 것이다.


9. CKA에서 어떻게 나올까?

CKA에서는 DaemonSet 자체를 깊게 이론으로 물어보기보다는, 보통 이런 식으로 나온다.

Create a DaemonSet named fluentd in namespace logging.
Use image fluentd.
Ensure it runs on all nodes.

또는 기존 YAML을 수정하는 문제가 나올 수 있다.

이때 핵심은 별거 없다.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd

그리고 selector와 label 맞추기.

selector:
  matchLabels:
    app: fluentd

template:
  metadata:
    labels:
      app: fluentd

CKA에서는 외우는 느낌보다 문서에서 DaemonSet 예시를 빨리 찾아서 수정할 줄 아는 것이 중요하다.


10. 한 줄 정리

Daemon = 서버 뒤에서 계속 돌아가는 프로그램
DaemonSet = 모든 노드에 데몬 역할을 하는 Pod를 하나씩 띄우는 쿠버네티스 리소스

외울 때는 이렇게 잡으면 된다.

웹 서버 여러 개 띄우기 → Deployment
모든 노드에 하나씩 깔기 → DaemonSet

로그 수집, 모니터링, 네트워크처럼 모든 노드에서 돌아야 하는 것이 나오면 DaemonSet을 떠올리면 된다.

profile
https://greenapple0101.github.io/

0개의 댓글