Kubernetes 비용 관리 도구 비교기: OpenCost vs Kubecost, 그리고 AWS SCAD까지

|Platform Decision|17분 읽기

시작은 늘 그 질문이었다

쿠버네티스를 운영하는 팀이라면 누구나 겪는 상황이 있습니다. 월말 클라우드 요금 고지서를 보고 "어? 이번 달 왜 이렇게 많이 나왔지?"라고 당황하는 순간 말이에요. AWS Cost Explorer를 열어봐도 EC2, EBS, 로드 밸런서 항목만 보일 뿐 정작 궁금한 정보는 없더라고요.

  • 어떤 네임스페이스가 비용을 끌어올리고 있는지
  • 어떤 파드가 리소스를 많이 잡아먹는지
  • 실제로 사용되는 비용과 그냥 예약만 되어 있는 유휴 비용이 각각 얼마인지

특히 마지막 부분이 쿠버네티스의 진짜 함정이었습니다. 노드 비용은 실제로 지불하지만, 파드는 리소스 요청량에 따라 스케줄링되거든요. 예를 들어 어떤 팀이 "혹시 몰라서" CPU 4개를 요청해놓고 실제로는 절반만 쓰더라도, AWS 청구서에는 그 비효율이 전혀 드러나지 않습니다.

그래서 적절한 비용 측정 도구를 찾아보기 시작했고, 가장 먼저 눈에 띈 것이 OpenCost였습니다.

OpenCost, 생각보다 탄탄한 기반

OpenCost는 쿠버네티스 및 클라우드 비용을 실시간으로 측정하고 할당하는 오픈소스 프로젝트입니다. CNCF 인큐베이팅 프로젝트로 Apache 2.0 라이선스 하에 무료로 사용할 수 있어요.

흥미로운 건 OpenCost의 출발점입니다. 원래는 Kubecost가 개발한 비용 할당 엔진에서 시작되었거든요. Kubecost가 이 엔진을 오픈소스로 공개하면서, AWS, Google, Microsoft, Adobe 등이 참여해서 쿠버네티스 비용 계산 방식에 대한 명세를 만들어낸 것이 지금의 OpenCost입니다.

"비용 모니터링의 프로메테우스"가 되겠다는 목표처럼, 다른 도구들이 기반으로 삼을 수 있는 중립적인 데이터 계층을 구축하는 게 핵심이에요. 클러스터, 노드, 네임스페이스, 파드 같이 우리가 실제로 생각하는 단위로 비용을 할당해주고, CPU, GPU, 메모리, 영구 볼륨까지 포함해서 계산합니다.

EKS에 설치해보기

설치 과정은 예상외로 단순했습니다. 좋은 의미로요.

알아둘 점이 두 가지 있습니다. OpenCost는 공식 Helm 차트를 통해서만 설치되고(이전의 독립 매니페스트는 제거됨), Prometheus가 필수입니다. OpenCost는 자체적으로 메트릭을 수집하지 않고 Prometheus에 저장된 사용량 데이터를 기반으로 비용을 계산하거든요.

helm repo add opencost https://opencost.github.io/opencost-helm-chart
helm repo update
helm install opencost opencost/opencost --namespace opencost --create-namespace

파드가 실행되자마자 UI로 포트 포워딩을 설정해서 처음으로 클러스터를 비용 관점에서 살펴볼 수 있었습니다. 네임스페이스별, 파드별 비용은 물론이고 요청된 리소스와 실제 사용된 리소스를 보여주는 효율성 뷰까지. 딱 제가 원하던 답이었어요.

그리고 나서 컴퓨터를 켜둔 채로 며칠 놔뒀습니다.

현실과 마주한 순간

며칠 후 OpenCost UI의 데이터가 사라지기 시작했습니다. 이전 기록을 더 이상 불러올 수 없게 된 거예요.

저만 그런 게 아니었습니다. 커뮤니티 토론을 살펴보니 비슷한 불만이 반복적으로 올라오더라고요. "OpenCost를 설정했는데 데이터는 나오지만, 일주일 정도 지나면 과거 데이터를 볼 수 없다"는 내용들이었어요.

해결책으로는 타임아웃 설정 조정, 로컬 실행 등 여러 방법이 제시되지만, 경험 많은 사용자들의 대답은 한결같았습니다.

"데이터를 Prometheus로 내보내고 Grafana 대시보드를 사용하세요. 내장 UI보다 훨씬 효과적입니다."

문제는 이게 임시방편이 아니라 의도된 아키텍처라는 점이었습니다. OpenCost에 포함된 UI는 단순한 뷰어일 뿐 데이터 저장소가 아니에요. 실제 비용 내역은 Prometheus에 저장되고, OpenCost 자체는 제한된 메모리 용량의 데이터만 보관합니다.

OpenCost의 UI를 대시보드처럼 사용하려고 하니까 이런 문제가 발생한 거였어요. OpenCost를 Prometheus에 데이터를 제공하는 엔진으로 사용하고 Grafana에서 대시보드를 구축해야 제대로 된 운영이 가능한 구조더라고요.

그 차이는 중요합니다. "OpenCost가 실제 운영 환경에서 작동하지 않는다"는 게 아니라, "OpenCost의 UI는 애초에 실제 운영용 대시보드로 설계되지 않았다"는 거거든요.

하지만 이로 인해 한 발짝 물러서서 생각해보게 됐습니다. 제 상황에서 OpenCost + Prometheus + Grafana 조합이 과연 적절한 선택일까요? 아니면 더 간단한 방법이 있을까요?

진짜 경쟁자, Kubecost

OpenCost의 실질적인 경쟁자는 Kubecost입니다. 둘 다 클러스터에 배포되고, 실시간 비용 할당을 처리하며, 동일한 할당 엔진을 사용하거든요.

Kubecost는 공유 엔진을 기반으로 구축된 상용 제품인데, "상용"이라고 해서 무조건 유료는 아닙니다. 무료 티어가 OpenCost의 기본 설정보다 훨씬 뛰어난 기능을 제공해요.

Kubecost 무료 플랜은 단일 클러스터에 무제한 노드, 기록을 보존하는 내장 UI, 비용 절감 권장 기능을 제공합니다. 멀티 클러스터, 장기 기록 보존, SSO/RBAC, 요금 정산 기능은 유료 플랜(비즈니스 플랜 월 약 449달러부터)에서 이용할 수 있고요.

EKS 사용자라면 잘 알려지지 않은 혜택이 하나 있습니다. EKS에 최적화된 Kubecost 번들이에요. AWS와 Kubecost가 공동으로 개발한 번들로, 일반 무료 티어 기능 외에 일부 상용 기능을 추가 비용 없이 이용할 수 있습니다. 특히 Kubecost v3 무료 티어의 30일당 10만 달러 사용 한도에서 제외되므로 EKS 사용자에게는 해당 한도가 문제되지 않아요.

EKS 설치 방법

OpenCost와 달리 Kubecost는 자체 Prometheus를 포함하고 있어서 기존 Prometheus가 필요 없습니다. AWS는 두 가지 설치 방법을 제공해요.

  1. EKS 애드온: EKS 콘솔이나 AWS CLI에서 바로 설치 가능한 가장 간단한 방법
  2. Helm: 구성에 대한 더 많은 제어 기능 제공

중요한 변경 사항이 하나 있는데, Kubecost v3부터 Helm 차트가 ECR의 OCI 레지스트리로 이동했다는 점입니다.

helm upgrade -i kubecost \
  oci://public.ecr.aws/kubecost/cost-analyzer \
  --namespace kubecost --create-namespace \
  -f https://raw.githubusercontent.com/kubecost/cost-analyzer-helm-chart/develop/cost-analyzer/values-eks-cost-monitoring.yaml

⚠️ 주의사항: Kubecost는 영구 저장소가 필요합니다. EKS 환경에서는 EBS CSI 드라이버가 설치되어 있어야 해요. 파드가 Pending 상태로 멈춰 있다면 kubectl get pvc -n kubecost로 PersistentVolumeClaim 상태를 먼저 확인해보세요.

AWS SCAD, 세 번째 선택지?

이쯤 되면 누군가는 "굳이 별도 도구를 설치해야 하나? AWS에서 기본 제공하지 않나?"라고 묻게 됩니다. 답은 **EKS용 AWS 분할 비용 할당 데이터(SCAD)**입니다.

하지만 SCAD는 OpenCost, Kubecost와 경쟁하는 제3의 선택지가 아닙니다. 완전히 다른 범주의 도구예요.

OpenCost와 Kubecost는 비용 모니터링 도구로, 클러스터에서 실행되어 엔지니어에게 실시간 효율성 분석 정보를 제공합니다. SCAD는 AWS 청구서에 추가 정보를 제공하는 청구 데이터 기능이에요.

  • SCAD: 재무 부서에 "각 네임스페이스에 얼마가 청구되었나?"
  • OpenCost/Kubecost: 엔지니어에게 "현재 어디서 낭비가 발생하나?"

SCAD는 EC2 노드의 비용을 파드 수준까지 세분화하고, AWS 청구 데이터에서 쿠버네티스 관련 항목을 표시합니다. 2025년 말부터는 최대 50개의 사용자 지정 쿠버네티스 파드 레이블을 비용 할당 태그로 가져올 수 있어서 팀이나 환경별로 비용을 세분화할 수 있어요.

SCAD 설정하기

중요한 점 하나를 짚고 넘어가겠습니다. SCAD 데이터는 AWS Cost Explorer에 표시되지 않습니다. AWS 공식 문서에도 명시된 내용이에요. 분할 비용 할당 데이터는 비용 및 사용량 보고서(CUR)와 CUR 2.0의 데이터 내보내기를 통해서만 확인할 수 있습니다.

설정은 2단계 선택 방식이고, 관리/결제 계정만 수행할 수 있어요.

  1. SCAD 활성화: AWS 청구 및 비용 관리 콘솔 → 비용 관리 기본 설정 → 일반 → 분할 비용 할당 데이터에서 Amazon EKS 선택

    비용 할당 방법은 세 가지입니다:

    • 리소스 요청: 파드의 CPU/메모리 요청량 기준 (가장 간단)
    • Amazon Managed Service for Prometheus: 요청량과 실제 사용량 중 높은 값 기준 (더 정확하지만 AMP 워크스페이스 필요)
    • Amazon CloudWatch Container Insights: CloudWatch 에이전트 사용 시 대안
  2. CUR에서 활성화: 새 비용 및 사용량 보고서에 분할 비용 할당 데이터 추가

약 24시간 이내에 보고서에 새로운 파드 수준 데이터가 나타나기 시작합니다. 이후 Athena로 CUR을 쿼리하고 QuickSight에서 시각화하면 됩니다.

실제로 무엇을 선택할 것인가

두 개의 별개 결정입니다. 하나의 3자 경쟁이 아니라요.

첫 번째 결정: OpenCost vs Kubecost

OpenCost를 선택할 만한 경우:

  • 실시간 효율성과 적정 규모 조정이 필요
  • 인프라 운영에 문제없음
  • 완전한 벤더 중립성과 CNCF 인증 중시
  • 자체 대시보드나 플러그인 생태계 활용 원함

단, Prometheus와 Grafana를 함께 사용해야 하고, 내장 UI를 대시보드로 활용하면 안 됩니다.

Kubecost 무료 티어를 선택할 만한 경우:

  • 단일 클러스터에서 최소 노력으로 바로 사용할 수 있는 솔루션 원함
  • 기록을 유지하는 UI와 비용 절감 추천 기능 필요
  • 소규모 단일 클러스터 운영 (가장 실용적)

두 번째 결정: SCAD 사용 여부

SCAD는 앞선 도구들을 대체하는 게 아니라 함께 사용하는 것입니다. 재무 부서에서 청구서 기준 정확한 비용 내역이 필요하다면 SCAD를 활성화하세요. 많은 팀에서 재무 정산용으로는 SCAD를, 엔지니어링 효율성 분석용으로는 OpenCost나 Kubecost를 함께 사용합니다.

주의할 점 하나는 OpenCost와 Kubecost 무료 서비스 모두 온디맨드 정가 기준으로 가격을 책정한다는 것입니다. 절약형 플랜, 예약 인스턴스, 스팟 인스턴스를 사용한다면 실제 청구 금액과 정확히 일치하지 않을 수 있어요.

결국 내린 결론

제 경우에는 단일 EKS 클러스터, 몇 개 노드, Grafana 스택 구축 없이도 작동하는 솔루션을 선호하는 환경이므로 Kubecost의 무료 EKS 번들을 클러스터 내 도구로 사용하고, 재무 부서의 정확한 비용 청구가 필요할 때 SCAD를 별도로 활성화할 계획입니다.

OpenCost로 시작한 것을 후회하지는 않습니다. 실제 배포를 통해 중요한 걸 배웠거든요. 비용 엔진비용 대시보드는 서로 다른 문제이고, "무료"에는 여러 의미가 있으며, "AWS 기본 제공"과 "쿠버네티스 기반 비용 도구"는 완전히 다른 영역이라는 점을요.

쿠버네티스를 운영하면서 "이 네임스페이스 비용이 얼마고, 그중 낭비는 얼마나 될까?"라는 질문에 답할 수 없다면 결코 작은 문제가 아닙니다. 다행히 이를 해결할 도구는 대부분 무료로 제공되니까요. 다만, 엔지니어링 효율성을 위한 것인지 재무 비용 청구를 위한 것인지 명확히 하고 그에 맞는 도구를 선택하는 게 중요합니다.

#Kubernetes#OpenCost#Kubecost#AWS#비용관리