TechFeedTechFeed
Cloud & DevOps

Kubernetes 비용 최적화 실전 가이드 — 라이트사이징, Spot 노드, FinOps 도구 비교

K8s 클러스터 운영 비용의 40%가 리소스 낭비에서 발생한다. VPA 기반 라이트사이징으로 requests/limits를 실사용량에 맞추고, Spot 노드 풀 3단 구조, Karpenter 오토스케일링, 비프로덕션 환경 스케줄링, Kubecost·OpenCost·CAST AI FinOps 도구까지 단계별 비용 절감 전략을 정리한다.

Kubernetes 클러스터 운영 비용의 60~70%는 컴퓨팅 리소스 낭비에서 발생한다. 리소스 요청(requests)과 실사용량(usage)의 격차를 줄이는 라이트사이징, Spot/Preemptible 노드 활용, 네임스페이스별 비용 할당, FinOps 도구 도입까지 실전 비용 최적화 전략을 단계별로 정리한다.

Kubernetes 비용은 어디에서 새는가

CNCF FinOps 보고서(2025)에 따르면 기업이 프로비저닝한 K8s 리소스 중 평균 40%가 실제로 사용되지 않는다. 비용이 새는 대표적인 지점은 다음과 같다:

  • 과도한 리소스 요청: 개발자가 OOM 방지를 위해 CPU/메모리 requests를 실사용량의 2~5배로 잡는다
  • 항상 켜진 비프로덕션 환경: 개발·스테이징 클러스터가 24/7 가동되지만 업무 시간에만 사용
  • 미사용 PV/LoadBalancer: 삭제된 Pod의 Persistent Volume이나 LoadBalancer가 과금 중
  • 노드 단편화: 작은 Pod들이 큰 노드에 분산 배치되어 노드당 활용률이 30% 미만
Kubernetes resource utilization gap diagram
K8s 리소스 요청량과 실사용량 격차 — 평균 40%가 낭비

리소스 라이트사이징 — 가장 즉각적인 비용 절감

라이트사이징은 Pod의 resources.requestsresources.limits를 실사용량에 맞게 조정하는 작업이다. 이것만으로 30~50% 비용 절감이 가능한 경우가 많다.

VPA (Vertical Pod Autoscaler) 활용: VPA를 mode: "Off"로 설정하면 자동 조정 없이 추천값만 확인할 수 있다. 추천값을 검토한 후 수동으로 반영하는 것이 안전하다.

VPA 추천값 확인 (recommender-only 모드)
# VPA 설치 (recommender만) kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/vpa-v1-crd-gen.yaml kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/vpa-v1-rbac.yaml # VPA 오브젝트 생성 (Off 모드 — 추천만) apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-app-vpa spec: targetRef: apiVersion: apps/v1 kind: Deployment name: my-app updatePolicy: updateMode: "Off" # 추천값만 제공, 자동 변경 없음 # 추천값 확인 kubectl describe vpa my-app-vpa # → Lower Bound / Target / Upper Bound 확인 # Target 값을 requests로, Upper Bound를 limits로 설정

라이트사이징 실전 원칙:

  1. 최소 7일간 메트릭을 수집한 후 조정하라. 주말 트래픽 패턴까지 반영해야 한다
  2. CPU requests는 P95, 메모리 requests는 P99를 기준으로 잡아라. CPU는 throttling이 발생해도 Pod이 죽지 않지만, 메모리 초과는 OOM Kill로 이어진다
  3. limits를 requests의 2~3배로 설정하라. 버스트 트래픽 대응용. limits를 너무 타이트하게 잡으면 throttling이 과도해진다
  4. 네임스페이스별 ResourceQuota를 반드시 설정하라. 개별 팀이 리소스를 무제한 요청하는 것을 방지

Spot 노드와 노드 풀 전략 — 최대 70% 할인

Spot(AWS) / Preemptible(GCP) / Spot(Azure) 인스턴스는 온디맨드 대비 60~90% 저렴하지만, 클라우드 제공자가 2분 전 통보로 회수할 수 있다. 이를 안전하게 활용하려면 노드 풀을 용도별로 분리해야 한다.

노드 풀 3단 구조:

  • 시스템 풀 (On-Demand): kube-system, monitoring, ingress-controller. 절대 중단되면 안 되는 워크로드. 전체의 10~15%
  • 핵심 앱 풀 (On-Demand + Reserved): API 서버, 데이터베이스 프록시 등 SLA가 높은 워크로드. Reserved Instance로 비용 절감
  • 배치/스케일아웃 풀 (Spot): 비동기 작업, CI/CD 러너, 데이터 파이프라인, 개발 환경. 중단되어도 재시도 가능한 워크로드
EKS Spot 노드 풀 설정 (eksctl)
# eksctl로 Spot 노드 풀 추가 apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: ap-northeast-2 managedNodeGroups: - name: spot-workers instanceTypes: - m5.xlarge - m5a.xlarge - m5d.xlarge # 여러 인스턴스 타입으로 가용성 확보 spot: true minSize: 2 maxSize: 20 labels: node-type: spot taints: - key: spot value: "true" effect: PreferNoSchedule # Spot 허용 워크로드만 배치 # Deployment에서 Spot 노드 허용 spec: template: spec: tolerations: - key: spot operator: Equal value: "true" effect: PreferNoSchedule affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: node-type operator: In values: [spot]
Spot 안전 장치: AWS Node Termination Handler(NTH) 또는 Karpenter를 반드시 설치하라. Spot 중단 2분 전 통보를 받으면 자동으로 Pod을 다른 노드로 이동시킨다. NTH 없이 Spot을 쓰면 예고 없이 Pod이 죽는다.

오토스케일링 조합 — HPA + Karpenter로 탄력적 비용 관리

K8s 오토스케일링은 Pod 레벨(HPA)노드 레벨(Cluster Autoscaler/Karpenter) 두 계층으로 작동한다.

  • HPA (Horizontal Pod Autoscaler): CPU/메모리 또는 커스텀 메트릭 기반으로 Pod 수를 자동 조절. stabilizationWindowSeconds로 급격한 스케일다운을 방지
  • Karpenter (AWS): Cluster Autoscaler 대체. Pod 스케줄링 실패 시 30초 이내에 최적 인스턴스 타입을 선택해 노드를 추가. CA 대비 2~5배 빠르다
  • KEDA: 이벤트 기반 스케일링. SQS 큐 길이, Kafka lag 등 외부 메트릭으로 Pod 수를 조절. 배치 워크로드에 적합

비프로덕션 환경 스케줄링: 개발·스테이징 환경을 업무 시간에만 가동하면 비용을 65% 절감할 수 있다.

  • kube-downscaler: CronJob 기반으로 특정 시간대에 Deployment replicas를 0으로 변경
  • 적용 예: 평일 09:00~21:00(KST)만 가동, 주말 전체 중지 → 주 168시간 중 60시간만 과금
Kubernetes autoscaling layers HPA and Karpenter
HPA(Pod 레벨) + Karpenter(노드 레벨) 2계층 오토스케일링 구조

FinOps 도구로 비용 가시성 확보하기

비용 최적화의 전제는 현재 어디에 얼마가 쓰이는지 아는 것이다. 네임스페이스·레이블 기반으로 비용을 할당하면 팀별 책임 소재가 명확해진다.

FinOps 도구 비교:

도구유형비용특징
Kubecost오픈소스무료 (Pro $199/월~)실시간 비용 할당, 라이트사이징 추천
OpenCostCNCF 오픈소스무료Kubecost 코어 엔진 기반, Prometheus 통합
CAST AISaaS절감액의 20~30%자동 라이트사이징 + Spot 관리 + 비용 리포트
Spot.io (NetApp)SaaS절감액 기반Spot 관리 + 오토스케일링 자동화

비용 라벨링 표준: 모든 K8s 리소스에 다음 라벨을 붙여야 비용 리포트가 의미 있다.

  • team: 담당 팀 (backend, data, platform)
  • env: 환경 (prod, staging, dev)
  • service: 서비스명 (api, worker, scheduler)
  • cost-center: 비용 센터 코드 (재무팀과 합의)

라벨 없는 리소스는 비용 할당이 불가능하다. Admission Webhook으로 라벨 미부착 리소스 배포를 차단하는 정책을 권장한다.

K8s 비용 최적화 체크리스트 — 지금 바로 적용

KubernetesFinOps비용최적화Spot InstanceKarpenterVPAHPAKubecost클라우드비용DevOps

관련 포스트

Kubernetes 프로덕션 운영 가이드 — 리소스 관리, HPA, Probe, 장애 대응 실전 총정리2026-04-07Docker Compose vs Kubernetes — 실무에서 언제 무엇을 쓸까2026-03-20Docker Compose vs Kubernetes — 언제 무엇을 선택할까2026-03-22개발자 클라우드 자격증 가이드 2026 — AWS SAA vs GCP PCA vs Azure AZ-104 비교2026-04-22