4. 容量巡检概念:什么是容量巡检?集群资源水位与Pod资源限制

在 Kubernetes 集群运维中,容量巡检是指对集群整体资源容量、节点资源水位以及工作负载资源限制进行周期性检查与评估的过程。其核心目标是确保集群有足够的资源承载当前及预期的 Pod 运行,同时避免因资源争抢导致 Pod 驱逐、节点过载或应用性能下降。

4.1 容量巡检的定义与目标

容量巡检不是一次性的容量规划,而是持续性的健康检查机制。它关注三个层次:

  • 集群容量:集群所有节点的可分配资源总量(CPU、内存、存储、Pod IP 等)。
  • 资源水位:节点当前已使用资源与可分配资源的比例,反映节点负载压力。
  • 资源限制:Pod 的 requests 与 limits 配置是否合理,是否存在超卖或浪费。
关键指标:容量巡检通常以“资源利用率百分比”和“剩余可调度资源”作为核心度量,阈值一般设置为 70% 警告、85% 严重、95% 紧急。

4.2 集群资源水位模型

下图展示了集群资源水位的分层结构,从集群总容量到 Pod 资源限制的逐层映射关系:

集群资源水位分层模型 集群资源水位分层模型 集群总容量(Total Cluster Capacity) 节点可分配资源(Node Allocatable) 节点资源水位(Node Resource Watermark) Pod 资源限制(Requests & Limits) 巡检从下往上:先检查 Pod 限制是否合理,再评估节点水位,最后判断集群容量是否充足

4.3 Pod 资源限制:Requests 与 Limits

Pod 资源限制是容量巡检的微观基础。每个容器都可以声明两类资源约束:

参数 含义 调度影响 运行时影响
requests 容器保证能获得的最小资源量 调度器按 requests 选择节点 CPU 按 requests 分配时间片;内存按 requests 预留
limits 容器允许使用的最大资源上限 不影响调度决策 CPU 超过 limits 会被节流;内存超过 limits 会导致 OOM Kill
常见陷阱:只设置 limits 而不设置 requests,会导致调度器按 limits 计算节点负载,造成实际资源超卖;只设置 requests 而不设置 limits,则容器可能无限制使用节点资源,影响同节点其他 Pod。

4.4 资源水位的计算与阈值

节点资源水位的计算公式如下:

节点 CPU 水位 = (节点已分配 CPU requests) / (节点可分配 CPU) × 100%
节点内存水位 = (节点已分配内存 requests) / (节点可分配内存) × 100%

实际巡检中,通常使用以下分级阈值:

水位区间 状态 建议操作
0% – 60% 健康 正常巡检,无需干预
60% – 75% 关注 记录趋势,评估未来扩容需求
75% – 85% 警告 检查 Pod 资源限制是否合理,考虑节点扩容
85% – 95% 严重 立即排查超卖 Pod,准备紧急扩容
> 95% 紧急 节点可能触发驱逐,需立即处理

4.5 容量巡检与滚动更新的关系

在 Deployment 滚动更新过程中,容量巡检尤为重要:

  • 临时资源峰值:滚动更新会同时运行新旧版本 Pod,导致节点资源需求瞬间上升。
  • Pod 驱逐风险:如果节点水位过高,新 Pod 可能无法调度,或旧 Pod 被驱逐。
  • 资源限制校验:更新前应确认新版本 Pod 的 requests/limits 是否在集群容量范围内。
最佳实践:在 CI/CD 流水线中集成容量巡检脚本,在触发滚动更新前自动检查目标节点池的剩余可调度资源是否满足新 Pod 的 requests 总和。

4.6 容量巡检的常见工具与命令

以下命令可用于快速获取集群资源水位信息:

# 查看节点资源分配情况
kubectl describe nodes | grep -A 5 "Capacity\|Allocatable\|Requests"

# 查看节点资源利用率(需安装 metrics-server)
kubectl top nodes

# 查看 Pod 资源限制
kubectl get pods -o custom-columns=NAME:.metadata.name,CPU_REQ:.spec.containers[*].resources.requests.cpu,MEM_REQ:.spec.containers[*].resources.requests.memory,CPU_LIM:.spec.containers[*].resources.limits.cpu,MEM_LIM:.spec.containers[*].resources.limits.memory

下图展示了容量巡检在滚动更新流程中的触发位置:

容量巡检在滚动更新中的位置 容量巡检在滚动更新流程中的位置 提交新版本 容量巡检检查 执行滚动更新 告警并阻塞更新 容量巡检在滚动更新前执行:若节点剩余资源不足以承载新 Pod 的 requests,则阻塞更新并触发告警 避免因资源不足导致 Pod 调度失败或节点过载

4.7 容量巡检清单

执行容量巡检时,建议按以下清单逐项检查:

  1. 集群总容量:确认集群 CPU、内存、存储总量是否满足业务增长预期。
  2. 节点水位:检查每个节点的 CPU 和内存水位,标记超过 75% 的节点。
  3. Pod 资源限制:抽查关键 Deployment 的 requests/limits 配置,确保比例合理。
  4. 超卖情况:计算节点上所有 Pod 的 limits 总和是否超过节点可分配资源。
  5. 预留资源:检查系统预留(kube-reserved)和驱逐阈值(eviction-hard)配置。
  6. 滚动更新影响:评估当前正在进行的滚动更新是否会导致临时资源峰值。
巡检频率建议:生产集群建议每 5 分钟自动巡检一次节点水位,每日生成容量报告;滚动更新前必须执行一次即时巡检。