설명
CPU request는 Kubernetes의 노드 배치와 CPU 경쟁 시 자원 배분에 사용됩니다. 실제 필요량보다 낮으면 너무 많은 워크로드가 같은 노드에 배치되어 응답 지연이 커질 수 있습니다. request는 CPU 사용 상한이 아니므로 여유가 있으면 더 많은 CPU를 사용할 수 있습니다.
LimitRange가 기본 request를 제공할 수 있으며 별도 기본값 없이 CPU limit만 지정하면 그 값이 request로 사용됩니다. 실제 배포된 요청량을 확인하세요.
잠재적 영향
- CPU 요구량을 낮게 잡으면 노드 자원 경쟁과 성능 저하가 발생할 수 있습니다.
- 과도한 request는 필요한 노드 용량을 늘리거나 파드 배치를 막을 수 있습니다.
해결 방법
- 실제 CPU 사용량과 지연 요구사항에 맞춰
resources.requests.cpu를 설정하고 정상·최대 부하를 시험하세요. - LimitRange 기본값과 적용된 CPU limit을 함께 확인하고 실제 파드 request를 검토하세요. 예제의 250m가 모든 워크로드에 적합한 것은 아닙니다.
예시
기존 예제는 CPU limit을 0.5로 유지하면서 request를 명시하는 비교입니다. 별도 기본값이 없으면 변경 전 request도 0.5가 되며, 실제 배포에는 유지보수되는 이미지를 사용하세요.
변경 전
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"
}
}
}
}
}
변경 후
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"
}
}
}
}
}
설명:
- 변경 전: 명시적 request가 없지만 limit에서 0.5 CPU가 request로 적용될 수 있습니다.
- 변경 후: CPU request를 250m로 명시합니다. 기존의 유효한 요청량보다 낮아질 수 있으므로 실제 요구를 확인해야 합니다.