{"slug": "show-hn-burn-k8s-cost-cli-that-pulls-actual-spot-prices-per-instance-type", "title": "Show HN: Burn, K8s cost CLI that pulls actual spot prices per instance type", "summary": "A new open-source Kubernetes cost monitoring tool called Burn provides real-time spot pricing per instance type, AI-powered cost analysis, and Slack integration without requiring cluster agents or configuration files. The tool, available via Homebrew, Docker, and Helm, identifies which workloads can safely move to spot instances and detects load balancer costs across AWS EKS, Azure AKS, GCP GKE, and on-premise clusters.", "body_md": "Your Kubernetes cluster is burning money. Find out where.\n\nNo agent to deploy. No dashboard to maintain. No YAML to configure. Just install and run.\n\n**Zero setup**—`brew install`\n\n, 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`\n\nfor instant cost reports.`/burn ask \"...\"`\n\nfor 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`\n\nfor weekly averages instead of point-in-time snapshots.\n\n```\n# Homebrew\nbrew install tanrikuluozlem/burn/burn\n\n# Upgrade\nbrew upgrade tanrikuluozlem/burn/burn\n\n# Binary\nVERSION=$(curl -s https://api.github.com/repos/tanrikuluozlem/burn/releases/latest | grep tag_name | cut -d'\"' -f4 | tr -d 'v') && \\\ncurl -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\n\n# Docker\ndocker pull ghcr.io/tanrikuluozlem/burn:latest\n\n# Helm\ngit clone https://github.com/tanrikuluozlem/burn.git\nhelm install burn ./burn/charts/burn\n\n# Go\ngo install github.com/tanrikuluozlem/burn/cmd/burn@latest\n```\n\nmacOS:If you see a Gatekeeper warning, run:`sudo xattr -d com.apple.quarantine $(which burn)`\n\n```\n# Cost breakdown (without Prometheus)\nburn analyze\n\n# With Prometheus (pass your Prometheus URL)\nburn analyze --prometheus http://prometheus:9090\n\n# 7-day average\nburn analyze --prometheus http://prometheus:9090 --period 7d\n\n# Drill into a namespace\nburn analyze --prometheus http://prometheus:9090 --namespace argocd\n\n# Spot readiness\nburn analyze --prometheus http://prometheus:9090 --spot\n```\n\nReal-time spot discount and interruption rate per instance type.\n\nGet cluster-wide or namespace-specific recommendations:\n\n```\nburn analyze --prometheus http://prometheus:9090 --period 7d --ai\nburn analyze --prometheus http://prometheus:9090 --namespace app-backend --ai\nburn ask --prometheus http://prometheus:9090 \"why is argocd so expensive?\"\n```\n\nExample: `burn analyze --namespace app-backend --period 7d --ai`\n\n```\nNAMESPACE: app-backend (3 pods, $17.19/mo)\n──────────────────────────────────\nPOD                      CPU REQ→USED  MEM REQ→USED   COST/MO\napp-backend-deploy-0001  200m → <1m    256Mi → 9Mi    $5.73\napp-backend-deploy-0002  200m → <1m    256Mi → 9Mi    $5.73\napp-backend-deploy-0003  200m → <1m    256Mi → 128Mi  $5.73\n\nRECOMMENDATIONS\n───────────────\nThe app-backend namespace costs $17.19/mo across 3 pods, but CPU efficiency\nis critically low at ~0.1% — pods request 200m CPU each while p95 usage\nis under 0.31m.\n\n[!!] 1. Rightsize CPU Requests using p95 data\n   app-backend-deploy-0001: p95 CPU is 0.22m → recommend 1m (1.5x p95)\n   app-backend-deploy-0002: p95 CPU is 0.30m → recommend 1m (1.5x p95)\n   app-backend-deploy-0003: p95 MEM is 128Mi (50% eff) — leave as-is\n   $ kubectl set resources deployment app-backend -n app-backend \\\n     --requests=cpu=1m,memory=14Mi --limits=cpu=200m,memory=256Mi\n\n[!!] 2. app-backend-ingress LB ($19.71/mo) costs more than the namespace\n   The load balancer alone exceeds the $17.19/mo compute cost.\n   If internal-only, switch to ClusterIP to eliminate the LB cost.\n   $ kubectl patch svc app-backend-ingress -n app-backend \\\n     -p '{\"spec\": {\"type\": \"ClusterIP\"}}'\n\n[!] 3. Enable VPA in Recommend Mode\n   Prevent over-provisioning from recurring with continuous p95 tracking.\n   $ kubectl apply -f vpa-app-backend.yaml\n```\n\nRequires `ANTHROPIC_API_KEY`\n\nenvironment variable.\n\nRun burn as a Slack bot:\n\n```\nburn serve --port 8080 --prometheus http://prometheus:9090 --period 7d\n```\n\n| Command | What you get |\n|---|---|\n`/burn` |\nFull cost report — nodes, namespaces, idle cost, LB, storage |\n`/burn ns argocd` |\nPod-level breakdown for a namespace |\n`/burn ask \"what is the single biggest waste?\"` |\nAI analysis with kubectl commands |\n\n- Create a Slack App at\n[https://api.slack.com/apps](https://api.slack.com/apps) - Add Slash Command:\n`/burn`\n\n→ point to your server URL +`/slack`\n\n- Set\n`SLACK_SIGNING_SECRET`\n\nand`ANTHROPIC_API_KEY`\n\nenvironment variables - Expose the server (e.g., ngrok for testing, load balancer for production)\n\nBurn works with on-premise and GPU clusters. Set your own resource rates:\n\n```\nburn analyze \\\n  --cpu-price 0.05 \\\n  --ram-price 0.008 \\\n  --gpu-price 3.00 \\\n  --storage-price 0.10\n```\n\nWithout custom pricing, cloud-equivalent rates are used as defaults.\n\n```\nKubernetes API → nodes, pods, PVCs, services, ingresses\nPrometheus     → actual CPU & memory usage (optional)\nCloud Pricing  → real VM, storage, and GPU prices (AWS, Azure, GCP)\n         ↓\n    Cost Engine → compute, storage, load balancers, GPU, idle detection\n         ↓\n    CLI / Slack / AI Recommendations\n```\n\n| Priority | Source | When |\n|---|---|---|\n| 1 | AWS/Azure pricing API | AWS credentials available — real-time, region-aware |\n| 2 | Embedded pricing DB | No credentials — 600+ AWS, 300+ Azure instances, updated weekly |\n| 3 | Static fallback | Unknown instance type — estimates based on instance family |\n\nStorage 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.\n\n```\ngit clone https://github.com/tanrikuluozlem/burn.git\nhelm install burn ./burn/charts/burn \\\n  --set prometheus.url=http://prometheus:9090 \\\n  --set schedule=\"0 9 * * 1-5\"\napiVersion: batch/v1\nkind: CronJob\nmetadata:\n  name: burn-report\nspec:\n  schedule: \"0 9 * * 1-5\"\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          containers:\n          - name: burn\n            image: ghcr.io/tanrikuluozlem/burn:latest\n            args:\n            - analyze\n            - --prometheus\n            - http://prometheus-server.monitoring:80\n            - --period\n            - 7d\n            - --ai\n            - --slack\n            env:\n            - name: ANTHROPIC_API_KEY\n              valueFrom:\n                secretKeyRef:\n                  name: burn-secrets\n                  key: anthropic-api-key\n            - name: SLACK_WEBHOOK_URL\n              valueFrom:\n                secretKeyRef:\n                  name: burn-secrets\n                  key: slack-webhook-url\n          restartPolicy: OnFailure\n```\n\n| Variable | Description | Required for |\n|---|---|---|\n`ANTHROPIC_API_KEY` |\nClaude API key | `--ai` , `ask` , `serve` |\n`SLACK_WEBHOOK_URL` |\nSlack webhook URL | `--slack` |\n`SLACK_SIGNING_SECRET` |\nSlack app signing secret | `serve` |\n\n| Flag | Description |\n|---|---|\n`--cpu-price` |\nCPU cost per core per hour (on-prem) |\n`--ram-price` |\nRAM cost per GiB per hour (on-prem) |\n`--gpu-price` |\nGPU cost per unit per hour (on-prem) |\n`--storage-price` |\nStorage cost per GiB per month (on-prem) |\n`--spot` |\nShow spot instance readiness details |\n\nCloud clusters use real pricing automatically. These flags are for on-premise clusters where pricing is not available from a cloud provider.\n\n```\nmake build    # Build binary\nmake test     # Run tests\nmake lint     # Run linter\n```\n\nApache 2.0 — See [LICENSE](/tanrikuluozlem/burn/blob/main/LICENSE) for details.", "url": "https://wpnews.pro/news/show-hn-burn-k8s-cost-cli-that-pulls-actual-spot-prices-per-instance-type", "canonical_source": "https://github.com/tanrikuluozlem/burn", "published_at": "2026-05-26 06:15:07+00:00", "updated_at": "2026-05-26 06:39:08.658864+00:00", "lang": "en", "topics": ["ai-tools", "ai-infrastructure", "mlops"], "entities": ["Burn", "Kubernetes", "AWS EKS", "Azure AKS", "GCP GKE", "Homebrew", "Docker", "Helm"], "alternates": {"html": "https://wpnews.pro/news/show-hn-burn-k8s-cost-cli-that-pulls-actual-spot-prices-per-instance-type", "markdown": "https://wpnews.pro/news/show-hn-burn-k8s-cost-cli-that-pulls-actual-spot-prices-per-instance-type.md", "text": "https://wpnews.pro/news/show-hn-burn-k8s-cost-cli-that-pulls-actual-spot-prices-per-instance-type.txt", "jsonld": "https://wpnews.pro/news/show-hn-burn-k8s-cost-cli-that-pulls-actual-spot-prices-per-instance-type.jsonld"}}