💰 第34课:成本优化
核心概念
成本优化(FinOps):让每分钱花在刀刃上
云成本是DevOps最容易被忽视的方面。FinOps将成本可视化、责任化、优化。
成本优化策略
1. 右键化(Right-sizing):匹配实例规格与需求
2. 弹性伸缩:按负载自动扩缩容
3. Spot/抢占式实例:非关键工作负载低价
4. 保留实例(RI):长期稳定负载买预留
5. 存储分层:热→冷→归档自动降级
6. 清理闲置资源:未挂载磁盘、未使用IP
命令实操
1. AWS成本分析 ✅
# 月度成本
aws ce get-cost-and-usage \
--time-period Start=2026-05-01,End=2026-05-19 \
--granularity DAILY --metrics BlendedCost \
--group-by Type=SERVICE
# 闲置资源
aws ec2 describe-volumes --filters Name=status,Values=available \
--query 'Volumes[].[VolumeId,Size,State]' --output table
aws ec2 describe-addresses --query 'Addresses[].[PublicIp,AssociationId]' --output table
# Right-sizing建议
aws compute-optimizer get-ec2-recommendation-summary --account-ids
2. K8s资源优化 ✅
# 资源使用 vs 请求
kubectl top pods -A --sort-by=memory
# VPA推荐(仅推荐不自动修改)
cat > vpa-recommendation.yaml << 'EOF'
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata: {name: myapp-vpa}
spec:
targetRef: {apiVersion: apps/v1, kind: Deployment, name: myapp}
updatePolicy: {updateMode: "Off"}
EOF
kubectl apply -f vpa-recommendation.yaml
kubectl get vpa myapp-vpa -o jsonpath='{.status.recommendation}' | jq .
# Kubecost
helm install kubecost kubecost/cost-analyzer \
--namespace kubecost --create-namespace \
--set kubecostToken="devops@company.com"
3. Spot实例与成本告警 ✅
# Spot Fleet
aws ec2 request-spot-fleet --spot-fleet-request-config file://spot-fleet.json
# 月度预算告警
aws budgets create-budget \
--account-id 123456789 \
--budget '{"BudgetLimit":{"Amount":"5000","Unit":"USD"},"TimeUnit":"MONTHLY","BudgetType":"COST"}' \
--notifications-with-subscribers '[{"Notification":{"NotificationType":"ACTUAL","ComparisonOperator":"GREATER_THAN","Threshold":80},"Subscribers":[{"SubscriptionType":"EMAIL","Address":"devops@company.com"}]}]'
架构图
成本优化(FinOps):让每分钱花在刀刃上架构
┌──────────────────────────────────────────┐
│ FinOps三大支柱 │
│ 可视化(看见钱) │ 责任化(谁花的) │ 优化(少花钱) │
└──────────────────┬───────────────────────┘
┌──────────────┼──────────────┐
▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌──────────┐
│ Kubecost│ │AWS Cost │ │ 成本告警 │
│(K8s成本)│ │Explorer │ │(超预算) │
└────────┘ └──────────┘ └──────────┘
故障排查
❌ 成本突然飙升
aws ce get-cost-and-usage \
--time-period Start=$(date -d '7 days ago' +%Y-%m-%d),End=$(date +%Y-%m-%d) \
--granularity DAILY --metrics BlendedCost --group-by Type=SERVICE
# 常见:数据传输费/忘记关闭的测试实例/日志存储暴增/Spot回收后按需启动
💡 FinOps原则:成本可视化是第一步、每个团队对自己资源成本负责、Right-size优先于Reserved。
🏆 成就解锁:FinOps专家!
掌握AWS成本分析、K8s资源优化、Spot实例、预算告警——省钱也是一种工程能力
📝 FinOps成熟度模型
| 级别 | 特征 | 行动 |
| L1 爬行 | 不知道花了多少 | 成本可视化 |
| L2 行走 | 知道谁花的 | 标签+分账 |
| L3 奔跑 | 主动优化 | Right-size+Spot |
| L4 飞行 | 成本驱动架构 | FinOps融入设计 |
💡 省钱速查:Right-size实例省30%、Spot实例省60%、RI预留省40%、存储分层省50%、清理闲置省20%。
🔧 Kubecost成本监控
# 安装Kubecost
helm repo add kubecost https://kubecost.github.io/cost-analyzer/
helm install kubecost kubecost/cost-analyzer \
--namespace kubecost --create-namespace \
--set kubecostToken="devops@company.com" \
--set prometheus.server.global.external_labels.cluster_id=prod
# 访问Dashboard
kubectl port-forward -n kubecost svc/kubecost-cost-analyzer 9090:80
# API查询成本
curl -s http://localhost:9090/api/v1/report/allocation | jq '.[0].TotalCost'
# 按命名空间查询
curl -s "http://localhost:9090/api/v1/report/allocation?window=7d&aggregate=namespace" | jq
# 按Label查询(团队成本)
curl -s "http://localhost:9090/api/v1/report/allocation?window=30d&aggregate=label:team" | jq
# 生成成本报告
curl -s "http://localhost:9090/api/v1/report/allocation?window=30d&format=csv" > cost-report.csv
📝 成本优化速查
| 优化项 | 潜在节省 | 实施难度 | 风险 |
| Right-sizing实例 | 30-50% | 低 | 低 |
| Spot/抢占式实例 | 60-90% | 中 | 中(可中断) |
| Reserved Instances | 30-60% | 低 | 低(承诺期) |
| 自动扩缩容 | 20-40% | 中 | 低 |
| 存储分层 | 40-70% | 低 | 低 |
| 清理闲置资源 | 10-30% | 低 | 低 |
| Graviton/ARM | 20-40% | 中 | 中(兼容性) |
| 压缩/CDN缓存 | 10-20% | 低 | 低 |
💡 FinOps日常:每周Review成本趋势、每月出团队成本报告、每季度优化一轮、每年重新评估云厂商。
⚠️ 学习建议:每课内容都需要在实验环境中实际操作验证,只有动手才能真正掌握。建议搭建自己的实验环境反复练习。
📝 本课知识图谱
| 知识域 | 核心技能 | 验证方式 |
| 核心概念 | 理解原理和架构 | 能用自己的话解释 |
| 命令实操 | 熟练使用相关工具 | 能独立完成操作 |
| 故障排查 | 定位和解决问题 | 能在模拟故障中恢复 |
| 最佳实践 | 遵循生产级标准 | 能设计可靠方案 |
💡 持续学习:技术领域更新快,关注官方博客、GitHub Release、社区动态,保持知识新鲜度。
🔗 相关课程链接
| 前置课程 | 后续课程 | 关联课程 |
| 前几课基础内容 | 下一课深入内容 | 跨领域综合应用 |
⚠️ 实验环境安全:本课所有命令请在隔离的实验环境中执行,避免在生产环境直接操作。备份重要数据后再进行任何修改操作。
📌 记住:理论+实践=真正的掌握。每个概念都要动手验证,每个命令都要理解原理。