Kubernetes requests와 limits 적정값 잡기
유휴 자원에 돈을 쓰지 않으면서 워크로드를 안정적으로 유지하는 CPU, 메모리 값을 고르는 방법입니다.
requests는 스케줄링을 결정하고, limits는 스로틀링과 축출을 결정합니다. 이 둘을 혼동하는 것이 노드는 20% 사용률에 머무는데 클러스터는 꽉 찬 것처럼 보이는 가장 흔한 이유입니다.
추측하기 전에 측정하기
트래픽이 가장 많았던 날이 포함된 기간의 실제 사용량에서 시작합니다.
kubectl top pods --containers --sum
CPU는 p95, 메모리는 최댓값을 쓰세요. CPU는 압축 가능하지만 메모리는 그렇지 않기 때문에 둘의 안전 여유를 다르게 잡아야 합니다.
실무적인 출발점
| 자원 | request | limit |
|---|---|---|
| CPU | p95 사용량 | request의 2~4배 또는 미설정 |
| 메모리 | 최대 사용량 + 20% | request와 동일 |
메모리 limit을 request와 같게 두면 파드가 Guaranteed QoS 클래스를 받고, 축출 동작이 예측 가능해집니다.
시간이 지나도 유효하게 유지하기
워크로드의 형태가 바뀔 때마다 값을 다시 확인하세요. 캐시 계층 추가, 직렬화 형식 변경, 런타임 업그레이드는 두 숫자를 모두 크게 움직일 수 있습니다.
Topics
Related work
See the correlation view