컨테이너 메모리 limit 설정 점검

메모리 사용량에 맞는 상한과 실제 적용되는 제한을 확인하세요.

설명

컨테이너에 유효한 메모리 limit이 없으면 한 워크로드가 노드 메모리를 과도하게 소비해 다른 워크로드에 영향을 줄 수 있습니다. 명시적 설정이 없어도 LimitRange가 기본 제한을 제공할 수 있으므로 배포된 설정을 확인해야 합니다.

메모리 limit은 초과 시 프로세스가 OOM으로 종료될 수 있는 제한입니다. 너무 낮은 값은 애플리케이션 장애를 유발하며 노드의 모든 메모리 부족을 방지하지는 않습니다.

잠재적 영향

  • 메모리 급증으로 다른 파드의 성능이 저하되거나 축출이 발생할 수 있습니다.
  • 과도하게 낮은 limit으로 프로세스가 종료되고 서비스가 중단될 수 있습니다.

해결 방법

  • resources.limits.memory를 실제 사용량과 최대 부하에 맞게 설정하고 request와 함께 검토하세요.
  • OOM 종료와 노드 메모리 압박을 모니터링해 값을 조정하세요. LimitRange로 기본값과 허용 범위를 관리하고 실제 적용된 제한을 확인하세요.

예시

기존 예제의 50Mi와 512Mi는 설명용입니다. 워크로드에 맞게 조정하고 실제 배포에는 유지보수되는 이미지를 사용하세요.

변경 전

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "example"

      resources {
        requests = {
          memory = "50Mi"
        }
      }
    }
  }
}

변경 후

hcl
resource "kubernetes_pod" "pod" {
  metadata {
    name = "terraform-example"
  }

  spec {
    container {
      image = "nginx:1.7.9"
      name  = "example"

      resources {
        limits = {
          cpu    = "0.5"
          memory = "512Mi"
        }

        requests = {
          cpu    = "250m"
          memory = "50Mi"
        }
      }
    }
  }
}

설명:

  • 변경 전: memory request만 명시합니다. 별도 정책에서 limit을 제공하는지 확인해야 합니다.
  • 변경 후: memory limit 512Mi와 request를 명시합니다. 이 값이 실제 최대 사용량에 맞는지 확인해야 합니다.

참조