728x90
1️⃣ 개요
DaemonSet은 보통 클러스터의 모든 노드에서 로그, 메트릭, 이벤트를 수집하는 역할을 합니다.
그중에서도 로그 수집용 DaemonSet은 Node Exporter, Fluent Bit, Logstash, Vector 등 다양한 로그 수집기를 노드 단위로 배포하는 데 활용됩니다.
이번 글에서는 DaemonSet을 활용한 로그 수집 구조를 설계하는 방법과,
Sidecar 패턴, HostPath 마운트, 로그 볼륨 전략을 어떻게 설정하면 좋은지 정리합니다.
2️⃣ 로그 수집용 DaemonSet 구조 요약
로그 수집용 DaemonSet은 일반적으로 다음의 구조를 가집니다:
- 모든 노드에 배포
- 노드의 /var/log 디렉토리를 컨테이너 내부로 마운트
- 로그 수집기를 통해 외부 로그 수집 시스템(예: Elasticsearch, Loki)으로 전송
- Sidecar 컨테이너를 추가하여 로그 전처리 또는 리디렉션 가능
3️⃣ HostPath 기반 로그 수집 예시
volumes:
- name: varlog
hostPath:
path: /var/log # 노드의 로그 디렉토리를 마운트
type: Directory
volumeMounts:
- name: varlog
mountPath: /var/log # 컨테이너 내부에서 노드의 로그 접근
readOnly: true # 로그 수집기 컨테이너는 읽기 전용으로 설정 권장
📌 설명
- 노드의 로그를 직접 수집하기 위해 /var/log 경로를 HostPath로 마운트합니다.
- 읽기 전용 마운트를 통해 보안을 강화할 수 있습니다.
4️⃣ Sidecar 컨테이너를 통한 로그 분리 수집
containers:
- name: main-agent
image: busybox
command: ["sh", "-c", "echo hello >> /var/log/agent.log && sleep 3600"]
volumeMounts:
- name: agent-logs
mountPath: /var/log
- name: log-forwarder
image: busybox
command: ["sh", "-c", "tail -F /var/log/agent.log"]
volumeMounts:
- name: agent-logs
mountPath: /var/log
📌 설명
- 첫 번째 컨테이너(main-agent)가 로그를 생성하고,
- 두 번째 컨테이너(log-forwarder)가 해당 로그를 tail -F 방식으로 모니터링 및 전송합니다.
- 두 컨테이너는 공통 볼륨을 공유하여 로그를 실시간 처리합니다.
5️⃣ 전체 DaemonSet 예제 (Sidecar + HostPath)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: log-agent
spec:
selector:
matchLabels:
app: log-agent
template:
metadata:
labels:
app: log-agent
spec:
containers:
- name: collector
image: busybox
command: ["sh", "-c", "tail -F /var/log/syslog || tail -F /var/log/messages"]
volumeMounts:
- name: varlog
mountPath: /var/log
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
type: Directory
📌 설명 요약
- DaemonSet을 통해 모든 노드의 /var/log를 읽고 수집하는 구조입니다.
- Fluent Bit이나 Vector 이미지로 교체하여 실제 로그 수집에 사용할 수 있습니다.
6️⃣ 고려해야 할 운영 전략
항목 | 전략 |
파일 크기 제한 | logrotate 또는 외부에서 크기 제한 적용 필요 |
로그 압축 여부 | Sidecar에서 압축 후 전송 가능 |
리소스 분리 | 로그 전송 로직이 무거울 경우 별도의 컨테이너로 분리 권장 |
네트워크 지연 감지 | 로그 전송 상태를 이벤트로 남기도록 설정 가능 (예: Loki, Vector alert 설정) |
🔥 7️⃣ 결론
✔ DaemonSet은 노드 단위 로그 수집기를 배포하는 데 최적화된 구조입니다.
✔ HostPath를 통해 노드의 로그 디렉토리를 마운트하여 직접 로그 파일을 수집할 수 있습니다.
✔ Sidecar 컨테이너를 활용하면 로그 전처리 또는 분리 수집 구조를 구성할 수 있습니다.
✔ 운영 시 보안과 자원 분리를 고려하여 readOnly 마운트, 리소스 제한 등을 함께 설정하는 것이 바람직합니다.
728x90