데몬셋은 쿠버네티스에서 모든 노드(혹은 특정 노드)에 파드를 하나씩 자동으로 배포하는 리소스이다.
ex) 로그 수집가, 모니터링 에이전트같은 시스템성 파드들
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: hello-daemon
labels:
app: hello-daemon
spec:
selector:
matchLabels:
app: hello-daemon
template:
metadata:
labels:
app: hello-daemon
spec:
containers:
- name: daemon-container
image: busybox
command: ["/bin/sh", "-c"]
args:
- while true; do
echo "Hello from DaemonSet on $(hostname)";
sleep 30;
done
항목 설명 apiVersion apps/v1— DaemonSet은 앱 리소스 그룹에 속함kind DaemonSet — 모든 노드에 파드를 배포 metadata.name DaemonSet 이름 ( hello-daemon)selector / labels 어떤 파드를 관리할지 구분 template 생성될 파드의 템플릿 정의 containers 실행할 컨테이너 정의 ( busybox로 메시지 출력)
kubectl apply -f daemonset.yaml # DaemonSet 생성
kubectl get daemonsets # DaemonSet 목록 확인
kubectl get pods -o wide # 각 노드에 파드가 하나씩 배포된 것 확인
kubectl logs <pod-name> # 로그 확인
데몬셋에 대해 솔직히 무슨 내용인지 이해가 잘 안갔다. 그래서 백문이 불여일견이라고
먼저 실습을 통해 느껴보기로 했다.
vim daemonset.yaml
```yaml
원하는 경로에 daemonset.yaml 파일을 만든 후, 밑에 있는 내용을 붙여넣기한다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: log-daemon
spec:
selector:
matchLabels:
app: log-daemon
template:
metadata:
labels:
app: log-daemon
spec:
containers:
- name: logger
image: busybox
command: ["/bin/sh", "-c"]
args:
- |
while true; do
echo "$(date) : Hello from $(hostname)";
sleep 10;
done
restartPolicy: Always
!wq + enter 하여 편집을 마무리한다.
그런다음 cat daemonset.yaml 하여 확인한 결과이다.

이 코드가 하는 일
kubectl apply -f daemonset.yaml
이 명령어를 실행하여 만든 데몬파일을 배포한다.
kubectl get daemonsets
kubectl get pods -o wide
이 명령어를 통해 각 노드별로 파드가 1개씩 배포된 것을 확인할 수 있다.

log-daemon-ghqld는 DaemonSet이 자동으로 생성한 파드이다.
kubectl logs -f <log-daemon-pod-name>
는 각각의 파드의 로그를 확인하는 명령어이고, 전체 노드의 로그를 확인하고 싶을 경우
다음과 같은 명령어를 사용하면 된다.
kubectl logs -l app=log-daemon -f
이제 로그를 확인해본다.

매 10초마다 로그가 출력되는 것을 확인할 수 있다.
kubectl get daemonset
위 명령어를 입력하면 다음과 같이 뜬다.

-> 클러스터 내 모든 노드에 파드가 하나씩 떠 있는 구조라 노드가 추가되면 새로운 노드에도
자동으로 파드가 뜨게 된다.
처음 이 내용을 학습할 때는 어떤 로그를 어떻게 출력하는지 헷갈려서 여러 자료를 찾아보았다.
정리해보면 다음과 같다.
처음 내 쿠버네티스 클러스터에는 노드가 1개(docker-desktop)뿐이었다.
그래서 DaemonSet을 실행하면 log-daemon 파드가 그 노드에 하나 자동으로 생성된다.
이후 클러스터에 노드를 하나 더 추가하면,
새 노드에도 자동으로 log-daemon 파드가 생성되어 로그를 수집하게 된다.
즉,
NODE POD
docker-desktop log-daemon-xxxxx
node2 log-daemon-yyyyy
→ 내가 새 파드를 직접 만든다고 늘어나는 구조가 아니라,
“노드 개수”에 따라 자동으로 파드가 늘어나는 구조이다.
즉, 노드를 하나 더 만들 경우, DaemonSet이 그 노드에서도 로그를 수집할 수 있는 파드를 자동으로 생성한다. 따라서 kubectl logs -l app=log-daemon -f 명령어로 모든 노드의 로그를 한꺼번에 볼 수 있으며, kubectl logs -f <.log-daemon-pod-name> 명령어를 사용하면 각 파드의 로그를 개별적으로 확인할 수 있다.
DaemonSet 실습이 끝났다면, 생성된 리소스들을 모두 삭제해서 클러스터를 깨끗이 정리한다.
# DaemonSet 삭제
kubectl delete -f daemonset.yaml
# 파드 삭제 확인
kubectl get pods -o wide
# 혹시 남아있는 리소스가 있을 경우 강제 삭제
kubectl delete daemonset log-daemon --force --grace-period=0
저작권 문제를 방지하기 위해 공식 문서 내용을 참고하였으며, 일부 설명은 ChatGPT를 활용해 재구성하였습니다.
본 포스트는 학습용 예시로 작성되었습니다.