云成本分摊、预算告警与优化优先级
FinOps 的核心是让成本可见、可归属、可决策:先分摊到团队和服务,再看单位成本,最后按“节省金额 × 确定性 / 投入”排序优化。只看总账单无法驱动行动。
成本优化顺序通常是:删除闲置资源 → 调整规格和副本 → 使用弹性/竞价 → 购买承诺折扣。承诺折扣最后做,否则业务变化后会被长期合约锁死。
成本分摊标签(缺失即无法归属):
| 标签 | 必填 | 示例 | 用途 |
|---|---|---|---|
| team | 是 | checkout | 团队分摊 |
| service | 是 | payment-api | 单服务成本 |
| env | 是 | prod | 区分生产/非生产 |
| owner | 是 | @pay-team | 异常联系人 |
| cost-center | 是 | CC-1024 | 财务对账 |
预算消耗分级动作:
| 预算消耗 | 动作 |
|---|---|
| 50% | 通知 owner,检查增长趋势 |
| 80% | 周报附优化建议,限制非生产扩容 |
| 100% | 冻结非生产扩容,例外需审批 |
| 120% | 按事故复盘,检查标签和分摊错误 |
按命名空间查看资源申请,作为分摊基数:
kubectl get pods -A -o custom-columns='NS:.metadata.namespace,CPU:.spec.containers[*].resources.requests.cpu,MEM:.spec.containers[*].resources.requests.memory'
用 Infracost 在 PR 阶段看变更成本:
infracost breakdown --path . --format table
infracost diff --path . --compare-to infracost-base.json
单位成本计算:
# 月成本 12000 美元,月请求 8 亿
awk 'BEGIN {printf "每百万请求成本: $%.2f\n", 12000/(800000000/1000000)}'
承诺折扣覆盖决策:
| 覆盖率 | 策略 |
|---|---|
| < 60% | 按稳定基线补 1 年期承诺,不覆盖峰值 |
| 60%–80% | 保持,按季度评估 |
| > 90% | 检查是否过度承诺,保留突发弹性 |
资源优化优先级 = 年化节省金额 × 实施确定性 / 实施人日:
| 动作 | 年节省 | 确定性 | 人日 | 优先级 |
|---|---|---|---|---|
| 删除闲置 PVC | $18,000 | 高 | 2 | 高 |
| 非生产定时关机 | $42,000 | 高 | 5 | 高 |
| 调整过度申请的 CPU | $60,000 | 中 | 15 | 中 |
| 购买 3 年承诺 | $120,000 | 低 | 10 | 低 |
合上页面,先回答,再展开对照。