컨테이너 CPU limit 설정 점검

CPU 상한의 필요성과 throttling 영향을 워크로드 요구에 맞춰 검토하세요.

설명

유효한 CPU limit이 없으면 컨테이너가 노드의 여유 CPU를 사용할 수 있습니다. 이는 버스트 처리에 유용할 수 있지만 자원 경쟁과 성능 예측도 고려해야 합니다. CPU request는 스케줄링과 경쟁 시 배분 기준이며 CPU limit과는 다릅니다.

CPU limit을 적용하면 상한에서 throttling이 발생할 수 있습니다. 모든 워크로드에 동일한 제한을 적용하기보다 성능 요구와 조직의 자원 정책에 맞게 결정하세요.

잠재적 영향

  • 제어되지 않은 CPU 경쟁으로 다른 워크로드의 응답 지연이 늘어날 수 있습니다.
  • 너무 낮은 CPU limit은 정상적인 작업을 지연시키고 타임아웃을 늘릴 수 있습니다.

해결 방법

  • 상한이 필요한 컨테이너에는 resources.limits.cpu를 설정하고 request와 실제 사용량을 함께 검토하세요.
  • LimitRange 기본값과 실제 적용 값을 확인하고 정상·최대 부하에서 throttling과 지연을 측정하세요. 상한을 두지 않는 경우에도 적절한 request와 용량 계획을 유지하세요.

예시

기존 예제 값은 설명용입니다. 실제 배포에는 유지보수되는 이미지를 사용하고 성능 시험에 따라 값을 조정하세요.

변경 전

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"
        }
      }
    }
  }
}

설명:

  • 변경 전: 명시적인 CPU limit이 없습니다. 별도 기본값이 없다면 여유 CPU를 사용할 수 있습니다.
  • 변경 후: CPU limit 0.5와 request 250m를 지정합니다. 상한에서 throttling이 발생할 수 있습니다.

참조