1️⃣ 개요
DaemonSet은 노드마다 하나씩 실행되는 특성 덕분에 호스트 환경과 직접 상호작용하는 서비스 배포에 매우 적합합니다.
이런 경우 HostNetwork를 통해 노드의 네트워크를 직접 사용하거나, HostPath를 통해 노드의 파일 시스템에 접근해야 할 수 있습니다.
이번 글에서는 DaemonSet에서 HostNetwork와 HostPath를 설정하고 안전하게 운영하는 방법을 설명합니다.
2️⃣ HostNetwork와 HostPath란?
항목 | 설명 | 대표 활용 사례 |
HostNetwork | Pod가 노드의 IP 주소와 네트워크 스택을 직접 사용 | Node Exporter, Log Forwarder |
HostPath | Pod가 노드의 파일 경로를 직접 마운트하여 접근 | 로그 수집, 시스템 정보 접근 |
✅ 이 기능들은 노드 수준의 정보를 수집하거나 시스템 자원에 접근해야 하는 서비스에서 자주 사용됩니다.
3️⃣ HostNetwork 설정 방법
spec:
hostNetwork: true # 노드의 네트워크를 그대로 사용
dnsPolicy: ClusterFirstWithHostNet # DNS 설정을 호스트 네트워크에 맞게 조정
📌 설명
• hostNetwork: true를 설정하면 Pod가 클러스터 내부의 가상 네트워크가 아니라 호스트의 실제 IP를 사용합니다.
• dnsPolicy를 ClusterFirstWithHostNet으로 지정해야 DNS가 정상 동작합니다.
✅ Pod가 노드 IP에 바인딩되므로, 포트 충돌을 주의해야 합니다.
4️⃣ HostPath 마운트 설정 방법
volumeMounts:
- name: varlog
mountPath: /var/log # 컨테이너 내부에 마운트할 경로
volumes:
- name: varlog
hostPath:
path: /var/log # 실제 노드 경로
type: Directory
📌 설명
• /var/log 경로를 컨테이너 안으로 마운트하여, 노드의 로그 파일을 직접 수집하거나 분석할 수 있습니다.
• type은 Directory, File, Socket 등으로 지정 가능하며, 존재하지 않으면 에러가 날 수 있으므로 주의합니다.
5️⃣ 전체 구성 예제: Node 로그 수집기 DaemonSet
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: log-agent
spec:
selector:
matchLabels:
app: log-agent
template:
metadata:
labels:
app: log-agent
spec:
hostNetwork: true # 노드의 네트워크 스택 사용
dnsPolicy: ClusterFirstWithHostNet # DNS 정책 설정 (필수)
containers:
- name: log-agent
image: busybox
command: ["sh", "-c", "tail -f /var/log/syslog || tail -f /var/log/messages"]
volumeMounts:
- name: varlog
mountPath: /var/log # 컨테이너 내부에서 /var/log 사용
volumes:
- name: varlog
hostPath:
path: /var/log # 실제 노드 경로를 마운트
type: Directory
📌 설명 요약
• hostNetwork를 활성화하여 노드 IP를 그대로 사용합니다.
• 노드의 /var/log 경로를 마운트하여 시스템 로그를 컨테이너 내에서 실시간으로 조회합니다.
• tail -f 명령으로 syslog 또는 messages 로그 파일을 지속적으로 출력합니다.
✅ 이 구성은 간단한 로그 수집기 또는 테스트용 로그 에이전트로 활용할 수 있습니다.
6️⃣ HostPath 사용 시 주의사항
항목 | 주의점 |
보안 | 노드의 중요한 파일 시스템에 접근하므로 반드시 필요한 경로만 제한적으로 마운트 |
포트 충돌 | HostNetwork 사용 시 여러 Pod가 동일한 포트를 사용할 경우 충돌 가능 |
노드 OS 의존성 | /var/log, /etc 등 경로 구조가 노드 운영체제에 따라 다를 수 있음 |
ReadOnly 설정 | 쓰기 필요가 없는 경우 readOnly: true 옵션 설정 권장 |
예: 로그 조회만 할 경우 아래처럼 설정 가능
volumeMounts:
- name: varlog
mountPath: /var/log
readOnly: true
🔥 7️⃣ 결론
✔ DaemonSet은 노드의 정보를 수집하거나 시스템 자원에 접근할 수 있도록 Host 설정을 지원합니다.
✔ HostNetwork를 활용하면 Pod가 노드의 네트워크를 직접 사용하여 통신할 수 있습니다.
✔ HostPath를 활용하면 노드의 파일 시스템에 접근하여 로그 수집, 모니터링 등을 수행할 수 있습니다.
✔ 이 기능들은 강력한 만큼, 보안과 자원 접근 범위를 신중하게 설계해야 합니다.
'Kubernetes > Kubernetes Advanced' 카테고리의 다른 글
📌 [DaemonSet 심화편 #7] DaemonSet과 Tolerations: Taint가 적용된 노드에 Pod 배포하기 (0) | 2025.03.22 |
---|---|
📌 [DaemonSet 심화편 #6] DaemonSet 롤아웃 관리 및 Canary 배포 전략 구성 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #4] DaemonSet Pod 재시작 전략과 장애 복구 패턴 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #3] 특정 노드에서만 DaemonSet 실행하는 방법 (0) | 2025.03.21 |
📌 [DaemonSet 심화편 #2] DaemonSet 업데이트 전략과 무중단 롤링 배포 적용 (0) | 2025.03.21 |