Reconciling Kubernetes cost estimates with CUR / FOCUS billing data

Hacker News Top Tools

Summary

burn is a zero-setup, AI-powered CLI tool that analyzes Kubernetes cluster costs across compute, storage, load balancers, and GPUs, with spot readiness, Prometheus integration, and Slack-native queries.

No content available
Original Article
View Cached Full Text

Cached at: 06/01/26, 01:38 AM

tanrikuluozlem/burn

Source: https://github.com/tanrikuluozlem/burn

burn

CI Release Go Report Card License

Your Kubernetes cluster is burning money. Find out where.

demo

No agent to deploy. No dashboard to maintain. No YAML to configure. Just install and run.

Watch the demo

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

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

ask demo

Requires ANTHROPIC_API_KEY environment variable.

Slack integration

Run burn as a Slack bot:

burn serve --port 8080 --prometheus http://prometheus:9090 --period 7d
CommandWhat you get
/burnFull cost report — nodes, namespaces, idle cost, LB, storage
/burn ns argocdPod-level breakdown for a namespace
/burn ask "what is the single biggest waste?"AI analysis with kubectl commands

Slack AI

Slack setup

  1. Create a Slack App at https://api.slack.com/apps
  2. Add Slash Command: /burn → point to your server URL + /slack
  3. Set SLACK_SIGNING_SECRET and ANTHROPIC_API_KEY environment variables
  4. 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

PrioritySourceWhen
1AWS/Azure pricing APIAWS credentials available — real-time, region-aware
2Embedded pricing DBNo credentials — 600+ AWS, 300+ Azure instances, updated weekly
3Static fallbackUnknown 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

VariableDescriptionRequired for
ANTHROPIC_API_KEYClaude API key--ai, ask, serve
SLACK_WEBHOOK_URLSlack webhook URL--slack
SLACK_SIGNING_SECRETSlack app signing secretserve
FlagDescription
--cpu-priceCPU cost per core per hour (on-prem)
--ram-priceRAM cost per GiB per hour (on-prem)
--gpu-priceGPU cost per unit per hour (on-prem)
--storage-priceStorage cost per GiB per month (on-prem)
--spotShow 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.

Similar Articles

New Cyber-OSINT model released

Hacker News Top

A new Cyber-OSINT AI model is released, featuring a MoE architecture trained on OSINT instructions for local execution and cyber threat intelligence tasks like attribution and geolocation.

CoW — a stacking window manager for Wayland

Lobsters Hottest

CoW is a stacking window manager for Wayland that aims to replicate the look-and-feel of FVWM and MWM while offering modern features like IPC scripting and customizable server-side decorations. It is developed in C and hosted on Codeberg.

Using any C++ library in Godot

Hacker News Top

This blog post explains how to integrate C++ libraries into the Godot game engine using GDExtension and the godot-cpp bindings, with Conan package manager for handling dependencies and building extensions.