名称: gcp-resource-optimizer 描述: 优化Google Cloud Platform资源分配并有效管理云信用。在规划GCP部署、分析云支出、最大化即将到期信用的价值、调整实例大小或设计经济高效架构时使用。触发条件包括GCP成本优化、信用管理、资源分配规划或云预算问题。 许可证: MIT
GCP资源优化器
通过策略性分配最大化GCP资源和信用的价值。
信用消耗策略
信用到期规划
管理即将到期的信用时:
- 审核当前使用情况:
gcloud billing accounts describe ACCOUNT_ID - 计算消耗率:总信用 ÷ 剩余天数 = 所需每日支出
- 识别高价值用途:什么是创造持久价值与临时计算?
高价值信用用途
持久价值(优先):
- 训练机器学习模型(工件持久)
- 构建容器镜像
- 生成数据集
- 对累积工作运行批处理
临时性(策略性使用):
- 计算实例(关闭后消失)
- 开发环境
- 测试基础设施
成本优化模式
Compute Engine
调整实例大小:
# 检查推荐
gcloud recommender recommendations list \
--project=PROJECT_ID \
--location=ZONE \
--recommender=google.compute.instance.MachineTypeRecommender
经济高效机器类型:
| 需求 | 推荐 | 原因 |
|---|---|---|
| 通用工作负载 | e2-medium | 最佳性价比 |
| 内存密集型 | n2-highmem | 更好的RAM比例 |
| CPU突发 | e2-micro/small | 可突增,便宜 |
| ML训练 | n1 + GPU | 需要加速器 |
| 容忍Spot实例 | Spot VMs | 60-91%折扣 |
抢占式/Spot VMs:
- 比标准便宜60-91%
- 可能以30秒通知终止
- 适用于:批处理作业、容错工作负载、开发
- 不适用于:生产、有状态服务
Cloud Run
优化Cloud Run:
# 最小化冷启动和成本
spec:
template:
spec:
containerConcurrency: 80 # 最大化每个实例的请求数
timeoutSeconds: 300
metadata:
annotations:
autoscaling.knative.dev/minScale: '0' # 缩放到零
autoscaling.knative.dev/maxScale: '10' # 限制成本
run.googleapis.com/cpu-throttling: 'true' # 仅在处理时使用CPU
Cloud Storage
存储类别优化:
| 类别 | 使用案例 | 成本/GB/月 |
|---|---|---|
| Standard | 频繁访问 | ~$0.020 |
| Nearline | 月度访问 | ~$0.010 |
| Coldline | 季度访问 | ~$0.004 |
| Archive | 年度访问 | ~$0.0012 |
生命周期规则:
{
"lifecycle": {
"rule": [
{
"action": {"type": "SetStorageClass", "storageClass": "NEARLINE"},
"condition": {"age": 30}
},
{
"action": {"type": "SetStorageClass", "storageClass": "COLDLINE"},
"condition": {"age": 90}
},
{
"action": {"type": "Delete"},
"condition": {"age": 365}
}
]
}
}
BigQuery
成本控制:
-- 设置最大计费字节
#standardSQL
-- @maximumBytesBilled 10000000000
SELECT * FROM dataset.table
分区以减少成本:
CREATE TABLE dataset.table
PARTITION BY DATE(timestamp_column)
CLUSTER BY user_id
AS SELECT * FROM source_table
预算警报
设置预算警报:
gcloud billing budgets create \
--billing-account=BILLING_ACCOUNT_ID \
--display-name="月度预算" \
--budget-amount=100USD \
--threshold-rule=percent=50 \
--threshold-rule=percent=90 \
--threshold-rule=percent=100
资源清理
查找未使用资源
# 未使用磁盘
gcloud compute disks list --filter="NOT users:*"
# 未使用IP
gcloud compute addresses list --filter="status=RESERVED"
# 空闲VMs(按CPU)
gcloud monitoring time-series list \
--filter='metric.type="compute.googleapis.com/instance/cpu/utilization"' \
--interval="start=2024-01-01T00:00:00Z"
清理脚本
#!/bin/bash
# cleanup_unused.sh - 运行前检查!
# 列出(不删除)未使用资源
echo "=== 未使用磁盘 ==="
gcloud compute disks list --filter="NOT users:*" --format="table(name,zone,sizeGb)"
echo "=== 预留IP ==="
gcloud compute addresses list --filter="status=RESERVED" --format="table(name,region,address)"
echo "=== 超过30天的快照 ==="
gcloud compute snapshots list --filter="creationTimestamp<$(date -d '30 days ago' -Iseconds)" --format="table(name,diskSizeGb,creationTimestamp)"
成本架构模式
无服务器优先
请求 → Cloud Run → Firestore → 完成
(缩放到零) (按操作付费)
对比
请求 → GKE → Cloud SQL → 完成
(持续运行) (持续运行)
批处理
Pub/Sub → Cloud Functions → BigQuery(批量加载)
(比流处理便宜)
开发环境与生产环境
开发环境:
- Spot/抢占式VMs
- 较小机器类型
- 缩放到零的服务
- 共享资源
生产环境:
- 承诺使用折扣(1-3年)
- 调整大小的专用实例
- 仅在需要时冗余
监控设置
# 启用计费导出到BigQuery
gcloud beta billing accounts describe ACCOUNT_ID
# 查询成本
#standardSQL
SELECT
service.description,
SUM(cost) as total_cost
FROM `project.dataset.gcp_billing_export_v1_*`
WHERE _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY 1
ORDER BY 2 DESC
参考文献
references/pricing-cheatsheet.md- 快速定价参考references/cost-queries.md- BigQuery成本分析查询