← 학습 카테고리

Learn

Kubernetes

24개 모듈 · 현재 19번째

Kubernetes 모듈 19/24 k8s-learn-19

DaemonSet — 모든 노드에 정확히 한 벌씩

Kubernetes DaemonSet 및 Admission Webhook 공식 문서 종합 (웹 리서치, 2026) — Kubernetes 공식 문서(concepts/workloads/controllers/daemonset, reference/access-authn-authz/admission-controllers) Kubernetes 공식문서 DaemonSet

이 모듈을 다 읽으면

  • DaemonSet이 k8s-learn-02의 Deployment(replica 수 기준)와 배정 기준 자체가 다르다는 것을 설명할 수 있다
  • Toleration이 없으면 DaemonSet도 taint가 걸린 노드는 건너뛴다는 것과, '진짜 모든 노드'를 위한 blanket toleration 패턴을 설명할 수 있다

k8s-learn-12에서 다룬 로그 수집기(Native Sidecar 예시)가 클러스터 전체 노드에 실제로 어떻게 하나씩 깔리는지를 전제로, '노드 개수만큼' Pod를 배치하는 DaemonSet 워크로드를 정리한다.

Deployment와 다른 배정 기준 — replica 수가 아니라 '노드 개수'

k8s-learn-02의 Deployment는 사용자가 지정한 replica 수만큼 Pod를 유지한다. DaemonSet은 이 기준 자체가 다르다 — replica 수를 지정하는 게 아니라, 조건에 맞는 노드마다 정확히 Pod 하나씩을 배치한다. 노드가 500개인 클러스터에 DaemonSet을 배포하면 기본적으로 워커 노드 500개 각각에 Pod가 하나씩 뜨고, 새 노드가 클러스터에 추가되면 자동으로 그 노드에도 Pod가 배치된다. 대표적인 용도는 로그 수집기(Fluentd/Fluent Bit — k8s-learn-12에서 다룬 사이드카 패턴과는 별개로, 노드 레벨에서 모든 컨테이너 로그를 걷어가는 방식), 모니터링 에이전트(node-exporter), CNI 플러그인, 스토리지 데몬(CSI 노드 플러그인) 등이다.

핵심 포인트

  • Deployment: 사용자가 지정한 replica 수 유지 / DaemonSet: 조건에 맞는 '노드 개수'만큼 Pod 하나씩 배치 — 새 노드 추가 시 자동으로 그 노드에도 배치
  • 대표 용도: 노드 레벨 로그 수집기, 모니터링 에이전트, CNI 플러그인, CSI 노드 플러그인

taint가 걸린 노드는 건너뛴다 — blanket toleration으로 진짜 '모든 노드'를 만든다

DaemonSet도 일반 Pod와 마찬가지로 k8s-learn-07에서 다룬 taint-toleration 규칙의 적용을 받는다 — 특정 노드에 taint가 걸려 있고 DaemonSet의 Pod가 그 taint에 대한 toleration이 없으면, 그 노드는 건너뛴다. 모니터링 에이전트나 로그 수집기처럼 '정말로 예외 없이 모든 노드'(taint 걸린 노드 포함)에 깔려야 하는 워크로드는, 모든 taint를 다 감수하겠다는 하나의 포괄적(blanket) toleration을 쓴다 — tolerations: [{operator: "Exists"}] 하나면 어떤 taint가 걸려있든 전부 허용된다.

핵심 포인트

  • DaemonSet도 taint-toleration 규칙(k8s-learn-07) 적용 대상 — toleration 없으면 taint 걸린 노드는 건너뜀
  • '예외 없이 모든 노드'가 필요하면 tolerations: [{operator: "Exists"}] 하나로 모든 taint를 포괄 허용(blanket toleration)

롤링 업데이트 — 노드당 최대 한 개씩만 교체

DaemonSet의 .spec.updateStrategy.type을 RollingUpdate로 설정하면, k8s-learn-02의 Deployment 롤링 업데이트와 비슷하게 점진적 교체가 가능하다 — 업데이트 진행 전체 과정에서 각 노드에는 그 DaemonSet의 Pod가 최대 한 개만 떠 있는 게 보장된다(구버전 종료 후 신버전 기동, 노드당 순차 진행).

핵심 포인트

  • updateStrategy.type: RollingUpdate로 설정 시 점진적 교체 — 업데이트 전체 과정에서 노드당 그 DaemonSet의 Pod는 항상 최대 1개