728x90
1️⃣ 개요
DaemonSet은 클러스터의 모든 노드에서 하나씩 실행되는 구조이기 때문에, 리소스를 적절히 설정하지 않으면 전체 클러스터에 부담을 줄 수 있습니다.
특히 노드 수가 많아질수록 전체 DaemonSet의 리소스 소비량도 선형 증가하게 되므로, CPU와 메모리의 요청(Request) 및 제한(Limit)을 명확히 설정하는 것이 중요합니다.
이번 글에서는 DaemonSet 컨테이너의 리소스를 효율적으로 설정하는 방법과 구성 예시를 소개합니다.
2️⃣ Kubernetes 리소스 관리 기본 용어 정리
항목 | 설명 |
Request | 컨테이너가 실행되기 위해 보장받아야 하는 최소 자원 (스케줄링 기준) |
Limit | 컨테이너가 사용할 수 있는 최대 자원 (초과 시 throttling 또는 종료 가능) |
📌 요약 정리:
- Request: 이 값만큼은 반드시 확보되어야 Pod이 노드에 스케줄됨
- Limit: 이 값을 초과하면 throttling 되거나 OOMKilled가 발생할 수 있음
3️⃣ 리소스 설정 없는 DaemonSet의 문제점
- 모든 노드에 Pod이 배포되지만 리소스 제한이 없어 예측이 어려움
- 노드 간 리소스 경합이 발생할 수 있음
- 노드 수가 늘어날수록 클러스터 전체 자원 사용량도 증가
✅ 이런 문제를 방지하기 위해 DaemonSet에는 반드시 리소스 요청/제한을 정의해야 합니다.
4️⃣ DaemonSet에 리소스 요청 및 제한 설정하기
resources:
requests:
cpu: "100m" # 최소 0.1 vCPU 요청
memory: "128Mi" # 최소 128Mi 메모리 요청
limits:
cpu: "200m" # 최대 0.2 vCPU 제한
memory: "256Mi" # 최대 256Mi 메모리 제한
📌 설명
- 이 설정은 해당 컨테이너가 최소한 0.1 vCPU / 128Mi 메모리를 확보해야 배포되며,
최대 0.2 vCPU / 256Mi까지만 사용할 수 있도록 제한됩니다. - 제한을 넘으면 CPU는 제한되고, 메모리는 초과 시 OOMKill 발생 가능
5️⃣ 전체 DaemonSet 리소스 설정 예제
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: metric-agent
spec:
selector:
matchLabels:
app: metric-agent
template:
metadata:
labels:
app: metric-agent
spec:
containers:
- name: metric-agent
image: busybox
command: ["sh", "-c", "while true; do echo collecting metrics; sleep 60; done"]
resources:
requests:
cpu: "100m" # 0.1 vCPU 보장 요청
memory: "128Mi" # 128Mi 메모리 요청
limits:
cpu: "200m" # 최대 0.2 vCPU 사용 제한
memory: "256Mi" # 최대 256Mi 메모리 제한
📌 설명 요약
- 이 DaemonSet은 metric-agent를 클러스터의 모든 노드에서 1개씩 실행합니다.
- 각 Pod은 CPU/메모리를 제한된 범위 내에서만 사용하게 됩니다.
- 클러스터 전체적으로 예측 가능한 리소스 사용량을 유지할 수 있습니다.
6️⃣ 전체 클러스터 차원의 리소스 계산 예시
예: 노드 수 20개일 경우
자원 | 계산 | 총 사용량 |
CPU 요청 | 100m × 20 | 2000m (2 vCPU) |
메모리 요청 | 128Mi × 20 | 2.5Gi |
CPU 제한 | 200m × 20 | 4000m (4 vCPU) |
메모리 제한 | 256Mi × 20 | 5Gi |
✅ 리소스 설정이 없다면 이 계산이 불가능하여, 노드 과부하 발생 시 원인 파악이 어렵습니다.
7️⃣ 리소스 설정 시 권장 팁
항목 | 권장 전략 |
min Request 설정 | 시스템에 큰 영향을 주지 않도록 최소값부터 설정 |
Limit은 Request보다 약간 높게 | 순간적인 사용량 증가를 허용하되 예측 가능하도록 |
Node 수 고려 | 노드 수 × 요청 자원으로 총 사용량 계산 |
HPA 대상 아님 | DaemonSet은 HPA(HorizontalPodAutoscaler)의 대상이 아님 (Pod 수 고정됨) |
🔥 8️⃣ 결론
✔ DaemonSet은 노드마다 실행되기 때문에 클러스터 전체 리소스에 큰 영향을 줄 수 있습니다.
✔ Request/Limit을 명확히 설정함으로써 자원 사용량을 예측하고 충돌을 방지할 수 있습니다.
✔ 노드 수가 많아질수록 총 리소스 소비량도 증가하므로, 계산을 바탕으로 리소스 설정을 설계해야 합니다.
728x90