컨테이너 메모리 요청값 점검

실제 메모리 요구에 맞는 요청값으로 스케줄링과 자원 계획을 관리하세요.

설명

메모리 requests는 Kubernetes 스케줄러가 파드를 배치할 때 사용하는 기준입니다. 실제 필요량보다 낮으면 한 노드에 너무 많은 워크로드가 몰리거나 자원 계획이 부정확해질 수 있습니다.

메모리 limit만 지정하고 request를 생략하면, admission 단계에서 다른 기본 요청값을 적용하지 않는 경우 limit가 request로 복사됩니다. 따라서 생략이 항상 메모리 요청 0을 뜻하지는 않습니다. 실제 생성된 파드의 값을 확인하세요.

잠재적 영향

  • 요청값이 너무 낮으면 노드에 워크로드가 과도하게 배치될 수 있습니다.
  • 실제 사용량 대비 요청 정보가 부족하면 자원 경쟁과 OOM 위험이 커질 수 있습니다.
  • 너무 높은 요청값은 자원을 낭비하거나 파드가 스케줄링되지 못하게 할 수 있습니다.

해결 방법

  • 실제 사용량을 기준으로 resources.requests.memory를 설정하고 정기적으로 조정하세요.
  • 메모리 request와 limit를 함께 검토하되 request가 사용량 상한은 아니라는 점을 고려하세요.
  • LimitRange 등 기본값 적용 후 파드의 요청값을 확인하고 부하 시험으로 적정성을 점검하세요.

예시

메모리 설정 발췌입니다. stress 이미지의 실행 인수와 필요한 CPU 요청은 별도로 구성하세요. 100Mi와 200Mi는 예시입니다.

변경 전

yaml
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
    - name: memory-demo-ctr-1
      image: polinux/stress
      resources:
        limits:
          memory: "200Mi"
        requests:
          cpu: "0.5"

변경 후

yaml
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
spec:
  containers:
    - name: memory-demo-ctr
      image: polinux/stress
      resources:
        limits:
          memory: "200Mi"
        requests:
          memory: "100Mi"

설명:

  • 변경 전: 메모리 limit가 200Mi이므로 다른 기본 요청값이 적용되지 않으면 메모리 request도 200Mi가 됩니다.
  • 변경 후: 요청 100Mi와 상한 200Mi를 명시합니다. 이 요청값으로 정상 부하를 수용할 수 있는지 확인하세요.

참조