大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
资源监控与优化
集群跑起来后,常见问题是 节点利用率低却报 Pending,或 limits 虚高导致浪费、limits 过低导致 throttle/OOM。本课对应路线图 monitoring-optimizing-resource-usage——用指标驱动 rightsizing、HPA 调参、节点池伸缩,与 k8a-resources 的配额形成闭环。
学习目标
- 用 Prometheus 查询对比 Pod requests vs 实际 CPU/内存使用
- 识别 over-provision 与 under-provision 的信号
- 列出 CodeRoadMap backend 资源优化检查清单
看哪些数
| 指标 / 视图 | 回答什么 |
|---|---|
container_cpu_usage_seconds_total vs request | CPU 是否长期远低于 request |
| 内存 working set vs limit | 是否频繁 OOM 或 limit 过大 |
kube_pod_status_phase{phase="Pending"} | 调度失败是否因 Insufficient 资源 |
| 节点 allocatable - 已分配 requests | 是否「看起来有空但 schedule 不上」 |
| HPA 当前副本 vs max | 是否触顶或从未扩容 |
数据源来自 k8a-obs 的 kube-state-metrics 与 cAdvisor;Grafana 面板可参考 prom-grafana 与 obs-dashboards。
Over-provision 信号
Pod CPU request: 1000m
P95 实际使用: 80m 持续 7 天
→ 浪费调度槽位,节点看似满实则空
Rightsizing 流程:
- 取 7–14 天 P95/P99 使用量(排除压测窗口)
- request 设为 P95 + 小缓冲;limit 略高于峰值
- staging 验证后再改 prod values(helm-release)
- 滚动重启观察 OOM/throttle 告警
Java/Spring 服务注意 JVM 堆 + metaspace + direct buffer 一并算进 memory limit。
Under-provision 信号
| 现象 | 可能原因 |
|---|---|
| CPU throttle 高 | limit 过低 |
| OOMKilled | memory limit < 实际峰值 |
| Latency 升、CPU 顶满 | request 过低导致节点过载 |
| HPA 频繁抖动 | target 过低或 metrics 噪声 |
与 k8a-topology 冲突时:扩副本可能加剧 每 AZ skew,先查 spread 与节点池是否 每 AZ 都有容量。
节点池与 Cluster Autoscaler
Pod Pending(Insufficient cpu)
→ CA 增加 Node(若未达 pool max)
→ 仍 Pending → 查 taint、toleration、spread 硬约束
Bin packing 与 成本:Spot/Preemptible 节点池跑批处理(配合 k8a-taints);稳定 API 用 on-demand 池。多集群 prod/staging 资源基线分开评估,见 k8a-multi。
VPA 与 HPA(了解)
| 组件 | 作用 |
|---|---|
| HPA | 副本数伸缩(k8s-resources 入门) |
| VPA | 自动建议/修改 requests(生产慎用 Auto 模式) |
多数团队 手动 rightsizing + HPA 已够;VPA 适合批处理或长期漂移明显的 workload。
CodeRoadMap 优化清单
- backend Deployment:requests 对齐 7 天 P95
- 每 namespace ResourceQuota 与真实用量对比
- HPA
targetCPUUtilization是否导致 2↔6 副本抖动 - Grafana 一页:节点 CPU/内存分配率 + Pending Pod 原因
- 告警:持续 Pending >5min、OOMKilled rate、节点磁盘 >85%
练习
- 写 PromQL 思路:某 namespace Pod 实际 CPU 与 request 比值(伪公式即可)
- 解释「requests 总和超过节点 allocatable」为何导致 Pending
- 给 backend 一条 rightsizing 决策记录模板(before/after/验证)
小结
用数据改 requests,用 HPA 应对流量,用 CA 应对容量——优化是持续循环。 下一课综合练习:多 AZ 部署方案。