급증하는 비용에서 절감으로: Kubernetes 비용 최적화
한 분기 만에 AWS 비용이 34% 급증했습니다. 제품 로드맵에는 아무런 변화가 없었습니다. 원인은 간단했습니다. 우리 Kubernetes 클러스터에서 돈이 새고 있었던 것입니다.
엔지니어들은 종종 서비스에 필요한 CPU와 메모리 양을 추측합니다. 안전을 위해 넉넉하게 올림하여 설정하곤 합니다. 이는 유령 용량(phantom capacity)을 만들어냅니다. 애플리케이션이 전혀 사용하지 않는 리소스에 대해 비용을 지불하게 되는 것입니다.
저희가 이를 어떻게 해결하고 월 비용을 34% 절감했는지 소개합니다.
핵심 문제: Requests vs Limits
Requests는 보장하는 자원입니다. Kubernetes는 이 수치를 사용하여 Pod를 노드에 배치합니다. 이 수치가 비용을 결정합니다.
Limits는 상한선입니다. Pod가 CPU Limit에 도달하면 속도가 느려집니다. Memory Limit에 도달하면 Pod가 종료됩니다.
많은 팀이 Requests와 Limits를 동일하게 설정합니다. 이는 서비스가 유휴 상태일 때조차 24시간 내내 피크 용량에 대한 비용을 지불하고 있음을 의미합니다.
비용 절감을 위한 전략
- 실행 전 측정하기: Prometheus와 Grafana를 사용하여 실제 사용량을 확인하세요.
- 백분위수 활용하기: 4주간의 p95 사용량을 확인하세요. 평균값은 사용하지 마세요. 평균값은 급증하는 구간(spikes)을 숨깁니다.
- Requests 적정 크기 설정: p95 사용량에 20%의 버퍼를 더해 Requests를 설정하세요.
- CPU Limits 관리: Throttling을 방지하기 위해 민감한 서비스에는 너무 타이트한 CPU Limits를 설정하지 마세요.
- 스케일링 자동화: 트래픽 급증에는 HPA를, 개별 Pod 튜닝에는 VPA를 사용하세요.
결과
노드 수를 40개에서 26개로 줄였습니다. 평균 CPU 사용률이 14%에서 52%로 상승했습니다. 월간 컴퓨팅 비용이 $48,200에서 $31,900로 감소했습니다. 지연 시간(Latency)은 오히려 35% 개선되었습니다.
최적화는 일회성 프로젝트가 아닙니다. 그것은 습관입니다. 추측에 기반하여 리소스 Request를 작성한다면, 돈을 낭비하고 있는 것입니다.
클러스터 체크리스트:
• 요청된 사용량(requested) 대비 실제 사용량(actual)을 보여주는 대시보드를 구축하세요. • 4주간의 데이터를 기반으로 Requests를 설정하세요. • VPA가 설정을 변경하도록 허용하기 전에 recommendation mode로 먼저 실행해 보세요. • 매 분기마다 리소스 사양을 검토하세요. • 엔지니어링 팀이 자신의 비용을 직접 확인할 수 있도록 가시성을 제공하세요.
Source: https://dev.to/samarth_05/from-spikes-to-savings-practical-k8s-cost-optimization-for-2026-75k
Optional learning community: https://t.me/GyaanSetuAi
