Your Kubernetes cluster is burning money. Find out where.
No agent to deploy. No dashboard to maintain. No YAML to configure. Just install and run.
Zero setupβbrew install
, run one command, get answers. No cluster agent, no persistent storage, no config files.Full cost coverageβ Compute, storage, load balancers, and GPU costs with real-time cloud pricing.** AI-powered**β Ask questions in plain English, get kubectl commands you can copy-paste.** Slack-native**β/burn
for instant cost reports./burn ask "..."
for AI analysis.Cloud + on-premβ Works with AWS EKS, Azure AKS, GCP GKE, and on-premise clusters.** Spot readiness**β Identifies which workloads can safely move to spot instances with real-time discount and interruption rate.** Ingress LB detection**β Detects load balancers from both Services and Ingress resources, with hostname deduplication.** Time-aware**β--period 7d
for weekly averages instead of point-in-time snapshots.
brew install tanrikuluozlem/burn/burn
brew upgrade tanrikuluozlem/burn/burn
VERSION=$(curl -s https://api.github.com/repos/tanrikuluozlem/burn/releases/latest | grep tag_name | cut -d'"' -f4 | tr -d 'v') && \
curl -L "https://github.com/tanrikuluozlem/burn/releases/latest/download/burn_${VERSION}_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz
docker pull ghcr.io/tanrikuluozlem/burn:latest
git clone https://github.com/tanrikuluozlem/burn.git
helm install burn ./burn/charts/burn
go install github.com/tanrikuluozlem/burn/cmd/burn@latest
macOS:If you see a Gatekeeper warning, run:sudo xattr -d com.apple.quarantine $(which burn)
burn analyze
burn analyze --prometheus http://prometheus:9090
burn analyze --prometheus http://prometheus:9090 --period 7d
burn analyze --prometheus http://prometheus:9090 --namespace argocd
burn analyze --prometheus http://prometheus:9090 --spot
Real-time spot discount and interruption rate per instance type.
Get cluster-wide or namespace-specific recommendations:
burn analyze --prometheus http://prometheus:9090 --period 7d --ai
burn analyze --prometheus http://prometheus:9090 --namespace app-backend --ai
burn ask --prometheus http://prometheus:9090 "why is argocd so expensive?"
Example: burn analyze --namespace app-backend --period 7d --ai
NAMESPACE: app-backend (3 pods, $17.19/mo)
ββββββββββββββββββββββββββββββββββ
POD CPU REQβUSED MEM REQβUSED COST/MO
app-backend-deploy-0001 200m β <1m 256Mi β 9Mi $5.73
app-backend-deploy-0002 200m β <1m 256Mi β 9Mi $5.73
app-backend-deploy-0003 200m β <1m 256Mi β 128Mi $5.73
RECOMMENDATIONS
βββββββββββββββ
The app-backend namespace costs $17.19/mo across 3 pods, but CPU efficiency
is critically low at ~0.1% β pods request 200m CPU each while p95 usage
is under 0.31m.
[!!] 1. Rightsize CPU Requests using p95 data
app-backend-deploy-0001: p95 CPU is 0.22m β recommend 1m (1.5x p95)
app-backend-deploy-0002: p95 CPU is 0.30m β recommend 1m (1.5x p95)
app-backend-deploy-0003: p95 MEM is 128Mi (50% eff) β leave as-is
$ kubectl set resources deployment app-backend -n app-backend \
--requests=cpu=1m,memory=14Mi --limits=cpu=200m,memory=256Mi
[!!] 2. app-backend-ingress LB ($19.71/mo) costs more than the namespace
The load balancer alone exceeds the $17.19/mo compute cost.
If internal-only, switch to ClusterIP to eliminate the LB cost.
$ kubectl patch svc app-backend-ingress -n app-backend \
-p '{"spec": {"type": "ClusterIP"}}'
[!] 3. Enable VPA in Recommend Mode
Prevent over-provisioning from recurring with continuous p95 tracking.
$ kubectl apply -f vpa-app-backend.yaml
Requires ANTHROPIC_API_KEY
environment variable.
Run burn as a Slack bot:
burn serve --port 8080 --prometheus http://prometheus:9090 --period 7d
| Command | What you get |
|---|---|
/burn |
|
| Full cost report β nodes, namespaces, idle cost, LB, storage | |
/burn ns argocd |
|
| Pod-level breakdown for a namespace | |
/burn ask "what is the single biggest waste?" |
|
| AI analysis with kubectl commands |
- Create a Slack App at
https://api.slack.com/apps - Add Slash Command:
/burn
β point to your server URL +/slack
- Set
SLACK_SIGNING_SECRET
andANTHROPIC_API_KEY
environment variables - Expose the server (e.g., ngrok for testing, load balancer for production)
Burn works with on-premise and GPU clusters. Set your own resource rates:
burn analyze \
--cpu-price 0.05 \
--ram-price 0.008 \
--gpu-price 3.00 \
--storage-price 0.10
Without custom pricing, cloud-equivalent rates are used as defaults.
Kubernetes API β nodes, pods, PVCs, services, ingresses
Prometheus β actual CPU & memory usage (optional)
Cloud Pricing β real VM, storage, and GPU prices (AWS, Azure, GCP)
β
Cost Engine β compute, storage, load balancers, GPU, idle detection
β
CLI / Slack / AI Recommendations
| Priority | Source | When |
|---|---|---|
| 1 | AWS/Azure pricing API | AWS credentials available β real-time, region-aware |
| 2 | Embedded pricing DB | No credentials β 600+ AWS, 300+ Azure instances, updated weekly |
| 3 | Static fallback | Unknown instance type β estimates based on instance family |
Storage and load balancer costs are fetched from cloud APIs when available, with static fallbacks. Usage-based charges (data processing, LCU) depend on traffic volume and are not included. GPU nodes are detected automatically and priced via ratio-based cost splitting.
git clone https://github.com/tanrikuluozlem/burn.git
helm install burn ./burn/charts/burn \
--set prometheus.url=http://prometheus:9090 \
--set schedule="0 9 * * 1-5"
apiVersion: batch/v1
kind: CronJob
metadata:
name: burn-report
spec:
schedule: "0 9 * * 1-5"
jobTemplate:
spec:
template:
spec:
containers:
- name: burn
image: ghcr.io/tanrikuluozlem/burn:latest
args:
- analyze
- --prometheus
- http://prometheus-server.monitoring:80
- --period
- 7d
- --ai
- --slack
env:
- name: ANTHROPIC_API_KEY
valueFrom:
secretKeyRef:
name: burn-secrets
key: anthropic-api-key
- name: SLACK_WEBHOOK_URL
valueFrom:
secretKeyRef:
name: burn-secrets
key: slack-webhook-url
restartPolicy: OnFailure
| Variable | Description | Required for |
|---|---|---|
ANTHROPIC_API_KEY |
||
| Claude API key | --ai , ask , serve |
|
SLACK_WEBHOOK_URL |
||
| Slack webhook URL | --slack |
|
SLACK_SIGNING_SECRET |
||
| Slack app signing secret | serve |
| Flag | Description |
|---|---|
--cpu-price |
|
| CPU cost per core per hour (on-prem) | |
--ram-price |
|
| RAM cost per GiB per hour (on-prem) | |
--gpu-price |
|
| GPU cost per unit per hour (on-prem) | |
--storage-price |
|
| Storage cost per GiB per month (on-prem) | |
--spot |
|
| Show spot instance readiness details |
Cloud clusters use real pricing automatically. These flags are for on-premise clusters where pricing is not available from a cloud provider.
make build # Build binary
make test # Run tests
make lint # Run linter
Apache 2.0 β See LICENSE for details.