어느덧 쿠버네티스로 서비스를 운영을 시작한지 4년차가 되었습니다.
그리고 클라우드를 사용한다면 피할 수 없는 과제, 비용 절감을 할 때가 다가왔습니다.
다들 잘 아시겠지만, 클라우드 환경에서 비용 관리는 매우 중요한 과제 중 하나입니다.
특히, 쿠버네티스 클러스터를 운영하는 경우 비용 절감을 위해서는 네임스페이스, 워크로드로 구분하거나 팀/부서 별로 리소스 사용량과 비용을 정확히 파악하는 것이 필수적입니다.
이번 포스트에서는 쿠버네티스 비용 모니터링 및 최적화 도구인 Kubecost 에 대해 살펴보겠습니다.
특히 AWS를 사용하는 경우 앞으로 Kubecost를 사용하는 많은 방법에 대해서 이어서 포스팅 할 예정입니다.
Kubecost?
서두에 언급했듯이, 쿠버네티스 환경에서 서비스 하는 경우 비용 추적하는 것은 생각보다 큰 숙제입니다.
그 이유는 대표적으로 다음과 같습니다.
•
여러 팀이 같은 클러스터를 공유하면서 리소스를 동적으로 사용
•
노드는 여러 팀이 공유하므로 정확한 비용 할당이 어려움
•
오토스케일링 환경에서는 리소스 사용량이 계속 변동됨
Kubecost는 이런 어려움을 해결하기 위해 쿠버네티스 클러스터의 비용을 모니터링/분석하고, 최적화를 도와주는 도구입니다.
각 네임스페이스, 워크로드, 노드 뿐만 아니라, 팀 별로도, 라벨 별로도 실제 클라우드 비용을 정확하게 분석하고 시각화하여 보여줍니다.
Kubecost를 사용하면 다음과 같은 질문에 쉽게 답을 얻을 수 있습니다.
•
나의 Kubernetes 클러스터에서 어떤 워크로드가 가장 많은 비용을 발생시키는가?
•
특정 Namespace, 특정 팀의 application 리소스 비용은 어떻게 되는가?
•
Resource requests/limits를 최적화 값과 비용 절감효과는 어떻게 되는가?
•
Kubernetes 환경에서 Chargeback 구현하는 방법
Opencost는 뭐에요?
opencost는 Cloud Native Computing Foundation (CNCF)의 Incubating 프로젝트로, 쿠버네티스 환경에서 비용 모니터링 및 분석을 위한 오픈소스 솔루션입니다.
Kubecost는 opencost를 기반으로 한 상용 제품으로, 추가적인 기능과 엔터프라이즈급 지원을 제공합니다.
Kubecost 주요 기능
Kubecost의 주요 기능에 대해 알아보겠습니다.
•
실시간 비용 모니터링
◦
클러스터, 네임스페이스, 워크로드 단위의 상세한 비용 분석
◦
CPU, 메모리, 스토리지, 네트워크 등 리소스별 비용 추적
◦
실시간 비용 알림 및 리포팅 기능
•
비용 할당 및 분석
◦
팀/부서별 비용 할당
◦
커스텀 레이블 기반의 비용 분류
◦
상세한 비용 리포트 생성
•
비용 최적화 추천 (Savings)
◦
리소스 requests/limits 최적화 제안
◦
유휴 리소스 식별
◦
비용 절감 가능한 영역 분석
AWS Optimized Kubecost
Kubecost는 기본적으로 상용 솔루션입니다. 따라서 비용을 지불하지 않으면, 무료 솔루션인 Opencost와 크게 다를 바가 없습니다.
하지만 AWS를 사용 중이라면, Kubecost의 유료 버전을 사용할 수 있습니다.
AWS는 EKS 클러스터 비용 가시성을 위해 AWS에 최적화된 Kubecost를 별도로 제공하고 있습니다.
Kubecost가 기본적으로 무료 버전을 제공하긴하지만, AWS가 제공하는 Kubecost는 추가 요금 없이 commercial features 의 일부를 사용할 수 있습니다.
물론 Kubecost의 Enterprise 버전과 완전히 동일한 기능을 제공하지는 않지만, 충분히 유용한 기능들이 Enable 되니 AWS를 사용 중이라면 꼭 별도의 이미지로 설치하시길 바랍니다.
아래는 Kubecost 각 버전의 기능표이니 참고하세요.
Feature | Kubecost free tier 2.0 | Amazon EKS optimized Kubecost bundle 2.0 | Kubecost Enterprise 2.0 |
Cluster cost visibility | Single clusters up to 250 cores | Unified multi-cluster without core limits when integrated with Amazon Managed Service for Prometheus | Unified and unlimited number of clusters across unlimited numbers of environments (i.e. multi-cloud) |
Deployment | User hosted | User hosted | User hosted, Kubecost hosted (dedicated tenant), SaaS |
Databases supported | Local Prometheus | Amazon Managed Service for Prometheus or Local Prometheus | Any prometheus flavor and custom databases |
Database retention support (raw metrics) | 15 days | Unlimited historical data | Unlimited historical data |
Kubecost API and UI retention (ETL) | 15 days | 15 days | Unlimited |
Hybrid cloud visibility | - | Amazon EKS and Amazon EKS Anywhere clusters | Multi-cloud and hybrid cloud |
Alerts and recurring reports | Only supported on the primary cluster, limited to 250 cores | ||
Saved reports | - | Reports using 15 days of metrics | Reports using unlimited historical data and metrics |
Cloud billing integration | Only supported on the primary cluster, limited to 250 cores | Custom pricing support for AWS (including multiple clusters and multiple accounts) | Custom pricing support for any cloud |
Savings recommendations | Only supported on the primary cluster, limited to 250 cores | Primary cluster insights, but there is no 250 core limit | Multi-cluster insights |
Governance: Audits | - | - | Audit historical cost events |
Single sign-on (SSO) support | - | Amazon Cognito supported | Okta, Auth0, PingID, KeyCloak, and anything else custom |
Role-based access control (RBAC) with SAML 2.0 | - | - | Okta, Auth0, PingID, KeyCloak, and anything else custom |
Enterprise training and onboarding | - | - | Full-service training and FinOps onboarding |
Teams | - | - | Yes |
Showback? Chargeback?
Kubecost 이야기를 하려는데 갑자기 무슨 소리인가 싶겠지만, 저는 Kubecost에 대해 알아보며 비용 관리 방법에 대해 처음 알게된 내용이라 함께 정리합니다.
Showback과 Chargeback은 IT 서비스나 리소스 사용에 대한 비용 관리 방식이며, 서로 유사하지만 조금씩 다른 포인트를 지니고 있습니다.
Showback은 말 그대로 클라우드 비용을 부서별로 집계하여 "보여주는" 것입니다.
실제로 비용을 청구하지는 않지만, 각각의 부서가 얼마나 리소스를 사용하는지 가시성을 제공하여 비용에 대한 인식을 개선하는 것에 목적을 두고 있습니다.
•
특징
◦
실제 청구 없음(No Actual Billing)
◦
비용 할당(Cost Allocation)
Chargeback은 클라우드 비용을 실제로 각 부서에 "청구" 하는 것입니다.
실제로 클라우드 사용에 대한 비용을 지불해야하는 것이 Showback과 가장 큰 차이입니다.
•
특징
◦
실제 청구(Actual Billing)
◦
비용 회수(Cost Recovery)
◦
예산 관리(Budget Control)
정리하면, Showback은 비용 가시성을 통해 비용 인식을 높이며, Chargeback은 실제 비용 청구를 통해 실질적인 비용 관리 효과와 책임성에 중점을 둡니다.
Showback은 실제 청구가 없기 때문에 Chargeback 보다 복잡성이나 부담이 덜하지만, 실질적인 비용 청구가 일어나는 Chargeback을 실행하기 위해 먼저 도입하는 접근 방식이 많이 사용됩니다.
Kubecost Architecture
Kubecost의 architecture는 아주 단순합니다.
비용 계산을 수행하는 cost-analyzer와 이에 필요한 메트릭을 수집하기 위한 Prometheus가 핵심 구성요소 입니다.
•
cost-analyzer, forecast
◦
Kubecost의 핵심 컴포넌트로 cost-analyzer와 forecast Pod로 구성
◦
리소스 사용량을 분석하여 비용을 계산하고 가시성 제공
◦
forcast는 비용을 예측하는 역할
◦
가시화를 위한 프론트엔드 제공
•
Prometheus
◦
Kubecost용 별도 Prometheus 구성
◦
노드 비용, 워크로드/노드 리소스 사용량과 같은 메트릭을 수집하여 저장
◦
AWS의 AMP, GCP의 GMP, 별도 구축한 Prometheus 등의 별도 프로메테우스 사용 가능
(특히 AWS AMP 연동에 대해서는 추후 포스팅 하겠습니다.)
Kubecost의 비용 계산 방식
그렇다면 Kubecost가 어떻게 비용을 계산할까요?
Kubecost가 무언가 새로운 개념을 통해 비용을 다루는 것은 아니고, Prometheus를 사용한다는 점에서 약간의 힌트를 얻을 수 있습니다.
Prometheus는 기본적으로 CPU, Memory, PV, Network 같은 쿠버네티스의 리소스 사용량을 수집합니다.
Kubecost는 이렇게 수집한 리소스 사용량에 각 클라우드 벤더의 비용 정보를 적절히(?) 계산하여 비용을 측정합니다.
물론 더 깊게 파고들면 이렇게 간단한 내용은 아닙니다만… 사용하는 입장에서는 이정도만 알고있으면 아주아주 충분합니다.
그럼에도 혹시나 비용 측정을 하는 방법에 대해 자세한 내용이 궁금하다면 아래 링크를 참고해주세요.
설치 방법
이 부분은 Kubecost가 궁금한 분들이라면 별도로 설명이 필요 없을 것 같아 링크만 남겨둡니다.
•
기본 설치 방법
•
AWS EKS 사용자를 위한 방법
주요 기능 둘러보기
Overview
•
전체 쿠버네티스 클러스터 전반 비용 요약
•
일별 클러스터 비용 트렌드
•
Cluster Efficiency 지표
•
네임스페이스별 비용 분포 / 트렌드 요약
Cost Allocation
•
Cost Allocation 기능 요약
◦
네임스페이스, 워크로드, 팀별 등 비용 분석
◦
Label 기반의 비용 추적
◦
공유 리소스 비용 분배 관리 등
•
Allocation Aggregation 차원
◦
쿠버네티스 리소스
▪
Cluster
▪
Namespace
▪
Workload
▪
Pod/Container
◦
Label
▪
team
▪
department
▪
app
▪
env
•
비용 절감에 어떻게 활용할까?
◦
팀별 / 서비스별 비용 가시화
◦
불필요한 리소스 사용 식별
◦
공유 리소스 최적화
Saving Insights - Right Sizing Recommendations
•
Right Sizing Recommendation 기능 요약
◦
컨테이너 리소스 requests/limits 최적화 목적
◦
노드 타입(사이즈) 및 갯수 추천
•
비용 절감에 어떻게 활용할까?
◦
원하는 time window 기반으로 컨테이너 cpu/memory 할당 최적화
◦
노드 구성 최적화
마치며
이번 포스팅에서는 Kubecost가 무엇인지 살펴봤습니다.
사실 Kubecost를 설치하고, hands-on 하는 것도 포스팅하려고 생각은 했으나… Kubecost가 궁금할 정도면 이미 혼자서 뚝딱하실 분들이라고 믿습니다.
귀찮은건 절대 아니고(중요), 저는 AWS EKS에서 Kubecost를 사용하는 것에 대해 더 깊은 내용을 다루려는 것이 목적이기 때문입니다.
앞으로는 Kubecost의 Idle, Efficiency 개념과 AMP와 연동하는 법, 그리고 마지막으로는 Kubecost UI를 버리고 Kubecost의 메트릭을 활용하여 Grafana에서 나만의 비용 대시보드를 만드는 법까지 쭉 달려보겠습니다!