개발 창고/Server

Pod 리소스 관리: Requests, Limits, QoS 완벽 이해하기

Royzero 2025. 7. 23. 22:00
반응형

들어가며: Pod의 리소스 관리는 왜 중요할까?

쿠버네티스 환경에서 Pod가 사용하는 CPU나 메모리를 제한하지 않으면, 자원 과다 사용으로 인해 다른 서비스에 장애가 발생할 수 있습니다.

이를 예방하기 위해 쿠버네티스는 리소스 Requests와 Limits를 제공하여 컨테이너별 자원 사용량을 예측하고 제어할 수 있도록 합니다.

이번 글에서는 다음 내용을 다룹니다:

  • Requests와 Limits의 개념과 차이점
  • QoS 클래스 (Guaranteed, Burstable, BestEffort)
  • 실습 가능한 YAML 예시
  • 운영 환경에서 리소스 관리 전략

1. Requests와 Limits란 무엇인가?

Requests

  • 컨테이너가 최소한으로 보장받아야 하는 리소스
  • 스케줄러가 Pod를 배치할 때 Requests 값을 기반으로 노드 자원을 계산

Limits

  • 컨테이너가 사용할 수 있는 최대 리소스
  • Limits를 초과하면 CPU는 throttling(속도 제한), 메모리는 OOMKilled(프로세스 종료)

예시: Requests & Limits 설정

apiVersion: v1
kind: Pod
metadata:
  name: resource-pod
spec:
  containers:
    - name: app
      image: nginx
      resources:
        requests:
          cpu: "250m"    # 최소 0.25 CPU
          memory: "128Mi" # 최소 128MB 메모리
        limits:
          cpu: "500m"    # 최대 0.5 CPU
          memory: "256Mi" # 최대 256MB 메모리

2. Requests와 Limits의 차이점

항목 Requests Limits
의미 최소 보장 리소스 최대 허용 리소스
스케줄링 영향 Pod 배치에 직접 영향 Pod 실행 중 자원 제한
초과 시 동작 스케줄 실패 가능성 CPU: 속도 제한, 메모리: 종료

3. QoS 클래스란?

Kubernetes는 Pod의 Requests와 Limits 값에 따라 QoS(Quality of Service) 클래스를 자동으로 부여합니다.

QoS 클래스 조건
Guaranteed 모든 컨테이너가 Requests=Limits 설정
Burstable Requests < Limits 설정
BestEffort Requests와 Limits 미설정

예시

  • Guaranteed Pod는 리소스가 부족할 때도 우선적으로 유지됩니다.
  • BestEffort Pod는 가장 먼저 제거될 가능성이 높습니다.

4. 리소스 단위 이해하기

  • CPU: 1 = 1 CPU 코어, 500m = 0.5 CPU
  • Memory: 1Gi = 1024Mi = 약 1GB
  • m 단위는 milliCPU(1/1000 CPU)

5. 실습: 리소스 제한 없는 Pod vs 제한 있는 Pod

apiVersion: v1
kind: Pod
metadata:
  name: no-limit-pod
spec:
  containers:
    - name: app
      image: busybox
      command: ["sh", "-c", "while true; do echo Hello; sleep 1; done"]

위 Pod는 CPU/메모리 제한이 없으므로 노드 리소스를 무한히 점유할 가능성이 있습니다.

apiVersion: v1
kind: Pod
metadata:
  name: limited-pod
spec:
  containers:
    - name: app
      image: busybox
      resources:
        requests:
          cpu: "100m"
          memory: "64Mi"
        limits:
          cpu: "200m"
          memory: "128Mi"

위 Pod는 명시된 범위 내에서만 자원을 사용합니다.


6. 운영 환경에서의 리소스 관리 전략

  1. Requests 값을 실제 애플리케이션 평균 사용량 기반으로 설정
  2. Limits 값은 평균보다 1.5~2배 크게 설정해 여유 확보
  3. **HPA(Horizontal Pod Autoscaler)**와 연계하여 자동 스케일링
  4. ResourceQuota를 네임스페이스 단위로 설정해 팀별 리소스 관리

7. FAQ (Answer Engine Optimization)

Q1. Requests와 Limits를 설정하지 않으면 어떻게 되나요?
A. Pod는 BestEffort QoS를 받으며, 자원 부족 시 가장 먼저 종료될 수 있습니다.

Q2. CPU Limits를 초과하면 어떤 일이 발생하나요?
A. CPU는 강제로 제한(throttling)되어 성능 저하가 발생합니다.

Q3. Memory Limits를 초과하면요?
A. OOMKilled(Out Of Memory)로 Pod가 강제 종료됩니다.


8. 핵심 요약

개념 설명
Requests Pod가 보장받을 최소 리소스
Limits Pod가 사용할 수 있는 최대 리소스
QoS Requests/Limits 설정에 따른 우선순위
운영 전략 평균 사용량 기반의 Requests, 여유 있는 Limits 설정

마무리

Pod의 리소스를 올바르게 설정하면 안정성과 효율성을 동시에 확보할 수 있습니다.

반응형