GitHub - tanrikuluozlem/burn: See what's burning your Kubernetes budget
Pangram verdict · v3.3
We believe that this document is a mix of AI-generated, and human-written content
AI likelihood · overall
MixedArticle text · 956 words · 5 segments analyzed
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.
Why burn
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.
Install # Homebrew brew install tanrikuluozlem/burn/burn
# Upgrade brew upgrade tanrikuluozlem/burn/burn
# Binary 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 docker pull ghcr.io/tanrikuluozlem/burn:latest
# Helm git clone https://github.com/tanrikuluozlem/burn.git helm install burn ./burn/charts/burn
# Go 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)
Quick start # Cost breakdown (without Prometheus) burn analyze
# With Prometheus (pass your Prometheus URL) burn analyze --prometheus http://prometheus:9090
# 7-day average burn analyze --prometheus http://prometheus:9090 --period 7d
# Drill into a namespace burn analyze --prometheus http://prometheus:9090 --namespace argocd
# Spot readiness burn analyze --prometheus http://prometheus:9090 --spot Spot readiness
Real-time spot discount and interruption rate per instance type. AI recommendations 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
Ask questions in plain English
Requires ANTHROPIC_API_KEY environment variable.
Slack integration 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
Slack setup
Create a Slack App at https://api.slack.com/apps Add Slash Command: /burn → point to your server URL + /slack Set SLACK_SIGNING_SECRET and ANTHROPIC_API_KEY environment variables Expose the server (e.g., ngrok for testing, load balancer for production)
On-prem and GPU clusters 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. How it works 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
Pricing sources
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.
Deploy to Kubernetes Helm 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" CronJob (daily Slack reports) 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 Configuration
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. Development make build # Build binary make test # Run tests make lint # Run linter License Apache 2.0 — See LICENSE for details.