Kubernetes/Kubernetes Advanced

📌 [DaemonSet 심화편 #9] DaemonSet 리소스 관리: CPU와 메모리 제한 설정 전략

ygtoken 2025. 3. 22. 19:36
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