설명
Kubernetes의 requests는 스케줄링 기준이고 limits는 자원 사용 상한입니다. 필요한 요청량이나 제한이 유효하게 설정되지 않으면 한 컨테이너의 과도한 사용이 다른 워크로드에 영향을 줄 수 있습니다. LimitRange 기본값 등도 실제 설정에 영향을 주므로 배포된 값을 함께 확인하세요.
CPU 사용량이 limit을 넘으면 throttling이 발생할 수 있고, 메모리 limit 초과는 프로세스 종료로 이어질 수 있습니다. 자원 제한은 실제 사용량과 성능 요구를 고려해 정해야 합니다.
잠재적 영향
- 노드의 자원 경쟁으로 응답 지연과 서비스 장애가 발생할 수 있습니다.
- 부적절한 요청량과 제한은 스케줄링 실패, CPU throttling이나 OOM 종료를 일으킬 수 있습니다.
해결 방법
- 각 컨테이너의 CPU·메모리 사용량을 측정해 requests와 필요한 limits를 설정하세요. 요청량은 해당 상한을 넘지 않게 하고 정상·최대 부하에서 동작을 시험하세요.
- LimitRange와 ResourceQuota로 조직의 기본값과 사용 정책을 적용하세요. 정책으로 주입된 값과 실제 사용량을 주기적으로 검토하세요.
예시
예제 값은 모든 워크로드에 적합한 권장값이 아닙니다. 실제 요구에 맞게 조정하고 유지보수되는 이미지를 사용하세요.
변경 전
hcl
resource "kubernetes_pod" "pod" {
metadata {
name = "terraform-example"
}
spec {
container {
image = "nginx:1.7.9"
name = "example"
}
}
}
변경 후
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"
}
}
}
}
}
설명:
- 변경 전: 명시적인 resources 설정이 없습니다. 네임스페이스에서 적용하는 기본값을 함께 확인해야 합니다.
- 변경 후: CPU·메모리 requests와 limits를 명시합니다. 실제 성능과 사용량에 맞는지는 별도 검증이 필요합니다.