infra

쿠버네티스 requests와 limits 개념 정리: 리소스 관리와 OOM 방지

mirabo01 2026. 2. 6. 09:52

쿠버네티스 리소스 관리의 핵심, requests와 limits 이해하기

ConfigMap과 Secret으로 설정을 분리했다면,
이제는 애플리케이션이 얼마나 많은 리소스를 써도 되는지를 고민해야 한다.

쿠버네티스를 운영하다 보면 이런 상황을 자주 만난다.

  • 특정 Pod 하나가 CPU를 과도하게 사용한다
  • 메모리 사용량이 치솟으면서 다른 서비스까지 영향을 준다
  • Pod가 갑자기 종료(OOMKilled)된다

이 문제의 중심에는 requests와 limits가 있다.
이 글에서는 쿠버네티스가 리소스를 어떻게 바라보는지부터 차근히 정리한다.


쿠버네티스는 리소스를 “나눠 쓰는 환경”이다

쿠버네티스 클러스터의 Node는 보통 여러 Pod가 함께 사용한다.

즉,

  • CPU
  • 메모리

같은 자원은 공유 자원이다.
아무 설정 없이 Pod를 띄우면,
한 Pod가 과도하게 리소스를 사용해도 제어할 방법이 없다.

그래서 쿠버네티스는 Pod마다
“최소한 이 정도는 필요하다”와
“이 이상은 쓰지 마라”를 명시하도록 한다.


requests와 limits의 기본 개념

한 줄로 요약하면 다음과 같다.

requests는 “필요한 최소 리소스”,
limits는 “사용 가능한 최대 리소스”다.

requests

  • 스케줄링 기준이 된다
  • 이 값만큼의 리소스를 보장받는다
  • Node에 여유가 없으면 Pod는 뜨지 않는다

limits

  • Pod가 사용할 수 있는 상한선
  • CPU, 메모리 사용을 제한한다

이 두 값을 설정하지 않으면,
쿠버네티스는 Pod의 리소스 요구사항을 알 수 없다.


CPU와 메모리는 다르게 동작한다

requests와 limits를 이해할 때
CPU와 메모리를 같은 방식으로 생각하면 안 된다.

CPU의 경우

  • limits를 초과하면 쓰로틀링(throttling) 이 걸린다
  • Pod는 살아 있지만 성능이 떨어진다

메모리의 경우

  • limits를 초과하면 즉시 종료(OOMKilled) 된다
  • Pod가 재시작되며, 원인을 찾기 어려울 수 있다

⚠️ 실무에서는 메모리 limits 설정이 특히 중요하다.
CPU보다 장애로 이어질 가능성이 훨씬 높다.


requests만 있고 limits가 없으면?

이 조합은 생각보다 자주 사용된다.

  • requests는 설정
  • limits는 미설정

이 경우:

  • 스케줄링은 안정적으로 된다
  • Node에 여유가 있으면 더 많은 리소스를 쓸 수 있다

실제로 써보면
CPU는 이런 방식이 비교적 잘 맞는 경우가 많다.
반면 메모리는 limits 없이 운영하는 경우가 드물다.


리소스 설정 예시

resources:
  requests:
    cpu: "500m"
    memory: "512Mi"
  limits:
    cpu: "1"
    memory: "1Gi"

위 설정은 다음을 의미한다.

  • 최소 CPU 0.5코어, 메모리 512MB 보장
  • 최대 CPU 1코어, 메모리 1GB까지 사용 가능

코드를 보면 단순하지만,
이 값 하나로 서비스 안정성이 크게 달라진다.


실제로 써보면 겪는 문제들

운영하면서 자주 마주치는 상황은 다음과 같다.

  • requests를 너무 크게 잡음
    → Pod가 뜰 Node가 없다
  • limits를 너무 작게 잡음
    → OOMKilled 반복
  • 아무 기준 없이 설정
    → 장애 원인 추적이 어려워짐

그래서 보통은
처음에는 보수적으로 설정하고,
메트릭을 보면서 점진적으로 조정한다.


HPA와 리소스 설정의 관계

리소스 설정은
HPA(Horizontal Pod Autoscaler) 와도 직접적으로 연결된다.

HPA는 보통 다음을 기준으로 동작한다.

  • CPU 사용률
  • 메모리 사용률
  • 커스텀 메트릭

이때 기준이 되는 값이 바로 requests다.

requests가 없거나 부정확하면
HPA의 판단도 함께 흔들린다.

즉, 오토스케일링을 제대로 쓰고 싶다면
리소스 설정은 선택이 아니라 전제 조건이다.


정리하며

이번 글에서는 쿠버네티스 리소스 관리의 기본인
requests와 limits를 중심으로 정리했다.

  • 쿠버네티스는 리소스를 공유한다
  • requests는 보장, limits는 제한이다
  • 메모리 limits는 특히 중요하다
  • HPA를 쓰려면 리소스 설정이 필요하다

다음 글에서는
이 리소스 설정을 기반으로
HPA가 실제로 어떻게 동작하는지,
언제 자동 확장이 효과적인지 살펴볼 예정이다.