将Kubernetes成本估算与CUR/FOCUS账单数据对齐

Hacker News Top 工具

摘要

burn是一个零配置、人工智能驱动的CLI工具,可分析涵盖计算、存储、负载均衡器和GPU的Kubernetes集群成本,支持现货实例就绪性、Prometheus集成和Slack原生查询。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/01 01:38

tanrikuluozlem/burn

来源:https://github.com/tanrikuluozlem/burn

burn

CI(https://github.com/tanrikuluozlem/burn/actions/workflows/ci.yml) 发布(https://github.com/tanrikuluozlem/burn/releases) Go 报告卡(https://goreportcard.com/report/github.com/tanrikuluozlem/burn) 许可证

你的 Kubernetes 集群正在烧钱,找出问题所在。

演示

无需部署代理、无需维护仪表板、无需配置 YAML。只需安装并运行。

观看演示(https://youtu.be/uGVvaKXeTf4)

为什么选择 burn

  • 零配置 — brew install,运行一条命令,立即获得答案。无需集群代理、无需持久化存储、无需配置文件。
  • 全面成本覆盖 — 计算、存储、负载均衡器和GPU成本,实时云定价。
  • AI 驱动 — 用自然英语提问,获得可直接复制的 kubectl 命令。
  • Slack 原生 — /burn 即时成本报告,/burn ask "..." AI 分析。
  • 云+本地 — 支持 AWS EKS、Azure AKS、GCP GKE 以及本地集群。
  • Spot 就绪检测 — 识别哪些工作负载可以安全迁移到 spot 实例,实时折扣和中止率。
  • Ingress LB 检测 — 同时检测 Service 和 Ingress 资源的负载均衡器,并去重主机名。
  • 时间感知 — --period 7d 提供周平均值而非瞬时快照。

安装

# Homebrew
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
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: 如果遇到 Gatekeeper 警告,请运行:sudo xattr -d com.apple.quarantine $(which burn)

快速开始

# 成本分解(无需 Prometheus)
burn analyze

# 使用 Prometheus(传入 Prometheus URL)
burn analyze --prometheus http://prometheus:9090

# 7天平均值
burn analyze --prometheus http://prometheus:9090 --period 7d

# 深入某个命名空间
burn analyze --prometheus http://prometheus:9090 --namespace argocd

# Spot 就绪检测
burn analyze --prometheus http://prometheus:9090 --spot

Spot 就绪检测

spot 就绪检测

每种实例类型的实时 spot 折扣和中止率。

AI 建议

获取集群范围或命名空间特定的建议:

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 "为什么 argocd 这么贵?"

示例:burn analyze --namespace app-backend --period 7d --ai

NAMESPACE: app-backend (3 个 Pod,每月 $17.19)
──────────────────────────────────
POD                      CPU 请求→实际  内存 请求→实际   每月成本
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

建议
───────────────
命名空间 app-backend 在 3 个 Pod 上每月花费 $17.19,但 CPU 效率
极低,仅约 0.1% — 每个 Pod 请求 200m CPU,而 p95 使用量
不足 0.31m。

[!!] 1. 使用 p95 数据调整 CPU 请求
   app-backend-deploy-0001:p95 CPU 为 0.22m → 建议 1m(p95 的 1.5 倍)
   app-backend-deploy-0002:p95 CPU 为 0.30m → 建议 1m(p95 的 1.5 倍)
   app-backend-deploy-0003:p95 内存为 128Mi(效率 50%)— 保持原样
   $ 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)比该命名空间成本还高
   仅负载均衡器就已超过 $17.19 的计算成本。
   如果仅用于内部,请切换为 ClusterIP 以消除 LB 成本。
   $ kubectl patch svc app-backend-ingress -n app-backend \
     -p '{"spec": {"type": "ClusterIP"}}'

[!] 3. 启用 VPA 推荐模式
   通过持续的 p95 跟踪防止过度配置再次发生。
   $ kubectl apply -f vpa-app-backend.yaml

用自然英语提问

提问演示

需要设置 ANTHROPIC_API_KEY 环境变量。

Slack 集成

将 burn 作为 Slack 机器人运行:

burn serve --port 8080 --prometheus http://prometheus:9090 --period 7d
命令返回内容
/burn完整成本报告 — 节点、命名空间、闲置成本、LB、存储
/burn ns argocd命名空间级别的 Pod 分解
/burn ask "最大的浪费是什么?"AI 分析及 kubectl 命令

Slack AI

Slack 设置

  1. 在 https://api.slack.com/apps 创建一个 Slack 应用
  2. 添加斜杠命令:/burn → 指向你的服务器 URL + /slack
  3. 设置 SLACK_SIGNING_SECRET 和 ANTHROPIC_API_KEY 环境变量
  4. 暴露服务器(例如测试用 ngrok,生产用负载均衡器)

本地集群和 GPU 集群

Burn 同样适用于本地集群和 GPU 集群。设置自定义资源费率:

burn analyze \
  --cpu-price 0.05 \
  --ram-price 0.008 \
  --gpu-price 3.00 \
  --storage-price 0.10

若未指定自定义定价,默认采用云等效费率。

工作原理

Kubernetes API → 节点、Pod、PVC、Service、Ingress
Prometheus     → 实际 CPU 和内存用量(可选)
云定价         → 实时 VM、存储和 GPU 价格(AWS、Azure、GCP)
         ↓
    成本引擎 → 计算、存储、负载均衡器、GPU、闲置检测
         ↓
    CLI / Slack / AI 建议

定价来源

优先级来源何时使用
1AWS/Azure 定价 API存在 AWS 凭据 — 实时、区域感知
2内置定价数据库无凭据 — 600+ 个 AWS 实例、300+ 个 Azure 实例,每周更新
3静态回退未知实例类型 — 基于实例家族的估算

存储和负载均衡器成本在可用时从云 API 获取,否则使用静态回退。基于使用量的费用(数据处理、LCU)取决于流量大小,未包含在内。GPU 节点自动检测,并通过基于比率的方式分摊成本。

部署到 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(每日 Slack 报告)

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

配置

变量描述用于哪些功能
ANTHROPIC_API_KEYClaude API 密钥--ai、ask、serve
SLACK_WEBHOOK_URLSlack webhook URL--slack
SLACK_SIGNING_SECRETSlack 应用签名密钥serve
标志描述
--cpu-price每核心每小时 CPU 成本(本地集群)
--ram-price每 GiB 每小时内存成本(本地集群)
--gpu-price每单元每小时 GPU 成本(本地集群)
--storage-price每 GiB 每月存储成本(本地集群)
--spot显示 spot 实例就绪详情

云集群自动使用实时定价。这些标志用于无法从云提供商获取定价的本地集群。

开发

make build    # 构建二进制文件
make test     # 运行测试
make lint     # 运行 linter

许可证

Apache 2.0 — 详见 LICENSE 文件。

相似文章