CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Kubernetes 进阶/课时/资源监控与优化
RawBlame
课时目录12 节

Kubernetes 进阶

  1. 01K8s 进阶概览
  2. 02托管集群选型
  3. 03自建 vs 托管
  4. 04控制平面与工作节点
  5. 05多集群管理
  6. 06污点和容忍度
  7. 07拓扑分布约束
  8. 08CRD 与自定义控制器
  9. 09资源管理与驱逐
  10. 10集群可观测性
  11. 11资源监控与优化
  12. 12综合练习

资源监控与优化

monitoring-optimizing-resource-usage。

25 分钟

资源监控与优化

集群跑起来后,常见问题是 节点利用率低却报 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 requestCPU 是否长期远低于 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 流程:

  1. 取 7–14 天 P95/P99 使用量(排除压测窗口)
  2. request 设为 P95 + 小缓冲;limit 略高于峰值
  3. staging 验证后再改 prod values(helm-release)
  4. 滚动重启观察 OOM/throttle 告警

Java/Spring 服务注意 JVM 堆 + metaspace + direct buffer 一并算进 memory limit。

Under-provision 信号

现象可能原因
CPU throttle 高limit 过低
OOMKilledmemory 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 部署方案。

加载本节练习…
← 上一课集群可观测性下一课 →综合练习