4. 水位(Watermark)概念:资源水位、成本水位与风险水位定义

在 Kubecost 的准入策略体系中,水位(Watermark)是衡量集群资源利用效率、成本健康度与变更风险的核心量化指标。水位不是一个单一数值,而是从三个不同维度对集群状态进行标定:资源水位、成本水位与风险水位。理解这三个水位的定义与相互关系,是配置准入策略、拦截高风险变更的前提。

4.1 三种水位的定义与对比

水位类型 核心度量 典型阈值区间 准入策略关注点
资源水位 CPU / 内存 / GPU 的请求(Request)与限制(Limit)利用率 低水位:< 40%
中水位:40% – 75%
高水位:> 75%
资源是否过度预留或接近饱和
成本水位 每核心小时成本、命名空间月度支出、闲置成本占比 低水位:< 预算 60%
中水位:60% – 90%
高水位:> 90%
变更是否导致成本超预算或浪费加剧
风险水位 变更影响范围、回滚复杂度、历史故障率 低风险:影响 < 5% 副本
中风险:影响 5% – 30% 副本
高风险:影响 > 30% 副本
变更是否可能引发级联故障或服务降级
关键原则:三种水位独立计算,但准入策略通常采用“水位取高”策略——只要任一水位达到高风险阈值,该变更即被拦截或告警。

4.2 资源水位(Resource Watermark)

资源水位反映集群中计算资源(CPU、内存、GPU)的实际使用量与预留量之间的关系。Kubecost 通过分析 Prometheus 中的容器指标,计算每个工作负载的 Request 利用率和 Limit 利用率,并聚合到节点、命名空间、集群层级。

  • Request 利用率 = 实际使用量 / Request 值 × 100%
  • Limit 利用率 = 实际使用量 / Limit 值 × 100%
  • 节点饱和度 = 所有 Pod Request 总和 / 节点可分配资源 × 100%

当资源水位超过 75% 时,集群进入“高水位”状态,此时新增 Pod 可能因资源不足而 Pending,或导致现有 Pod 被驱逐。准入策略在此水位下会拒绝任何未设置资源限制或 Request 过高的变更。

4.3 成本水位(Cost Watermark)

成本水位衡量的是集群支出与预算的偏离程度。Kubecost 将云账单数据与 Kubernetes 资源标签关联,计算出每个命名空间、部署、标签维度的实际成本,并与预设的预算阈值进行比较。

成本水位等级 判定条件 准入策略动作
低水位 当前支出 < 预算的 60% 允许变更,记录成本增量
中水位 当前支出在预算的 60% – 90% 之间 允许变更,但触发成本告警通知
高水位 当前支出 > 预算的 90% 拦截变更,要求提供成本优化理由
实践建议:成本水位应结合“闲置成本”一起评估。即使总支出未超预算,若闲置成本占比超过 20%,也应视为高成本水位,因为变更可能进一步放大浪费。

4.4 风险水位(Risk Watermark)

风险水位评估变更操作本身对集群稳定性的潜在冲击。Kubecost 通过分析变更的 影响半径(受影响的 Pod 副本数占比)、回滚复杂度(是否涉及有状态服务、PVC、多副本)、以及 历史故障率(该命名空间或工作负载在过去 7 天的故障次数)来综合计算风险分数。

  • 影响半径:变更涉及的 Pod 副本数 / 该工作负载总副本数 × 100%
  • 回滚复杂度:有状态服务 +2 分,多副本 +1 分,无状态单副本 +0 分
  • 历史故障率:过去 7 天故障次数 × 10 分/次

风险分数 ≥ 60 分即判定为高风险水位,准入策略将强制要求人工审批或直接拒绝变更。

4.5 三种水位的联动关系

三种水位联动关系图 资源水位 CPU/内存/GPU 利用率 成本水位 预算消耗 / 闲置成本 风险水位 影响半径 / 回滚复杂度 资源浪费 推高成本 预算超支 增加变更压力 高风险变更导致资源预留膨胀 准入策略决策引擎 任一水位达高风险 → 拦截变更 说明:三种水位并非孤立存在。资源水位过高会推高成本水位,成本水位紧张会诱使运维人员执行高风险变更, 而高风险变更又可能因资源预留膨胀进一步恶化资源水位,形成恶性循环。

4.6 水位在准入策略中的实际应用

在 Kubecost 准入策略中,三种水位被组合成 复合水位评分,用于决定是否允许变更通过。以下是一个典型的评分规则示例:

# 复合水位评分规则(伪代码)
def calculate_watermark_score(resource_wm, cost_wm, risk_wm):
    # 每个水位等级映射为分数:低=0,中=1,高=2
    total = resource_wm.score + cost_wm.score + risk_wm.score
    if total >= 4:  # 至少两个高水位或一个高+两个中
        return "BLOCK"
    elif total >= 2:
        return "WARN"
    else:
        return "ALLOW"
注意:复合评分规则应根据业务场景调整。对于核心生产服务,建议将“风险水位”的权重提高至 2 倍,因为风险水位直接关联变更的稳定性影响。

4.7 水位数据的获取与更新频率

水位类型 数据源 更新频率 延迟
资源水位 Prometheus (kube-state-metrics, cAdvisor) 每 30 秒 < 1 分钟
成本水位 云账单 API + Kubecost 成本模型 每小时 15 – 30 分钟
风险水位 Kubernetes Events + Kubecost 审计日志 实时(变更触发时计算) < 5 秒

由于成本水位的更新频率较低,准入策略在评估成本水位时,会使用最近一次有效数据并结合当前变更的资源增量进行预估计算,以确保实时性。